例如,在木材文档中,我们有很多类似以下的示例:
{% for item in menu.items %}
{{ post.author.name }}
现在,“ 项目”和“ 菜单”等都是预先定义的,用户没有在文件中定义它们(否则,据我所知Timber和TWIG没什么意义。)
我不明白的是我在哪里可以找到这些清单。在Timber的文档中,有很多示例,然后将它们与Wordpress的Timber Starter主题进行比较时,我看到了很多示例,甚至在文档中都没有提到。
答案 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()
因此author
是Timber\Post
的一种方法,它返回一个Timber\User
对象。 Timber\User
对象具有一种称为name
的方法,该方法返回“用户的友好名称”。
但是!当您仅查看{{ post.author.name }}
时,它也可能是您自己定义的多维数组:
$context['post'] = array(
'author' => array(
'name' => 'Tom Riddle',
),
);
仅在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 } %}
回到您的特定问题:
- 在哪里可以找到所有可用物品的列表?
- 这些项目背后的逻辑是什么?
恐怕没有确定的列表,因为变量是非常动态的。它主要是全局上下文,您从模板设置的变量,Timber’s classes的方法和属性以及您在Twig中定义的变量的组合。
如果您还有其他问题,请在此答案中添加注释,我可以相应地更新此答案。