我正在使用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>
希望这有助于澄清。
答案 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]]