【问题标题】:How to convert php template to Timber (Wordpress)如何将 php 模板转换为 Timber (Wordpress)
【发布时间】:2020-03-13 17:37:28
【问题描述】:

我很好地创建了一个全新的 Timber 模板,但我需要覆盖插件模板(MEC 事件) - 插件支持提供帮助,但它在 php 中,它可以工作并从我的页眉和页脚中引入基本树枝模板,但不包括应有的 post.thumbnailpost.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();

【问题讨论】:

    标签: wordpress timber


    【解决方案1】:

    我不熟悉 MEC 活动日历,但通过查看您的代码 sn-p,我认为您可以使其工作,至少在一定程度上。

    你有这三行,那种准备应该在模板中显示的数据。

    $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.thumbnailpost.title,您还可以在 PHP 模板中准备一个 post 变量:

    <?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 );
    

    【讨论】:

    • 非常感谢 - 起初我遇到了一个错误,所以重新阅读你的解释并尝试在树枝中使用 {{ }} 而不是 {% %} 并且一切正常(你'没错,我正在扩展一个 base.twig 模板)-如果您想修改答案,我可以将其打勾
    • @iain-g 很高兴你成功了!好的,所以{{ 工作,{% 不工作。我在回答中改变了这一点。
    • 再次感谢 - $context = array_merge 也帮助我完成了网站的另一部分 - 你是明星!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-06-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-01-27
    相关资源
    最近更新 更多