Задача

Мы хотим использовать на нашем сайте jQuery табы для загрузки наших Ресурсов через AJAX. Как это сделать в MODx? Этот урок покажет как легко этого достичь в MODx Revolution.

Создание Ресурсов****

Создайте Ресурсы, которые вы хотите загружать через табы, с пустым Шаблоном blank (или просто минимальным шаблоном с некоторыми элементами, которые вы хотите иметь всередине табов). Это даст нам уверенность в том, что мы не загружаем целую страницу с шапкой и подвалом в наш таб.

Фронт-энд загрузка****

Используем jQuery комманду tabs() для создания системы загрузки на фронт-энде. Код будет выглядеть приблизительно вот так (взято из jquery UI доков):

&ltscript type=“text/javascript”&gt $(function() { $("#tabs").tabs(); }); &lt/script&gt

&ltdiv id=“tabs”&gt &ltul&gt &ltli&gt&lta href="[[~92]]"&gtResource with ID 92&lt/a&gt&lt/li&gt &ltli&gt&lta href="[[~546]]"&gtResource with ID 546&lt/a&gt&lt/li&gt &ltli&gt&lta href="[[~123]]"&gtResource with ID 123&lt/a&gt&lt/li&gt &lt/ul&gt &lt/div&gt

Отлично! Страницы загружаются с помощью Ajax.

Вставляем Названия страниц в заголовки табов!

Есть несколько способов сделать это; во-первых, вы можете использовать getResourcesWayfinder, или сниппет getField.

Использование getResources

Для getResources создайте чанк ‘myRowTpl’(или любое другое название) и укажите его название в параметре ’tpl’, например такой:

&ltli id="[[+id]]"&gt&lta href="[[~[[+id]]]]" title="[[+longtitle]]"&gt[[+pagetitle]]&lt/a&gt&lt/li&gt и на вашей странице с табами:

&ltscript type=“text/javascript”&gt $(function() { $("#tabs").tabs(); }); &lt/script&gt

&ltdiv id=“tabs”&gt &ltul&gt [[getResources? &parents=123 &depth=1 &tpl=myRowTpl &includeContent=1 &includeTVs=1]] &lt/ul&gt &lt/div&gt

Использование Wayfinder

Для Wayfinder создайте шаблон-чанк rowTpl, который вы можете назвать ‘myRowTpl’ (или пo-другому), например такой:

&ltli[[+wf.id]][[+wf.classes]]&gt&lta href="[[+wf.link]]" title="[[+wf.title]]"&gt[[+wf.linktext]]&lt/a&gt&lt/li&gt код на странице табов будет иметь следующий вид:

&ltscript type=“text/javascript”&gt $(function() { $("#tabs").tabs(); }); &lt/script&gt

&ltdiv id=“tabs”&gt

[[Wayfinder? &startId=123 &level=1 &rowTpl=myRowTpl]]

&lt/div&gt

Использование сниппета getField

Вы можете также использовать Сниппет, например такой:

&lt?php /**

  • Берёт поле из указанного Ресурса / / Установка некоторых свойств по-умолчанию */ $id = $modx-&gtgetOption(‘id’,$scriptProperties,false); $field = $modx-&gtgetOption(‘field’,$scriptProperties,‘pagetitle’);

if ($id) { /* берёт объект ресурс / $resource = $modx-&gtgetObject(‘modResource’,$id); if ($resource == null) return ‘’; } else { / Если id не определён использует текущий doc */ $resource =& $modx-&gtresource; }

/* Возврат значения поля */ return $resource-&gtget($field); ?&gt

Вызовите сниппет getField следующим образом на странице с табами:

&ltscript type=“text/javascript”&gt $(function() { $("#tabs").tabs(); }); &lt/script&gt

&ltdiv id=“tabs”&gt &ltul&gt &ltli&gt&lta href="[[~92]]"&gt[[getField? &id=92 &field=pagetitle]]&lt/a&gt&lt/li&gt &ltli&gt&lta href="[[~546]]"&gt[[getField? &id=546 &field=pagetitle]]&lt/a&gt&lt/li&gt &ltli&gt&lta href="[[~123]]"&gt[[getField? &id=123 &field=pagetitle]]&lt/a&gt&lt/li&gt &lt/ul&gt &lt/div&gt

Однако решение со сниппетом getField не настолько быстрое и элегантное как решение с Wayfinder, так как оно должно делать запрос к каждому табу.

Выводы

Обратите внимание, что всё, что вы реально делаете – это привязка тегов href к реальным ID документов, также как и обычная вставка ссылок. Особенность состоит в том, что вы делаете ваш шаблон для Документов пустым (либо с минимальными элементами) поэтому он загружает лишь пропарсенный контент.