Modx создать макет с чанком и вызвать с шаблоном
Я использую Modx Revolution. Я хотел бы создать чанк с именем layout, который вызывает пример других чаков
Верхний колонтитул
затем в моем шаблоне сделайте что-то вроде // открытого тега макета [[$layout]] [[$layout]]// закрыть тег макета. затем внутри открытых тегов закрытия добавьте мой [[*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 ответа
Ваш пост не очень ясен, и я думаю, что вы действительно не потратили много времени, чтобы прочитать о том, как работает 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.
Вы можете поместить свой [[*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/
Марк Хамстра более или менее дал вам ответ, но просто для пояснения: любой фрагмент, фрагмент или какой-либо вывод в 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]]
То, что вы спрашиваете, может быть абсолютно сделано. Фактически, на моем веб-сайте у меня даже есть одна и та же комбинация шаблонов / чанков, предоставляющая несколько макетов путем передачи переменной шаблона в качестве модификатора чанка. Но в любом случае, давайте будем проще.
Небольшая заметка по вашему вопросу. ModX изначально не использует начальные и конечные теги. Лучше перестать так думать. Вместо этого просто размещайте вещи там, где вы хотите их разместить. Переменные ресурса могут входить в любой блок, так как каждый ресурс уникален.
Создайте свои чанки:
Сначала начнем с простых. Создайте свой верхний и нижний колонтитулы и навигацию. Затем создайте свое тело. Внутри тела, обязательно включите ваш [[*content]]
(нет... это не обязательно входит в шаблон. Наконец, создайте свой макет с помощью следующего кода:
[[$header]]
[[$navigation]]
[[$body]]
[[$footer]]
Создайте свой шаблон:
Теперь ваш шаблон может быть таким же простым, как [[$layout]]. Вы сделали
Заметка
Хотя вы можете делать это с ModX, понимайте, что мощь ModX заключается в том, что вы можете иметь несколько шаблонов и блоков в зависимости от типа вашего контента. Принятие такого единственного выражения на самом деле лишает вас основного преимущества использования платформы.