An open API service indexing awesome lists of open source software.

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

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) В Твиг подтягиваются все зарегистрированные в системе функции и фильтры.