modx使用chunk创建布局并使用模板调用

时间:2012-03-02 00:34:40

标签: modx modx-revolution modx-templates modx-chunks

我正在使用modx革命。我想创建一个名为layout的块,调用其他chucks示例

头 头 导航 身体 页脚

然后在我的模板中执行类似// open layout tag [[$ layout]] [[$ layout]] //关闭布局标记的操作。然后在open close标签内附加我的[[* content]]。这将允许我一遍又一遍地重用我的布局模板,而不必在模板中复制它。第一个问题,是否可能,第二,实现这一目标需要什么样的语法?我对modx很新,并且知道它可以与其他框架一起使用,所以任何帮助都会受到赞赏。谢谢。

在Apache Tapestry框架中完成的示例概念,明显不同的语法,但应该让您大致了解我正在寻找的内容。

使用的组件/块。

布局 头 导航 页脚

布局内部

<html>
    <t:Header/>
    <t:Nav/>
    <t:Body/>
    <t:Footer/>
</html>

索引/模板内部

<t:Layout>
        template body content goes here ex. [[*content]]
</t:Layout>

希望这有助于澄清。

4 个答案:

答案 0 :(得分:2)

你的帖子不是很清楚,我认为你在寻找帮助之前没有花太多时间阅读how MODx works

除此之外,我认为你想要做的是创建不同的模板,结构或多或少是这样的:

[[$header]]
[[$nav]]

<div id="content">
    <h1>[[*pagetitle]]</h1>
    [[*content]]
</div>

[[$footer]]

这可能适用于您的主页,然后对于布局略有不同的内部页面,您可以为每个布局创建一个或多个新模板:

[[$header]]
[[$nav]]

<div id="content">
    <h1>[[*pagetitle]]</h1>
    [[*content]]
</div>

[[$sidebar-chunk]]

[[$footer]]

您甚至可以使用单个模板显示不同的布局:

[[$header]]
[[$nav]]

<div id="content">
    <h1>[[*pagetitle]]</h1>
    [[*content]]
</div>

[[*parent:is=`6`:then=`
    [[$recent-articles]]
`:else=`
    [[$sidebar-chunk]]
`]]

[[$footer]]

这应该让你开始,但你很快就会意识到有多种方法可以在MODx中完成所有工作。

答案 1 :(得分:2)

如果这就是你的意思,你可以把你的[[*内容]]放在任何你想要的地方,即使是在另一个块里面。

所以你的[[$ layout]]块可能就是这样:

[[$header]]
[[$menu]]
<div id="content">
  <h1>[[*pagetitle]]</h1>
  [[*content]]
</div>

如果你想在模板的基础上对一个块进行一些小的改动,你也可以在模板中做这样的事情:

[[$layout? &customContentBits=`
    <h1>[[*pagetitle]]</h1>
    [[*content]]
`]]

然后您的布局块可能是这样的:

[[$header]]
[[$menu]]
<div id="content">
  [[+customContentBits]]
</div>

这是一个占位符([[+ customContentBits]]),它是通过在块调用中添加&amp; customContentBits来设置的。

在前一段时间我的博客上解释说有一个不同的用例:http://www.markhamstra.com/modx-blog/2010/10/introducing-element-properties-and-output-modifier/

答案 2 :(得分:0)

你所要求的绝对可以做到。事实上,在我的网站上,我甚至通过将模板变量作为块修饰符传递,提供了相同的模板/块组合,提供了多种布局。但无论如何,让我们保持简单。

关于您的问题的快速说明。,ModX本身不使用开始标记和结束标记。最好不要那么想。相反,只需将东西放在您想放置的位置即可。资源变量可以包含在任何块中,因为每个资源都是唯一的。


创建你的Chunks:

首先,从简单的开始。创建页眉,页脚和导航。接下来,创建您的身体。在Body中,确保包含你的[[*content]](不...它不必进入模板。最后,使用以下代码创建你的Layout:

[[$header]]
[[$navigation]]
[[$body]]
[[$footer]]

创建模板:

您的模板现在可以像[[$ layout]]一样简单。你已经完成了。


注意

虽然您可以使用ModX执行此操作,但要了解ModX的强大之处在于您可以拥有多个模板和块,具体取决于您拥有的内容类型。对这样的一切进行单一化会真正消除了使用该平台的主要优势。

答案 3 :(得分:0)

Mark Hamstra或多或少地给了你答案,但只是为了澄清:Modx中的任何片段,块或输出都可以带参数。块和片段尤其可以轻松地使用这些参数。根据我的理解,您希望所有模板都调用[[$layout]]而不是其他任何模板。 布局块依次为

[[$header]]
[[$navigation]]
[[$body]]
[[$footer]]

在这个上你只需构建并添加你的参数,将它们从顶部嵌套,如

[[$layout? &useNavigation=`1`]]

(And continue passing the param in your layout chunk)

[[$header]]
[[+useNavigation:is=`1`:then=`[[$navigation]]`]]
[[$body]]
[[$footer]]

实现相同行为的另一种方法是使用单个模板,您已连接一系列模板变量来决定模板的外观。您可能有一个名为useNavigation复选框类型的模板变量。如果你通过资源编辑器检查它,它将直接传递给你的$ layout chunk,而不必在$ layout chunk调用中添加params。

[[$layout]]

(Just call layout normally and add the TV checks to the layout chunk directly. 
Note the difference between calling a TV and a placeholder, + vs *)

[[$header]]
[[*useNavigation:is=`1`:then=`[[$navigation]]`]]
[[$body]]
[[$footer]]