1

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

头部标题导航正文页脚

然后在我的模板中执行类似 //open layout tag[[$layout]] [[$layout]]//close layout tag 的操作。然后在打开的关闭标签内附加我的 [[*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

4 回答 4

2

您的帖子不是很清楚,我认为您在寻求帮助之前并没有花太多时间阅读MODx 的工作原理。

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

[[$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 中有多种方法可以做所有事情。

于 2012-03-02T09:37:18.337 回答
2

你可以把你的 [[*content]] 放在你想要的任何地方,甚至在另一个块中,如果你是这个意思的话。

所以你的 [[$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]]),通过在块调用中添加 &customContentBits 来设置。

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

于 2012-03-18T20:00:41.413 回答
0

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

关于您的问题的快速说明。ModX 本身不使用开始标签和结束标签。最好不要这样想。取而代之的是把东西放在你想放的地方。资源变量可以放在任何块中,因为每个资源都是唯一的。


创建你的块:

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

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

创建您的模板:

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


笔记

虽然您可以使用 ModX 执行此操作,但请了解 ModX 的强大之处在于您可以拥有多个模板和块,具体取决于您拥有的内容类型。像这样将所有东西单一化确实会带走使用该平台的主要优势。

于 2012-06-15T12:03:53.550 回答
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 块,而无需将参数添加到 $layout 块调用中。

[[$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]]
于 2013-08-30T06:49:44.403 回答