Как конвертировать php шаблон в Timber (Wordpress) - PullRequest
0 голосов
/ 13 марта 2020

Я отлично создаю новый шаблон Timber, но мне нужно переопределить шаблон плагина (ME C Events) - поддержка плагинов помогает с этим, но в php, который работает и приносит верхний и нижний колонтитулы из моего базового шаблона ветки, но не включают post.thumbnail и post.title на тех, которые должны.

В любом случае я бы хотел сохранить весь сайт в Timber / Twig в идеале, но не имею понятия, с чего начать превращать его в шаблон Timber. Вот шаблон php, любая помощь с благодарностью:

<?php
/**
 * The Template for displaying all single events
 */

get_header();

$single = new MEC_skin_single();
$single_event_main = $single->get_event_mec(get_the_ID());
$single_event_obj = $single_event_main[0];

// Date Widget
$single->display_date_widget($single_event_obj);
// Time Widget
$single->display_time_widget($single_event_obj);
// Location Widget
$single->display_location_widget($single_event_obj); // Show Location
// Label Widget
$single->display_label_widget($single_event_obj);
// Export Widget
$single->display_export_widget($single_event_obj);
//Social
$single->display_social_widget($single_event_obj);

get_footer();

1 Ответ

0 голосов
/ 14 марта 2020

Я не знаком с календарем событий ME C, но, посмотрев на ваш фрагмент кода, я думаю, вы могли бы заставить его работать, по крайней мере, до определенного уровня.

У вас есть эти три линии, такие , готовят данные, которые должны отображаться в шаблоне.

$single = new MEC_skin_single();
$single_event_main = $single->get_event_mec(get_the_ID());
$single_event_obj = $single_event_main[0];

В Timber и Twig вам нужно подготовить данные в PHP, а затем передайте его вашему шаблону Twig. Вот как бы я это сделал.

<?php

$context = Timber::get_context();

$single            = new MEC_skin_single();
$single_event_main = $single->get_event_mec( get_the_ID() );

$context = array_merge( $context, [
    'single'           => $single,
    'single_event_obj' => $single_event_main[0],
] );

Timber::render( 'single-event.twig', $context );

single-event.twig

{% extends 'base.twig' %}

{% block content %}

    {# Date Widget #}
    {{ single.display_date_widget(single_event_obj) }}

    {# Time Widget #}
    {{ single.display_time_widget(single_event_obj) }}

    {# Location Widget #}
    {{ single.display_location_widget(single_event_obj) }}

    {# Label Widget #}
    {{ single.display_label_widget(single_event_obj) }}

    {# Export Widget #}  
    {{ single.display_export_widget(single_event_obj) }}

    {# Social #}
    {{ single.display_social_widget(single_event_obj) }}

{% endblock }

В Timber у вас обычно есть базовый шаблон, который вы расширяете. И в этом базовом шаблоне вы определяете блоки, в которые будет помещаться ваш контент. Для этого и нужны теги {% extend %} и {% block %}. Благодаря этому вы можете избавиться от get_header() и get_footer().

Поскольку $single является объектом с методами display_*_widget(), мы можем получить доступ к этой функции через точечную запись. Методы нуждаются в $single_event_obj в качестве параметра, поэтому мы гарантируем, что эта переменная также передается в данные шаблона.

В случае, если вам теперь нужен доступ к post.thumbnail и post.title, вы также можете подготовить переменная post в вашем шаблоне PHP:

<?php

$context = Timber::get_context();

$single            = new MEC_skin_single();
$single_event_main = $single->get_event_mec( get_the_ID() );

$context = array_merge( $context, [
    'post'             => Timber::get_post(),
    'single'           => $single,
    'single_event_obj' => $single_event_main[0],
] );

Timber::render( 'single-event.twig', $context );
...