proklung / bitrixstaticpagemakerbundle
从路由生成静态页面,适用于Symfony-bitrix。
Requires
- php: >=7.3 || ^8.0
- symfony/config: ^4.4 || ^5.0
- symfony/dependency-injection: ^4.4 || ^5.0
- symfony/http-kernel: ^4.4 || ^5.0
- twig/twig: ^1 |^2 |^3
Requires (Dev)
README
为什么使用它?
在实际项目中,我使用它来保护一些静态页面,防止内容管理器通过后台手动编辑。
即,这是针对特定问题的私有解决方案。
安装
-
composer require proklung/facade.bundle
-
在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: 'Простая статическая страница'
注意事项
-
在将数据传递给Твиг之前,存在通过“预处理程序”链自动更改数据的机会。
包中已有的预处理程序
-
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字段中获取。
-
-
在包的配置中设置set_last_modified_header选项为true时(在local/configs/packages/static_page_maker.yaml中),将设置LastModified标题。
模块的配置示例位于包根目录的Examples/static_page_maker.yaml。
-
在Твиг中添加了两个自定义函数:header和footer,用于输出比特里克页眉和页脚。
还添加了add_css、add_js和add_string函数,它们是Asset类相应方法的包装。
-
模板示例
基本模板(用于复制粘贴,位于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) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.