proklung / wp-static-pages-bundle
从路由生成Wordpress-bitrix的静态页面。
1.0.4
2022-01-14 07:16 UTC
Requires
- php: >=7.3 | ^8.0
- symfony/config: ~4|~5
- symfony/dependency-injection: ^4.0 || ^5.0
- symfony/filesystem: ~4|~5
- symfony/http-kernel: ^4.0 || ^5.0
- twig/twig: ^2.13|^3
Requires (Dev)
README
使用基于Symfony\Bundle\FrameworkBundle\Controller\TemplateController的分支作为基础。
安装
composer.json
"repositories": [ { "type": "git", "url": "https://github.com/proklung/wp.static.pages.bundle" } ]
composer require proklung/wp-static-pages-bundle
示例配置包
static_page_maker: post_type: static_pages set_last_modified_header: true
路由描述(在routes.yaml类型的文件中)
simple_static_page: path: /simple_page/ methods: [GET] controller: 'Prokl\StaticPageMakerBundle\Services\TemplateControllerContainerAware::templateAction' defaults: is_granted: ['administrator'] template: './staticPages/example.twig' statusCode: 202 # HTTP Status = Accepted context: url: '/simple_page/' site_name: 'ACME' service: '@app.options' # Сервис как параметр # Препроцессоры контекста. _processors: - '@Prokl\StaticPageMakerBundle\Services\ContextProcessors\ExampleContextProcessor' object: errored: true finished: true pending: true theme: 'dark' title: 'Простая статическая страница' h1: 'Простая статическая страница' postClasses: 'main' assets: # Глобальный CSS css: 'global.css' # Сss для страницы. Entry в терминах webpack. css_page: 'basicStaticPage.css' js: 'main.js'
注意事项
-
在将数据传递给Twig之前,可以通过“预处理器”链自动更改数据。
包中已有的预处理器
-
SeoContextProcessor - 设置标题 & 描述。
即使路由中明确指定了标题 - 描述参数,连接的预处理器也会覆盖这些值(如果找到信息块记录)。
预处理器 - 实现ContextProcessorInterface接口的类,包含两个方法 setContext(设置器;为了避免每次都复制,存在一个抽象类AbstractContextProcessor)和handle(执行所有工作的地方)。方法必须返回更改后(或未更改)的上下文。
为了使预处理器生效,它必须是一个标记有静态_page_maker.default.context.processor标签的服务。
私有实现:在Wordpress中设置自定义帖子类型
static_pages
。其中title
用于定义页面,而 ACF 字段title
、description
和H1
- SEO属性。 -
-
将配置文件中包的 set_last_modified_header 选项设置为 true,将设置 LastModified 标题。
-
模板示例
基本模板(复制粘贴版本位于 vendor\ProklUng\StaticPageMakerBundle\Examples\templates\static\template\baseTemplate.twig)
{# head #} {% block header %} <!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <title> {{ title }}</title> {% if assets.css|length %} {{ encore_entry_link_tags(assets.css) }} {% endif %} {% if assets.css_page|length %} {{ encore_entry_link_tags(assets.css_page) }} {% endif %} </head> <body class="{{ postClasses }}"> {% endblock %} {# content #} {% block content %} {% endblock %} {# footer #} {% block footer %} <footer> <script src="/node_modules/jquery/dist/jquery.min.js"></script> {% if assets.js|length %} {{ encore_entry_script_tags(assets.js) }} {% endif %} </footer> </div> </body> </html> {% endblock %}
特定页面
{% extends "./staticPages/basicStaticSimplePage.twig" %} {% block content %} <br/> <div> {{ app.environment }} </div> <div class="container"> {% apply inline_css %} <h1> {{ h1 }} </h1> <div class="test"> Мои параметры: {{ site_name }} zzz{{ test_globals }} </div> <style> .test { color: red; } .errored {color: rosybrown} </style> {% endapply %} {{ render(controller("Prokl\\TwigExtensionsPackBundle\\Twig\\Extensions\\Examples\\ExampleSimpleController", { 'id': 3 })) }} {{ render('/api/calendar/', {'headers' : { 'X-Requested-With': 'XMLHttpRequest'} }) }} {{ render_service("Prokl\\TwigExtensionsPackBundle\\Twig\\Extensions\\Examples\\ExampleServiceForRender", "action", { 'id': 3} , {'filesystem' : 'filesystem.instance' }) }} {{ param('instagram.account') }} <br><br/> <p class="{{ html_classes('a-class', 'another-class', { 'errored': object.errored, 'finished': object.finished, 'pending': object.pending, }) }}">How are you doing?</p> {{ service.ajaxNonce }} <div> Работа процессора контента: {{ processor_change }} </div> </div> {% endblock %} ``` 5) Сами шаблоны ищутся согласно зарегистрированным в Твиге путям. В моем случае - в local/twig. 6) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.