ModX revo 2.2x:如何使用电视值设置tpl?

时间:2014-04-18 23:42:52

标签: php content-management-system modx-revolution getresource

我正在尝试找出一种基于模板变量(tv)值渲染具有特定tpl的资源的方法。这是我的用例:

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

模板变量可以看作“帖子类型”。如果你选择“文本”它会有tplA,如果你选择“多媒体”它会有tplB等......

现在基于我的研究,您将使用属性'tplCondition'和'conditionalTpls'在您的getResources调用中实现此目的,如下所示:

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

问题是,这似乎不适用于模板变量:(它甚至说它只使用文档中的资源字段......这是一个真正的无赖,因为我不知道这个否则根据我的有限知识,你可以创建一个片段或者这样做的东西,但我不知道。

有没有人有这个问题的优雅解决方案?

再次总结我想做的事情:

- 通过模板变量为我的文章容器中的博客帖子分配“帖子类型”。

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

任何帮助都非常感谢。谢谢

编辑:好的,我在论坛上得到了回复,并且遇到了“解决方案”。

你可以用css完成这个。在tpl中,你会做类似的事情:

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

这将输出在tv中选择的帖子类型作为所使用的实际元素类,然后您可以使用css根据tv为输出提供不同的外观。它实际上是如此简单,我有点尴尬,我以前没有看到它。在我的情况下,它100%解决了我的问题,但是,如果你需要chasnge html即时猜测javascript将需要涉及或另一种方法与PHP。把它留在这里以防有人需要它!

3 个答案:

答案 0 :(得分:0)

如果您需要对html进行重大更改,如果您有一个很好的标记,您仍然可以用css解决它。但是,如果这还不够,我会通过使用一个tpl进行getresources调用来解决它,并让tpl处理切换。如果您可以拥有电视输出,则该值将表示每种情况下应使用的tpl的名称,您的tpl只需要: [[$[[+tv.yourtv]]]] 您的电视将首先被评估,然后它将被处理为一个块。这样你就不需要讨厌的开关或if子句。

这是你想要不同的tpls,并且不仅需要改变标准tpl的一些小部分,在这种情况下你仍然可以使用这个tecnique!

答案 1 :(得分:0)

条件模板似乎可以正常使用pdoResources(pdoTools的一部分)。 (我必须在tplCondition中将“tv。”放在电视机前,而不是在其他电视机上放置)

答案 2 :(得分:0)

詹姆斯是对的。

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