https://github.com/proklung/wp.static.pages.bundle
Бандл рендеринга статических страниц из роутов для связки Wordpress-Symfony
https://github.com/proklung/wp.static.pages.bundle
php7 wordpress-symfony
Last synced: 2 months ago
JSON representation
Бандл рендеринга статических страниц из роутов для связки Wordpress-Symfony
- Host: GitHub
- URL: https://github.com/proklung/wp.static.pages.bundle
- Owner: ProklUng
- Created: 2021-06-01T05:42:11.000Z (almost 4 years ago)
- Default Branch: master
- Last Pushed: 2022-01-14T07:17:56.000Z (over 3 years ago)
- Last Synced: 2024-12-25T21:24:18.615Z (4 months ago)
- Topics: php7, wordpress-symfony
- Language: PHP
- Homepage:
- Size: 39.1 KB
- Stars: 2
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: readme.MD
Awesome Lists containing this project
README
# Бандл рендеринга статических страниц из роутов для связки Wordpress-Symfony
В качестве базы используется форкнутый класс Symfony\Bundle\FrameworkBundle\Controller\TemplateController
### Установка
composer.json:
```json
"repositories": [
{
"type": "git",
"url": "https://github.com/proklung/wp.static.pages.bundle"
}
]
``````bash
composer require proklung/wp-static-pages-bundle
```
### Пример конфига бандла
```yaml
static_page_maker:
post_type: static_pages
set_last_modified_header: true
```### Описание роута (в файле типа routes.yaml)
```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) Перед передачей данных в Твиг существует возможность пропустить данные через цепочку
"препроцессоров", чтобы как-нибудь их автоматически изменить.
Препроцессоры, уже имеющиеся в пакете:
1) SeoContextProcessor - установка title & description.
Даже если эксплицитно указаны параметры title - description в роуте, то подключенный процессор
"перебьет" их значения (если найдет запись в инфоблоке).
Препроцессор - класс, реализующий интерфейс ContextProcessorInterface с двумя методами setContext
(сеттер; чтобы не копипастить его каждый раз существует абстрактный класс AbstractContextProcessor) и
handle (где осуществляется вся работа). Метод должен вернуть измененный (или неизмененный) контекст.
Чтобы препроцессор заработал он должен быть сервисом, помеченным тэгом static_page_maker.default.context.processor.
Частная реализация: в Wordpress заведен кастомный тип поста `static_pages`. Где `title` служит для определения страницы,
а ACF поля `title`, `description` и `H1` - seo-свойства.2) При установке опции set_last_modified_header равной true в конфигурации бандла (local/configs/packages/static_page_maker.yaml)
будут установлены заголовки LastModified.
3) Пример шаблона:Базовый (для копипасты лежит в vendor\ProklUng\StaticPageMakerBundle\Examples\templates\static\template\baseTemplate.twig):
```twig
{# head #}
{% block header %}
{{ 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 %}
{% endblock %}
{# content #}
{% block content %}
{% endblock %}
{# footer #}
{% block footer %}
{% if assets.js|length %}
{{ encore_entry_script_tags(assets.js) }}
{% endif %}
{% endblock %}
```
Конкретная страница:
```twig
{% extends "./staticPages/basicStaticSimplePage.twig" %}{% block content %}
{{ app.environment }}
{% apply inline_css %}
{{ h1 }}
Мои параметры: {{ site_name }} zzz{{ test_globals }}
.test { color: red; }
.errored {color: rosybrown}
{% 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') }}
How are you doing?
{{ service.ajaxNonce }}
Работа процессора контента: {{ processor_change }}
{% endblock %}
```
5) Сами шаблоны ищутся согласно зарегистрированным в Твиге путям. В моем случае - в local/twig.6) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.