Modx создать макет с чанком и вызвать с шаблоном - PullRequest
1 голос
/ 02 марта 2012

Я использую Modx Revolution. Я хотел бы создать чанк с именем layout, который вызывает другие примеры чаков

Руководитель заголовок навигационный тело сноска

тогда в моем шаблоне сделайте что-то вроде // открыть тег макета [[$ layout]] [[$ layout]] // закрыть тег макета. затем внутри открытых тегов закрытия добавьте мой [[* content]]. это позволило бы мне снова и снова использовать мой шаблон макета без необходимости повторять его в шаблонах. Первый вопрос, возможно ли, второй, какой синтаксис необходим для достижения этой цели? Я довольно новичок в modx и знаю, что это возможно с другими фреймворками, поэтому любая помощь будет оценена. Благодарю.

Пример концепции, выполненной в платформе Apache Tapestry, очевидно, с другим синтаксисом, но должен дать вам общее представление о том, что я ищу.

компоненты / Куски использованы.

Layout заголовок навигационный Footer

Внутри макета

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

Внутри указателя / шаблона

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

Надеюсь, это поможет уточнить.

Ответы [ 4 ]

2 голосов
/ 19 марта 2012

Вы можете поместить свой [[* 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/

2 голосов
/ 02 марта 2012

Ваш пост не очень понятен, и я думаю, что вы действительно не потратили много времени, чтобы прочитать , как работает 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 есть несколько способов сделать все.

0 голосов
/ 30 августа 2013

Марк Хамстра более или менее дал вам ответ, но просто для пояснения: любой фрагмент, фрагмент или какой-либо вывод в 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]]
0 голосов
/ 15 июня 2012

То, что вы просите, может быть абсолютно сделано. Фактически, на моем веб-сайте у меня даже есть одна и та же комбинация шаблонов / чанков, предоставляющая несколько макетов путем передачи переменной шаблона в качестве модификатора чанка. Но в любом случае, давайте будем проще.

Краткое примечание по вашему вопросу. ModX изначально не использует начальные и конечные теги. Лучше перестать так думать. Вместо этого просто размещайте вещи там, где вы хотите их разместить. Переменные ресурса могут входить в любой блок, так как каждый ресурс уникален.


Создайте свои чанки:

Сначала начнем с простых. Создайте свой верхний и нижний колонтитулы и навигацию. Затем создайте свое тело. Внутри тела, обязательно включите ваш [[*content]] (нет ... он не должен идти в шаблон. Наконец, создайте свой макет со следующим кодом:

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

Создайте свой шаблон:

Ваш шаблон теперь может быть таким же простым, как [[$ layout]]. Вы сделали.


Примечание

Хотя вы можете делать это с ModX, понимайте, что мощь ModX заключается в том, что вы можете иметь несколько шаблонов и блоков в зависимости от типа вашего контента. Использование такого единственного выражения действительно лишает вас основного преимущества при использовании платформы.

...