Php ModX revo 2.2x:如何使用TV值设置tpl?

Php ModX revo 2.2x:如何使用TV值设置tpl?,php,content-management-system,modx-revolution,getresource,Php,Content Management System,Modx Revolution,Getresource,我正试图找到一种基于模板变量(tv)值使用特定tpl呈现资源的方法。以下是我的用例: 我已经为一个带有主页和博客的基本站点安装了modx(我使用了文章插件)。我想在主页上显示博客文章,在文章容器之外。根据我的经验,最简单的方法是使用getResource。但是对于这个特定的项目,我想根据每个结果的tv值来更改getResources结果的tpl 可以将模板变量视为“post类型”。如果你选择“文本”,它将有tplA,如果你选择“多媒体”,它将有tplB等 现在根据我的研究,您可以在getReso

我正试图找到一种基于模板变量(tv)值使用特定tpl呈现资源的方法。以下是我的用例:

我已经为一个带有主页和博客的基本站点安装了modx(我使用了文章插件)。我想在主页上显示博客文章,在文章容器之外。根据我的经验,最简单的方法是使用getResource。但是对于这个特定的项目,我想根据每个结果的tv值来更改getResources结果的tpl

可以将模板变量视为“post类型”。如果你选择“文本”,它将有tplA,如果你选择“多媒体”,它将有tplB等

现在根据我的研究,您可以在getResources调用中使用属性“tplCondition”和“conditionalTpls”来实现这一点,如下所示:

[[getResources?
  &tplCondition=`tv.blogPostType`
  &conditionalTpls=`{"1":"tplA","2":"tplB","3":"tplC"}`
  &tpl=`defaultTpl`
]]
问题是,这似乎不适用于模板变量:(它甚至说它只使用文档中的资源字段…..这真是一个糟糕的问题,因为我不知道如何实现这一点。基于我有限的知识,您可以创建一个片段或类似的内容,但我没有任何线索

有人有解决这个问题的好办法吗

再次总结一下我想做的事情:

-通过模板变量为my articles容器中的博客文章分配“文章类型”

-使用模板变量值根据该值设置特定的tpl

非常感谢您的帮助。谢谢

编辑:好的,我在论坛上得到了回复,并找到了一个解决方案

您可以通过css实现这一点。在tpl中,您可以执行以下操作:

<article class="[[+tv.post-type]]">....</article>
。。。。

这将输出在tv中选择的post类型作为实际使用的元素类,然后您可以使用css根据tv为输出提供不同的外观。它实际上很简单,我有点尴尬,我以前没有见过它。在我的情况下,它100%解决了我的问题,但是如果您需要修改html,我猜javascript将需要如果你需要对html进行重大更改,如果你有一个好的标记,你仍然可以用css来解决它。但是如果这还不够,我会用一个tpl来处理getresources调用,并让该tpl处理切换。如果您可以让您的电视输出值表示每种情况下应使用的tpl名称,您的tpl只需要:

您的电视将首先进行评估,然后作为一个块进行处理。这样您就不需要一个讨厌的开关或if子句


这是假设你想要完全不同的tpl,而不只是需要改变标准tpl的一小部分,在这种情况下,你仍然可以使用这种技术!

条件模板似乎可以与PDO资源(pdoTools的一部分)配合使用。(我必须在tpl条件中的tv前面加上“tv.”,但不能在其他tv中加上)詹姆斯是对的

[[pdoResources?
   &includeTVs=`blogPostType`
   &tplCondition=`tv.blogPostType`
   &conditionalTpls=`{"1":"tplA","2":"tplB","3":"tplC"}`
   &tpl=`defaultTpl`
]]

是的,这也是一种有效的技术。谢谢你添加。我以后必须记住你的技术,因为正如你所说的,它在所有情况下都有效。