proklung/bitrixstaticpagemakerbundle

从路由生成静态页面,适用于Symfony-bitrix。

1.0.63 2022-01-14 07:16 UTC

This package is auto-updated.

Last update: 2024-09-14 13:45:37 UTC


README

为什么使用它?

在实际项目中,我使用它来保护一些静态页面,防止内容管理器通过后台手动编辑。

即,这是针对特定问题的私有解决方案。

安装

  1. composer require proklung/facade.bundle

  2. 在bundles.php中激活该包(或者在自定义使用Symfony的情况下,在standalone_bundles.php中)。

基于Symfony\Bundle\FrameworkBundle\Controller\TemplateController的分支类。

路由描述(在routes.yaml类型的文件中)

simple_static_page:
  path: /simple_page/
  methods: [GET]
  controller: 'Prokl\StaticPageMakerBundle\Services\TemplateControllerContainerAware::templateAction'
  defaults:
    # Шаблон
    template:  './static/example2.twig'
    statusCode: 202 # HTTP Status = Accepted
    # Контекст, передаваемый Твигу для рендеринга страницы.
    context:
      # Препроцессоры контекста.
      _processors:
        - '@Prokl\StaticPageMakerBundle\Services\ContextProcessors\ExampleContextProcessor'
      options: '@app.options' # Сервис как параметр
      site_name: 'Example site'
      object: # Объект
        errored: true
        finished: true
        pending: true
      page_type: 'static-page' # Битриксовое свойство страницы page_type
      title: 'Простая статическая страница'
      description: 'Простая статическая страница'

注意事项

  1. 在将数据传递给Твиг之前,存在通过“预处理程序”链自动更改数据的机会。

    包中已有的预处理程序

    • SeoContextProcessor - 从信息块元属性设置title & description。信息块的ID(单独的)在包的配置级别设置。配置中的键为seo_iblock_id。默认为null。

      "SEO"信息块的记录格式:NAME > 静态页面的url。SEO选项卡中的参数。

      即使显式地指定了路由中的title - description参数,已连接的处理器也会覆盖它们的值(如果找到信息块中的记录)。

      预处理程序是实现ContextProcessorInterface接口的类,具有两个方法setContext(setter;为了避免每次都复制它,存在一个抽象类AbstractContextProcessor)和handle(在这里进行所有工作)。方法必须返回更改后(或未更改)的上下文。

      为了使预处理程序生效,它必须是一个标记有static_page_maker.default.context.processor标签的服务。

      如果包的配置中设置了SEO信息块的ID,则自动启动预处理程序。

    • BreadcrumbsContextProcessor。面包屑。

      假设比特里克组件连接到页眉。但不是必须的,结构{{ showComponent('bitrix:breadcrumbs', '') }}也能正常工作。

      该处理器最后启动。作为url使用路由地址,作为描述从上下文的title字段中获取。

  2. 在包的配置中设置set_last_modified_header选项为true时(在local/configs/packages/static_page_maker.yaml中),将设置LastModified标题。

    模块的配置示例位于包根目录的Examples/static_page_maker.yaml。

  3. 在Твиг中添加了两个自定义函数:header和footer,用于输出比特里克页眉和页脚。

    还添加了add_css、add_js和add_string函数,它们是Asset类相应方法的包装。

  4. 模板示例

    基本模板(用于复制粘贴,位于vendor\ProklUng\StaticPageMakerBundle\Examples\templates\static\template\baseTemplate.twig)

    {# head #}
    {% block header %}
        {{ header() }}
    
        {{ APPLICATION.SetTitle(title) }}
        {{ APPLICATION.SetPageProperty('description', description) }}
        {{ APPLICATION.SetPageProperty('page_type', page_type) }}
    
    {% endblock %}
    
    {# content #}
    {% block content %}
    
    {% endblock %}
    
    {# footer #}
    {% block footer %}
        {{ footer() }}
    {% endblock %} 

    具体页面

    ```twig
     {% extends "./static/template/baseTemplate.twig" %}
     
     {# content #}
     {% block content %}
         {{ add_css('/assets/examples/style.css') }}
     
         {% apply inline_css %}
             <br><br><br><br><br>
             <h1>Я статическая страница</h1>
             {{ dump (options) }}
             <div class="test">
                 Мои параметры: {{ site_name }}
             </div>
     
             <div class="test_class">Text</div>
     
             <style>
                 .test {
                     color: red;
                 }
                 .errored {color: rosybrown}
             </style>
     
             {{ encore_entry_link_tags('main') }}
     
             <div class="home-philosophy my-3 my-md-4 my-lg-5 my-xl-10">
                 {{ showComponent('guta:example', '') }}
                 {{ url('foo_route') }}
             </div>
            {% endapply %}
     {% endblock %}
    
    5) Сами шаблоны ищутся согласно зарегистрированным в Твиге путям. В моем случае - в local/twig.
    
    6) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.