我已经在Timber官方存储库中阅读到有关使用的一般性问题应在此处发布。
我是Timber / Twig的新手, 我有一个非常”基本”的问题。
在入门主题中, 我已经看到在single.php中, 将传递给$ context的$ post变量设置为
$post = Timber::query_post()
而page.php是用
$post = new TimberPost();
因此, 当我需要设置一个single-cpt.php时, 我应该使用哪种方法? Timber :: query_post()还是新的TimberPost()?
我已经尝试了它们两个, 并且两个都正常工作, 但是什么是正确的方法呢?
谢谢!
PS:我已经看到在index.php中, 使用新的Timber \ PostQuery()设置了$ context [‘post’]。这基本上可以重现模板层次结构的标准循环吗?
#1
我了解使用哪种方法可能会造成一些困惑。目前, 有很多方法可以做到, 而你尝试过的所有方法都应该可以使用。
在即将发布的Timber 2中, 我们试图统一这一点, 我们将弃用仍然存在的一些方法。因此, 从现在开始, 这就是你应该如何做。
2020年3月更新–我们反复讨论了适用于2.x的新API的外观, 并提出了几乎固定的解决方案。有些事情会在那里发生变化, 如果你想了解更多信息, 可以查看此请求。
在此之前, 这是我们推荐的处理方式:
获得一个帖子
$post = new Timber\Post();
$post = Timber::get_post();
获取帖子集
$post = new Timber\PostQuery();
$post = Timber::get_posts();
如果要对你的帖子使用分页, 则仍然必须使用Timber \ PostQuery:
$post = new Timber\PostQuery();
(在Timber 2.x中, Timber :: get_posts()将可用于分页, 但在1.x中尚不可用。)
标准循环
我已经看到在index.php中, 使用新的Timber \ PostQuery()来设置$ context [‘post’]。这基本上可以重现模板层次结构的标准循环吗?
是!
实际上, 如果你不向PostQuery()传递任何参数, 则甚至不必设置$ context [‘posts’], 因为Timber已经在Timber :: get_context()中为你完成了此操作。
index.php
<?php
use Timber\Timber;
$context = Timber::get_context();
Timber::render( 'index.twig', $context );
使用命名空间的类名
当前, 你可能仍会看到TimberPost()而不是Timber \ Post()。对于版本1, 所有Timber类均已命名空间, 因此从现在开始推荐的方法是在PHP中使用命名空间的类名, 例如Timber \ Term而不是TimberTerm。
但!在Twig中, 你仍将使用非命名空间版本:
{% set post = Post(post_id) %}
or
{% set post = TimberPost(post_id) %}
我希望这可以解决问题。
评论前必须登录!
注册