proklung/wp-static-pages-bundle

从路由生成Wordpress-bitrix的静态页面。

安装: 1

依赖: 0

建议者: 0

安全: 0

星标: 2

关注者: 1

分支: 0

开放问题: 0

类型:symfony-bundle

1.0.4 2022-01-14 07:16 UTC

This package is auto-updated.

Last update: 2024-09-14 13:13:18 UTC


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'

注意事项

  1. 在将数据传递给Twig之前,可以通过“预处理器”链自动更改数据。

    包中已有的预处理器

    1. SeoContextProcessor - 设置标题 & 描述。

      即使路由中明确指定了标题 - 描述参数,连接的预处理器也会覆盖这些值(如果找到信息块记录)。

    预处理器 - 实现ContextProcessorInterface接口的类,包含两个方法 setContext(设置器;为了避免每次都复制,存在一个抽象类AbstractContextProcessor)和handle(执行所有工作的地方)。方法必须返回更改后(或未更改)的上下文。

    为了使预处理器生效,它必须是一个标记有静态_page_maker.default.context.processor标签的服务。

    私有实现:在Wordpress中设置自定义帖子类型 static_pages。其中 title 用于定义页面,而 ACF 字段 titledescriptionH1 - SEO属性。

  2. 将配置文件中包的 set_last_modified_header 选项设置为 true,将设置 LastModified 标题。

  3. 模板示例

    基本模板(复制粘贴版本位于 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) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.