Timber / TWIG for Wordpress-有关一些基础知识的问题

时间:2018-11-06 07:29:06

标签: php wordpress twig timber

例如,在木材文档中,我们有很多类似以下的示例:

{% for item in menu.items %}

{{ post.author.name }}

现在,“ 项目”和“ 菜单”等都是预先定义的,用户没有在文件中定义它们(否则,据我所知Timber和TWIG没什么意义。)

我不明白的是我在哪里可以找到这些清单。在Timber的文档中,有很多示例,然后将它们与Wordpress的Timber Starter主题进行比较时,我看到了很多示例,甚至在文档中都没有提到。

  1. 我在哪里可以找到所有可用物品的列表?
  2. 这些项目背后的逻辑是什么?

1 个答案:

答案 0 :(得分:2)

别傻了,因为你不是!我们都去过那里。当我开始使用Timber时,我也有同样的问题。我们正在努力不断改进文档,因此此类问题有助于我们找出可以做得更好的地方。

只要您在Twig中看到一个变量,它实际上就可以来自两个不同的地方:

全局上下文中的变量

每当您通过Timber::get_context()设置上下文时,我们大多数人都会使用一个过滤器来使变量全局可用。当您看到{% for item in menu.items %}时,可能来自文档中有关«Setting up a menu globally»的部分。我不得不承认,我们仅通过此示例说明了过滤器,这并不理想。但是,我们正在对此进行更改。在下一个版本的Timber中,我们尝试explain the global context better(确保仅阅读有关全局上下文的部分,因为有关“模板上下文”的部分描述了尚不可用的功能。)

模板中的变量

考虑以下示例:

$context         = Timber::get_context();
$context['post'] = new Timber\Post();

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

您在这里通过Timber::get_context()设置了上下文。使用Timber::get_context()时,会得到一堆在全局范围内有意义的变量,但并非对每个模板都适用。

$context变量是一个数组,其中包含要传递给Twig模板的所有变量,在本例中为 single.twig 。什么时候可以添加我们自己的变量,例如上面的示例,在其中添加post来保存当前显示的帖子的Timber\Post对象。

木材类的变量

在模板中,当您看到{{ post.author.name }}时,author可能是不同的东西:

  • Timber\Post对象的一个​​属性,其中包含一个值。这些都是{{ dump(post) }}时您将看到的所有变量。
  • 将执行Timber\Post对象的方法。一开始可能会造成混淆,因为在PHP中,您总是需要添加括号来调用函数,而在Twig中,则不需要。在PHP中调用$post->author()时,将在Twig中使用post.author。要查看Timber\Post可用的所有方法的列表,您需要查看Timber\Post in the docs的“参考”部分。

因此,如果您要用PHP编写示例{{ post.author.name }},它将看起来像这样:

$post->author()->name()

因此authorTimber\Post的一种方法,它返回一个Timber\User对象。 Timber\User对象具有一种称为name的方法,该方法返回“用户的友好名称”。

但是!当您仅查看{{ post.author.name }}时,它也可能是您自己定义的多维数组:

$context['post'] = array(
    'author' => array(
        'name' => 'Tom Riddle',
     ),
);

仅在Twig中查看就不会知道。

Twig语法中的变量

看到{% for item in menu.items %}时,您正在遍历变量menu.items。变量menu可能来自全局上下文(Timber\Menu对象),而items是此对象的属性。 item变量是创建的新变量,用于访问for loop中的当前循环项。在此示例中,它是当前菜单项。您可以为item选择任意名称。

包含中的变量

您可以通过include语句在Twig中传递变量。例如,如果您通过模板文件定义了post,并且想在包含的模板中使用其他名称,则可以这样使用它:

{% include 'teaser.twig' with { teaser: post } %}

回到您的特定问题:

  
      
  1. 在哪里可以找到所有可用物品的列表?
  2.   
  3. 这些项目背后的逻辑是什么?
  4.   

恐怕没有确定的列表,因为变量是非常动态的。它主要是全局上下文,您从模板设置的变量,Timber’s classes的方法和属性以及您在Twig中定义的变量的组合。

如果您还有其他问题,请在此答案中添加注释,我可以相应地更新此答案。