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

Timber/TWIG for Wordpress - Questions about some basics

例如,在 Timber 文档 中,我们有很多如下示例:

{% for item in menu.items %}

{{ post.author.name }}

现在“item”和“menu”等都是预定义的,用户在文件中没有定义(否则根据我的理解,Timber 和 TWIG 没有多大意义)。

我不明白的是在哪里可以找到这些列表。在 Docs of Timber 中,有一堆示例,然后当我将它们与 Wordpress 的 Timber Starter Theme 进行比较时,我看到了一堆,它们甚至在文档中都没有提到。

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

不要觉得自己很笨,因为你不是!我们都去过那里。当我开始使用 Timber 时,我也有同样的问题。我们一直在努力改进文档,所以像这样的问题可以帮助我们找出可以做得更好的地方。

每当你在 Twig 中看到一个变量时,它实际上可能来自几个不同的地方:

来自全局上下文的变量

只要您通过 Timber::get_context() 设置上下文,我们大多数人都会使用一个过滤器来使变量全局可用。当您看到 {% for item in menu.items %} 时,它可能来自文档中关于 «Setting up a menu globally». I have to admit that we explain the filter through this example only, which is not ideal. But we’re changing this. In the next version of Timber, we try to explain the global context better 的部分(确保只阅读关于全局上下文的部分,因为关于 «Template Contexts» 的部分描述的功能不是可用。)

来自模板的变量

考虑以下示例:

$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 来保存当前显示的 post.

Timber\Post 对象

Timber 的变量 类

在模板中,当你看到{{ 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.
  • 的参考部分

因此,如果您将示例 {{ post.author.name }} 写在 PHP 中,它将如下所示:

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

因此 author is a method of Timber\Post, which returns a Timber\User object. The Timber\User object has a method called name,其中 returns «用户的人性化名称»。

但是!当你只看{{ post.author.name }}的时候,也可以是你自己定义的多维数组:

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

仅在 Twig 中查看它不会知道这一点。

来自 Twig 语法的变量

当您看到 {% for item in menu.items %} 时,您正在遍历变量 menu.items。变量 menu 可能来自全局上下文(一个 Timber\Menu 对象),并且 items is a property of this object. The item variable is a new variable that is created to access the current loop item in the for loop。在此示例中,它是当前菜单项。您可以为 item 选择您想要的任何名称。

包含的变量

你可以通过include语句在Twig中传递一个变量。例如,如果您通过模板文件定义了 post 并希望在您包含的模板中使用不同的名称,您可以像这样使用它:

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

回到你的具体问题:

  1. Where do I find a list of all available items?
  2. What is the logic behind these items?

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

如果您有更多问题,请将其作为评论添加到此答案中,我可以相应地更新此答案。