Pdoresources where template: Как исключить шаблон в отображении ресурсов?

Содержание

Вывод списка ресурсов на сайте с использованием pdoResources

Общие параметры для сниппетов, основанных на pdoTools/pdoFetch.

Параметры выборки ресурсов

Эти параметры определяют, какие объекты будут получены.

НазваниеПо умолчаниюОписание
&classmodResourceКласс получаемого объекта
&parentsТекущий ресурсСписок родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&depth10Глубина поиска дочерних ресурсов от родителя.
&resourcesСписок ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов, через запятую, для фильтрации результатов. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&contextОграничение выборки по контексту ресурсов.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&showHidden0Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&showDeleted0Показывать удалённые ресурсы.
&hideContainers0Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&hideUnsearchableОтключает вывод спрятанных от поиска ресурсов.
&selectСписок полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}.
&leftJoinАналог SQL оператора left join
&rightJoinАналог SQL оператора right join
&innerJoinАналог SQL оператора inner join
&joinSequenceinnerJoin,leftJoin,rightJoinПорядок подключения таблиц, через зяпятую.
&sortbypagetitleЛюбое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите «RAND()»
&sortdir
ASC
Направление сортировки: по убыванию или возрастанию.
&groupbyУказывает поле, по которому группируются результаты
&havingИспользуется, чтобы ограничить выборку сгруппированных строк с помощью условия, относящегося ко всей группе, заданной в &groupby
&limit0Ограничение количества результатов выборки. Можно использовать «0».
&offset0Пропуск результатов от начала.
&first1Номер первой итерации вывода результатов.
&lastАвтоматически, по формуле (total + first — 1)Номер последней итерации вывода результатов.
&loadModelsСписок компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например:
&loadModels=`ms2gallery,msearch3`
.
&tvFiltersСписок фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан «myTV==value», или в любом «value». Пример вызова: &tvFilters=`filter2==one,filter1==bar%||filter1==foo`. Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ.
&tvFiltersAndDelimiter«,»
Разделитель для условий AND в параметре &tvFilters.
&tvFiltersOrDelimiter«||»Разделитель для условий OR в параметре &tvFilters.
&sortbyTVДополнительное поле, по которому нужно сортировать результаты. Может быть указано напрямую в параметре &sortby
&sortdirTVНаправление сортировки по дополнительному полю, указанному в &sortbyTV. Может быть указано напрямую в параметре &sortby
&sortbyTVTypeТип сортировки по ТВ параметру. Возможные варианты: string, integer, decimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата.
&checkPermissions
Укажите, какие разрешения нужно проверять у пользователя при выводе объектов.
&disableConditionsОтключает специфичные для класса modResource параметры выборки.
&fenomModifiersсписок сниппетов-модификаторов через запятую, для подключения в Fenom. Подробности в соответствующем разделе.

Параметры шаблонов

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.

НазваниеОписание
&tplИмя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplFirstИмя чанка для первого ресурса в результатах.
&tplLastИмя чанка для последнего ресурса в результатах.
&tplOddИмя чанка для каждого чётного ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов).
&tpl_NИмя чанка для N-го ресурса, например, &tpl_4=`tpl4th` установит шаблон для 4-го ресурса.
&tpl_nNИмя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу.
&tplConditionПоле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperatorНеобязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTpls
JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparatorНеобязательная строка для разделения результатов работы.

Параметры результатов

Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.

НазваниеПо умолчаниюОписание
&returnchunksОпределяет способ вывода результатов. См. ниже.
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&nestedChunkPrefixpdotools_Префикс для «быстрых плейсхолдеров», включаемых параметром &fastMode
&idxВы можете указать стартовый номер итерации вывода результатов.
&totalVartotalИмя плейсхолдера для сохранения общего количества результатов.
&includeContent0Включаем поле «content» в выборку.
&includeTVsСписок ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры [[+action]] и [[+time]].
&includeTVListПсевдоним &includeTVs
&prepareTVs1Список ТВ параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить в «1», будут подготовлены все ТВ, указанные в
&includeTVs
.
&processTVsСписок ТВ параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу.
&tvPrefixtv. у pdoResources и пусто у других сниппетовПрефикс для ТВ параметров.
&prepareSnippet1Указывает сниппет, который принимает данные перед выводом в чанк и может их менять или добавлять
&decodeJSONРазбирает поля типа JSON вместо вывода в виде строки
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип
uri
подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrlГенерировать ссылку с учетом класса ресурса.
&toSeparatePlaceholdersЕсли вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]], [[+myPl1]] и т.д.
&additionalPlaceholdersУстанавливает дополнительные плейсхолдеры
&cache_keyЗначение системной настройки cache_resource_key для ресурсов (по умолчанию resource) или defaultКлюч кеширования
&cache_handlerЗначение системной настройки cache_resource_handler или xPDOFileCacheОбработчик кеша
&cacheTimeЗначение системной настройки cache_resource_expires или 0 (вечный)Время жизни кеша

Способы вызова чанков

Все чанки могут иметь один из следующих префиксов:

@INLINE или @CODE. В качестве шаблона будет использован код после этого префикса.

[[!pdoResources?
    &parents=`0`
    &tpl=`@INLINE <li>{{+pagetitle}}</li>`
]]

В INLINE чанках нельзя указывать сниппеты, другие чанки или фильтры вывода через обычные теги, потому что так парсер MODX обработает их в первую очередь, и сниппет получит совсем не то, что вы хотели.

Поэтому для INLINE чанков предусмотрена замена [[+]] на {{+}} — такие теги MODX пропускает, а pdoTools при работае конвертирует их как нужно. Конечно, вы всё равно можете использовать теги MODX, если вам нужно, чтобы в чанк попала уже обработанная информация, например:

[[!pdoResources?
    &parents=`0`
    &tplFirst=`@INLINE Текущая страница: [[*pagetitle]]`
    &tpl=`@INLINE <p>{{+id}} - {{+pagetitle}}<p>`
]]

@FILE. Вместо чанка из базы данных используется содержимое файла. Путь до файла указывается в систеной настройке pdotools_elements_path. Имя файла должно быть с расширением .tpl или .html.

[[!pdoResources?
    &tpl=`@FILE fileBasedRow.tpl`
]]

@TEMPLATE. Указывается идентификатор или имя шаблона. Если пусто — для каждого ресурса будет использован его собственный шаблон.

[[!pdoResources?
    &tpl=`@TEMPLATE 10`
]]

@CHUNK. Аналогично простому указанию имени чанка, оставлено для совместимости со сторонними сниппетами.

[[!pdoResources?
    &tpl=`@CHUNK tpl.Resource.row`
]]
[[!pdoResources?
    &tpl=`tpl.Resource.row`
]]

Подробнее про возможности pdoParser можно прочитать в соответствующем разделе.

Возвращаемые значения

pdoTools умеет возвращать данные в разном виде, в зависимости от параметр &return. В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать &return в pdoResources:

[[!pdoResources?
    &parents=`0`
    &return=`json`
]]
  • chunks — оформленные чанки, по умолчанию.
  • sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
  • data — готовый массив данных. Из-за особенностей работы сниппетов MODX этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
  • ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр &returnIds использует именно этот тип.
  • json — возврат массива данных JSON строкой.
  • serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать json.

Шпаргалка по Fenom | BUSTEP.RU

Описание по подключению плейсхолдеров на страницу

информация с официальной документации pdotools

MODXFenomОписание
[[+pagetitle]]{$pagetitle}Заголовок
[[*pagetitle]]{$modx->resource->pagetitle}Заголовок
[[%lexicon]]{$modx->lexicon(‘lexicon’)}вывод словарей
[[~[[+id]]]]{$modx->makeUrl($id)}укл на страницу
[[++site_url]]{$modx->config.site_url}настройки modx
[[$chunkName]]{$pdoTools->getChunk(‘chunkName’)} или {include ‘chunkName’}чанк
[[!snippetName]]{$modx->runSnippet(«pdoResources», [‘parents’ => 0])}сниппет
[[*id:is=`1`:then=``:else=``]]{if $id = 1}{else}{/if}if else
[[+pagetitle:modificator]]{$pagetitle | modificator}модификатор
[[+pagetitle:modificator]]{$_modx->placeholders}массив с системными плейсхолдерами

Другие параметры

FenomОписание
{$_modx->placeholders}массив с системными плейсхолдерами
{$_modx->config}массив с системными настройками
{$_modx->context}массив (не объект!) с текущим контекстом
{$_modx->user}массив (не объект!) с текущим пользователем
{$_modx->resource}массив (не объект!) с текущим ресурсом
{$_modx->lexicon}служба загрузки лексиконов
{$_modx->lexicon()}функция для вывода строки из лексикона
{$_modx->runSnippet()}запуск сниппета
{$_modx->runProcessor()}запуск процессора
{$_modx->getChunk()}вывод чанка
{$_modx->runSnippet(‘!pdoResources’)}не кэшируемый
{$.get.test}GET
{$.post.test}POST
{$date|date:»Y»}текущий год
{55|url}Ссылка на документ

Модификаторы MODX FENOM

FenomОписание
{$date| date: «Y»}текущий год
{55| url}Ссылка на ресурс

Подключение наборов параметров

FenomОписание
{$_modx->getChunk(‘Name@PropertySet’)}для чанка
{include ‘Name@PropertySet’}
{$_modx->runSnippet(‘NameName@PropertySet’)}для сниппетов
{include ‘template:TemplateName@PropertySet’}

Подключение шаблона

FenomОписание
{include ‘template:имя шаблона’}подключение шаблока
{include ‘имя чанка’}подключение чанка
{include ‘имя чанка’}подключение чанка
{block ‘content’}контект{/block}расcтановка блоков
{extends ‘file:templates/base.tpl’}наследование шаблона

Примеры работы

    // загрукзка ресурсов
    {$_modx->runSnippet('pdoResources', [
        'parents' => 19,
        'depth' => 0,
        'where' => ['isfolder' => 0],
        'showLog' => 1,
    ])}

    // загрукзка меню
    {$_modx->runSnippet('pdoMenu', [
        'parents' => 0,
        'level' => 2
    ])}

    <p>
    {$_modx->lexicon->load('ms2gallery:default')}
        Проверка словарей ms2Gallery: {$_modx->lexicon('ms2gallery_err_gallery_exists')}
    </p>

    <p>
    {if $_modx->isAuthenticated('web')}
        Привет, {$_modx->user.fullname}!
    {else}
        Вам нужно авторизоваться =(
    {/if}
    </p>
    <p>Текущий контекст: {$_modx->context.key}</p>

Создание значения из переменной с добавление префикса

{set $lexicon = "ms2_product_{$field}"}
{('ms2_product_' ~ $name) | lexicon}

Тег foreach предоставляет простой способ перебора массивов. Foreach работает только с массивами, объектами и интервалами.

{foreach $list [as [$key =>] $value] [index=$index] [first=$first] [last=$last]}
   {* ...code... *}
   {break}
   {* ...code... *}
   {continue}
   {* ...code... *}
{foreachelse}
   {* ...code... *}
{/foreach}

{foreach}

Перебор значений массива $list:

{foreach $list as $value}
 <div>{$value}</div>
{/foreach}

{foreach 1..7 as $value} {* так же хорошо работает и с интервалами *}
 <div>№{$value}</div>
{/foreach}

Перебор ключей и значений массива $list:

{foreach $list as $key => $value}
 <div>{$key}: {$value}</div>
{/foreach}

Получение номера (индекса) итерации, начиная с 0

{foreach $list as $value}
 <div>№{$value@index}: {$value}</div>
{/foreach}

или

{foreach $list as $value index=$index}
 <div>№{$index}: {$value}</div>
{/foreach}

Определение первой итерации:

{foreach $list as $value}
 <div>{if $value@first} first item {/if} {$value}</div>
{/foreach}

или

{foreach $list as $value first=$first}
 <div>{if $first} first item {/if} {$value}</div>
{/foreach}

Переменная $value@first будет иметь значение TRUE, если текущая итерация является первой. Определение последней интерации:

{foreach $list as $value}
 <div>{if $value@last} last item {/if} {$value}</div>
{/foreach}

или

{foreach $list as $value last=$last}
 <div>{if $last} last item {/if} {$value}</div>
{/foreach}

Переменная $value:last будет иметь значение TRUE, если текущая итерация является последней.

Замечание: Использование last требует от $list быть countable.

{break}

Тег {break} используется для выхода из цикла до достижения последней итерации. Если в цикле встречается тег {break}, цикл завершает свою работу, и далее, выполняется код, следующий сразу за блоком цикла

{continue}

Тег {continue} используется для прерывания текущей итерации. Если в цикле встречается тег {continue}, часть цикла, следующая после тега, не выполняется, и начинается следующая итерация. Если текущая итерация была последней, цикл завершается.

{foreachelse}

Тег {foreachelse} ограничивает код, который должен быть выполнен, если итерируемый объект пуст.

{var $list = []}
{foreach $list as $value}
 <div>{if $last} last item {/if} {$value}</div>
{foreachelse}
 <div>empty</div>
{/foreach}

В блоке {foreachelse}...{/foreach} использование {break}, {continue} выбросит исключение Fenom\CompileException при компиляции

08 февраля 2019, 09:10    21260

Материалы для наращивания и дизайна ногтей

Быстрый поиск продукции


Я ищу: [[!pdoResources? &tpl=`@INLINE [[+pagetitle]]` &limit=`0` &parents=`2` &depth=`0` ]]

Категория: КусачкиИнструментыИнструментыИнструментыИнструменты

Назначение: Для педикюраИнструментыИнструментыИнструментыИнструменты

Тип соединения: МуфтовоеИнструментыИнструментыИнструментыИнструменты

Тип пружины: Не выбранИнструментыИнструментыИнструментыИнструменты

Найти товары

[[$indexBanner]]

[[$infoBlock]]

[[$indexBanner]]

[[$infoBlock]]

Разделы каталога

[[pdoResources? &tpl=`categoryItem` &sortby=`menuindex` &limit=`0` &depth=`0` &parents=`2` &includeTVs=`categoryImg` &sortdir=`ASC` ]]

[[!msProducts? &tpl=`tpl.msProducts.row.custom` &limit=`4` &sortby=`rand()` &parents=`0` &includeThumbs=`260×244` &where=`{«Data.popular»:1, «Data.image:!=»:»»}` &showLog=`1` ]]

[[!msProducts? &tpl=`tpl.msProducts.row.custom` &limit=`4` &sortby=`rand()` &parents=`0` &where=`{«Data.old_price:!=»:0, «Data.image:!=»:»»}` &includeThumbs=`260×244` ]]

[pdoTools] pdoResources 1.4.1 / Расширения MODX / Блоги / bezumkin.ru

Продолжаю догонять и перегонять getResources. Со скоростью, понятно, вопросов нет, а вот функционал реализован еще не весь.

Сегодняшнее обновление привносит следующие параметры:

  • conditionalTpls — то есть, выбор чанков в зависимости от определённых условий.
  • toSeparatePlaceholders — выставление всех результатов в разные плейсхолдеры.
  • select — этого в аналогах нет, возможность указать список полей для выборки.
Далее подробности, по порядку.

conditionalTpls

Не все знают, что в getResources есть возможность использовать разные чанки, в зависимости от значения в каком-то одном поле ресурса.

Например, если не заполнен introtext, можно указать чанк без его использования. Проверять можно не только на пустоту, но на равенство, больше, меньше и null.

Для этого используются 3 параметра:
&tplCondition — Поле ресурса, из которого будет получено значение для выбора чанка по условию в «conditionalTpls». Например: introtext или published.
&tplOperator — Оператор сравнения, возможный список:

==, !=, < , > , <=, >=, empty, !empty, isnull
&conditionalTpls — JSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться «tplCondition», а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно.

Как это работает? Рассмотрим на примере:

[[!pdoResources?
	&parents=`2`
	&tpl=`chunk1`
	&tplCondition=`template`
	&tplOperator=`==`
	&conditionalTpls=`{"2":"chunk2", "5":"chunk5"}`
]]

В результате работы, все ресурсы с шаблонами 3 и 5 будут вывеедены в собственных чанках, а все остальные — в chunk1.

Для проверки на пустоту можно указывать массивы без ключей:

[[!pdoResources?
	&parents=`2`
	&tpl=`chunk1`
	&tplCondition=`introtext`
	&tplOperator=`empty`
	&conditionalTpls=`["no_intro"]`
]]

Для ресурсов с пустым introtext будет задействован чанк no_intro.

toSeparatePlaceholders

Этот параметр указывает, что результаты нужно выставить в несколько плейсхолдеров. Плейсхолдеры именуются из значения этого поля и индекса строки, начиная с нуля.

Пример:

[[!pdoResources?
	&parents=`2`
	&toSeparatePlaceholders=`row`
]]
В результате мы получим на странице возможные плейсхолдеры [[+row0]], [[+row1]] и т.д.

Не знаю, кому это понадобится, но для совместимости с getResources — сделал.

select

Этого функционала в getResources нет, но я решил добавить, для удобства.

Теперь можно указывать, какие именно поля участвуют в выборке. Простой пример:

[[!pdoResources?
	&select=`id,pagetitle,content`
]]

Учитывая, что мы работаем с pdoTools, можно указывать и посложнее:
[[!pdoResources?
	&leftJoin=`{
		"120x90": {
			"class":"msResourceFile"
			,"alias":"120x90"
			, "on": "120x90.resource_id = modResource.id AND 120x90.path LIKE '%/120x90/' AND 120x90.rank=0"
		}
	}`
	&select=`{
		"modResource":"id,pagetitle,content"
		,"120x90":"120x90.url as 120x90"
	}`
]]

То есть, вы можете присоединять к ресурсам любые таблицы, и указывать, что именно из них выбирать. Такого вообще нигде нет, только в pdoTools.

Заключение

По сравнению с getResources теперь нет следующих параметров:

Возможно (возможно) сделаю позже параметры &tvFilters, &sortbyTV, &sortdirTV и &sortbyTVType, для еще более плавной замены getResources на pdoResources.

Добавление новых комментариев отключено.

Общие параметры

Оглавление

Общие параметры для сниппетов, основанных на pdoTools/pdoFetch.

#

Параметры выборки ресурсов

Эти параметры определяют, какие объекты будут получены.

НазваниеПо умолчаниюОписание
&classmodResourceКласс получаемого объекта.
&parentsТекущий ресурсСписок родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&resourcesСписок ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&templatesСписок шаблонов, через запятую, для фильтрации результатов. Если id шаблона начинается с дефиса, ресурсы с ним исключается из выборки.
&depth10Глубина поиска дочерних ресурсов от родителя.
&contextОграничение выборки по контексту ресурсов.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&showHidden0Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&showDeleted0Показывать удалённые ресурсы.
&hideContainers0Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&hideUnsearchableОтключает вывод спрятанных от поиска ресурсов.
&selectСписок полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {"modResource":"id,pagetitle,content"}.
&leftJoinАналог SQL оператора left join.
&rightJoinАналог SQL оператора right join.
&innerJoinАналог SQL оператора inner join.
&joinSequenceinnerJoin, leftJoin, rightJoinПорядок подключения таблиц, через запятую.
&sortbypagetitleЛюбое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей. Для случайно сортировки укажите 'RAND()'.
&sortdirASCНаправление сортировки: по убыванию или возрастанию.
&groupbyУказывает поле, по которому группируются результаты
&limit0Ограничение количества результатов выборки. Можно использовать «0».
&offset0Пропуск результатов от начала.
&first1Номер первой итерации вывода результатов.
&lastАвтоматически, по формуле (total + first — 1)Номер последней итерации вывода результатов.
&loadModelsСписок компонентов, через запятую, чьи модели нужно загрузить для построения запроса. Например: &loadModels=`ms2gallery, msearch3`.
&tvFilters

Список фильтров по ТВ, с разделителями AND и OR. Разделитель, указанный в параметре &tvFiltersOrDelimiter представляет логическое условие OR и по нему условия группируются в первую очередь. Внутри каждой группы вы можете задать список значений, разделив их &tvFiltersAndDelimiter. Поиск значений может проводиться в каком-то конкретном ТВ, если он указан 'myTV==value', или в любом «value». Пример вызова: &tvFilters=`filter2==one, filter1==bar%||filter1==foo`.

Обратите внимание: фильтрация использует оператор LIKE и знак «%» является метасимволом. И еще: Поиск идёт по значениям, которые физически находятся в БД, то есть, сюда не подставляются значения по умолчанию из настроек ТВ.

&tvFiltersAndDelimiter,Разделитель для условий AND в параметре &tvFilters.
&tvFiltersOrDelimiter||Разделитель для условий OR в параметре &tvFilters.
&sortbyTVДополнительное поле, по которому нужно сортировать результаты. Может быть указано напрямую в параметре &sortby.
&sortdirTVНаправление сортировки по дополнительному полю, указанному в &sortbyTV. Может быть указано напрямую в параметре &sortby.
&sortbyTVTypeТип сортировки по ТВ параметру. Возможные варианты: stringintegerdecimal и datetime. Если пусто, то ТВ будет отсортирован в зависимости от его типа: как текст, число или дата.
&checkPermissionsУкажите, какие разрешения нужно проверять у пользователя при выводе объектов.
&disableConditionsОтключает специфичные для класса modResource параметры выборки.
&fenomModifiersСписок сниппетов-модификаторов через запятую, для подключения в Fenom. Про модификаторы читайте тут.
#

Параметры шаблонов

Эти параметры устанавливают чанки, которые содержат шаблоны для генерации вывода, то есть отвечают за внешний вид.

НазваниеОписание
&tplИмя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplFirstИмя чанка для первого ресурса в результатах.
&tplLastИмя чанка для последнего ресурса в результатах.
&tplOddИмя чанка для каждого чётного ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов).
&tpl_NИмя чанка для N-го ресурса, например, &tpl_4=`tpl4th` установит шаблон для 4-го ресурса.
&tpl_nNИмя чанка для каждого N-го ресурса, например, &tpl_n4=`tplEvery4th` будет применено к каждому 4-му ресурсу.
&tplConditionПоле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperatorНеобязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTplsJSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparatorНеобязательная строка для разделения результатов работы.
#

Параметры результатов

Эти параметры дополнительно определяют, какие данные и каким способом будут выводиться.

НазваниеПо умолчаниюОписание
&returnchunksОпределяет способ вывода результатов. См. ниже.
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т. п.) будут вырезаны.
&nestedChunkPrefixpdotools_Префикс для «быстрых плейсхолдеров», включаемых параметром &fastMode.
&idxВы можете указать стартовый номер итерации вывода результатов.
&totalVartotalИмя плейсхолдера для сохранения общего количества результатов.
&includeContent0Включаем поле «content» в выборку.
&includeTVsСписок TV параметров для выборки, через запятую. Например: «action, time» дадут плейсхолдеры [[+action]] и [[+time]].
&includeTVListПсевдоним &includeTVs.
&prepareTVs1Список TV параметров, с файлами из источников медиа, для которых нужно сгенерировать полные пути. Если установить в «1», будут подготовлены все TV, указанные в &includeTVs.
&processTVsСписок ТВ параметров, которые нужно обработать и вывести согласно их настроек в менеджере системы. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs. Замедляет работу.
&tvPrefix

tv. — у pdoResources.

У других сниппетов пусто.

Префикс для ТВ параметров.
&prepareSnippet1Указывает сниппет, который принимает данные перед выводом в чанк и может их менять или добавлять.
&decodeJSONРазбирает поля типа JSON вместо вывода в виде строки.
&scheme-1Схема формирования url, передаётся в modX::makeUrl(), поэтому возможные варианты нужно смотреть здесь. Особый тип uri подставляет значение uri ресурса, без запуска функции.
&useWeblinkUrlГенерировать ссылку с учетом класса ресурса.
&toSeparatePlaceholdersЕсли вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]][[+myPl1]] и т. д.
&additionalPlaceholdersУстанавливает дополнительные плейсхолдеры.
&cache_keyЗначение системной настройки cache_resource_key для ресурсов (по умолчанию resource) или default.Ключ кэширования.
&cache_handlerЗначение системной настройки cache_resource_handler или xPDOFileCache.Обработчик кеша.
&cacheTimeЗначение системной настройки cache_resource_expires или 0 (вечный).Время жизни кеша.
#

Способы вызова чанков

Все чанки могут иметь один из следующих префиксов:

@INLINE или @CODE. В качестве шаблона будет использован код после этого префикса.

/* modParser */
[[!pdoResources?
    &parents=`0`
    &tpl=`@INLINE <li>{{+pagetitle}}</li>`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'parents' => 0,
'tpl' => '@INLINE <li>{{+pagetitle}}</li>'
])}

В INLINE чанках нельзя указывать сниппеты, другие чанки или фильтры вывода через обычные теги, потому что так парсер MODx обработает их в первую очередь, и сниппет получит совсем не то, что вы хотели.

Поэтому для INLINE чанков предусмотрена замена [[+]] на {{+}} — такие теги MODx пропускает, а pdoTools при работе конвертирует их как нужно. Конечно, вы всё равно можете использовать теги MODx, если вам нужно, чтобы в чанк попала уже обработанная информация, например:

/* modParser */
[[!pdoResources?
    &parents=`0`
    &tplFirst=`@INLINE Текущая страница: [[*pagetitle]]`
    &tpl=`@INLINE <p>{{+id}} - {{+pagetitle}}<p>`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'parents' => 0,
'tplFirst' => '@INLINE Текущая страница: [[*pagetitle]]'
'tpl' => '@INLINE <p>{{+id}} - {{+pagetitle}}<p>'
])}
#
@FILE

Вместо чанка из базы данных используется содержимое файла. Путь до файла указывается в системной настройке pdotools_elements_path. Имя файла должно быть с расширением .tpl или .html.

/* modParser */
[[!pdoResources?
    &tpl=`@FILE fileBasedRow.tpl`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'tpl' => '@FILE fileBasedRow.tpl'
])}
#
@TEMPLATE

Указывается идентификатор или имя шаблона. Если пусто — для каждого ресурса будет использован его собственный шаблон.

/* modParser */
[[!pdoResources?
    &tpl=`@TEMPLATE 10`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'tpl' => '@TEMPLATE 10'
])}
#
@CHUNK

Аналогично простому указанию имени чанка, оставлено для совместимости со сторонними сниппетами.

/* modParser */
[[!pdoResources?
    &tpl=`@CHUNK tpl.Resource.row`
]]

[[!pdoResources?
    &tpl=`tpl.Resource.row`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'tpl' => '@CHUNK tpl.Resource.row'
])}

{$_modx->runSnippet('!pdoResources', [
'tpl' => 'tpl.Resource.row'
])}
#

Возвращаемые значения

pdoTools умеет возвращать данные в разном виде, в зависимости от параметр &return. В основном это используют сами сниппеты для внутренних нужд, но вы можете указывать &return в pdoResources:

/* modParser */
[[!pdoResources?
    &parents=`0`
    &return=`json`
]]

/* pdoParser */
{$_modx->runSnippet('!pdoResources', [
'parents' => 0,
'return' => 'json'
])}
  • chunks — оформленные чанки, по умолчанию.
  • sql — подготовленный сырой SQL, полезно для отладки. Сам запрос не выполняется, только выводится на экран.
  • data — готовый массив данных. Из-за особенностей работы сниппетов MODx этот вариант имеет смысл использовать только при вызове pdoFetch::run() напрямую из своего сниппета, в противном случае вы получите только строку «Array».
  • ids — возвращает только идентификаторы документов, через запятую. Удобно для подстановки в качестве параметра другим сниппетам. Параметр &returnIds использует именно этот тип.
  • json — возврат массива данных JSON строкой.
  • serialize — возврат массива данных сериализованной строкой. Иногда, по непонятным причинам, может вызвать нехватку памяти. Лучше использовать json.

Время работы: 0,1630 s
Время запросов: 0,1630 s
Количество запросов: 24
Источник: cache

pdoTools / Утилиты / Дополнения MODX / modstore.pro

Внимание, этот компонент требует версию PHP 5.6 или выше! Если ваш сайт использует PHP ниже требуемого, установка этого дополнения может его сломать.

Внимание, этот компонент требует версию MODX не ниже 2.3 !

pdoTools — это набор удобных сниппетов для повседневной работы + небольшая библиотека, которая делает их очень быстрыми.

Благодаря использованию общей библиотеки, все сниппеты pdoTools обладают единым минимальным функционалом:

  • Все запросы в БД работают через PDO. Объекты xPDO не создаются, только если они действительно не нужны.
  • Предварительная обработка простых плейсхолдеров в чанках. Парсер MODX разбирается только со сложными вызовами.
  • Правильная сортировка, подготовка, обработка и вывод ТВ параметров.
  • Код чанков можно указывать прямо при вызове сниппета, загружать обычным образом или из статичных файлов.
  • «Быстрые плейсхолдеры» в чанках, которые заменяют фильтры типа «isempty» и оборачивают значения в теги только если те не пусты.
  • Ведение подробного журнала работы сниппета с отметками времени, для отладки.

Все запросы строятся на xPDO, выборка производится через PDO для экономии ресурсов и скорости.

В состав входят:

  • pdoResources — Очень быстрая замена для getResources, совместимая по параметрам.
  • pdoMenu — Замена для Wayfinder, строит меню.
  • pdoUsers — Выборка и вывод пользователей сайта, с фильтрацией по ролям и группам.
  • pdoCrumbs — Хлебные крошки, замена BreadCrumb.
  • pdoSitemap — Быстрая генерация карты сайта, замена GoogleSiteMap.
  • pdoNeighbors — Вывод ссылок на соседние документы.
  • pdoField — Вывод любого поля документа, замена getResourceField и UltimateParent.
  • pdoPage — Постраничный вывод результатов, замена getPage.

Основные возможности


— Любые выборки, из любых таблиц с любыми условиями и джоинами.
— Учет времени на каждую операцию, подробный лог для выявления узких мест.
— Полная совместимость с getPage для постраничного вывода результатов.
— Самый быстрый процессинг чанков, быстрее только вообще без них.
Встроенный шаблонизатор Fenom в версии 2.0

Как получить статьи на пользовательской странице в MODX CMS



Я новичок в MODX CMS, поэтому больше ничего не знаю об этом CMS. Я пытался получить статьи в пользовательском шаблоне пожалуйста смотрите скриншот 01:-

Скриншот 01

Это шорткод статей который я использую для извлечения статей на пользовательских страницах смотрите скриншот 02:-

Скриншот 02

Это шаблон статьи и он отлично работает с шорткодом пожалуйста смотрите скриншот 03:-

Скриншот 03

Я исследовал в google, так что я нашел это

[[getResources]]

но я не знаю, как им пользоваться.

modx modx-resources modx-templates
Поделиться Источник Bhanu     14 апреля 2020 в 12:52

1 ответ


  • Django-CMS: cmsplugin_blog на странице по умолчанию

    У меня возникли проблемы с размещением приложения cmsplugin_blog на первой странице в django-cms. Проблемы, среди прочего, заключаются в том, что URL не показывает имя страницы, поэтому есть несколько проблем со ссылками на статьи и интернационализацией, которые не отображаются иначе. Можно ли…

  • Нужно ASP.NET CMS как MODx PHP один

    Когда мне нужно разработать решение с помощью CMS, я рекомендую своим клиентам использовать MODx, гибкий для меня как разработчика и простой в использовании для контент-менеджеров. На этот раз мой клиент ввел требование: решение должно использовать ASP.NET. Проблема в том, что в своих…



1

Прежде всего проверьте эту ссылку: https://docs.modx.com/current/en/extras/getresources/index , но для меня будет гораздо лучше использовать pdoResources(имеет полезную опцию &showLog для ваших нужд) из pdoTools extra: https://docs.modx.pro/en/components/pdotools/snippets/pdoresources для целей тестирования, пожалуйста, позвоните uncached (with ! подпись перед именем) фрагменты f.e

[[!getResources]], [[!pdoResources]]

Также имейте в виду, что эти фрагменты не показывают скрытые и неопубликованные ресурсы по умолчанию, вы должны указать это прямо: f.e.

[[pdoResources?&showUnpublished=`1`]] 

[[getResources?&showUnpublished=`1`&showHidden=`1`]]

Поделиться Anton Tarasov     14 апреля 2020 в 15:11


Похожие вопросы:


как создать прямую ссылку на статьи cms

Я создаю простой CMS с таблицей под названием ‘articles’, в которой хранятся все статьи. На моей странице AddArticle.php на веб-сайте у меня есть форма, которая создает статьи и подает таблицу….


Статьи Modx Revo больше не отображаются в менеджере

Поэтому менеджер решил больше не показывать мои статьи, которые были/есть в моем контейнере статей. Они появляются на интерфейсе и, следовательно, очевидно, также в БД, но не в менеджере. Я могу…


Пагинация [+next+] не работает на шаблоне MODx CMS

У меня возникли трудности с получением функциональности разбиения на страницы, работающей с [[То же самое? … ]] в MODx CMS. У меня есть документы, отображаемые на странице, лимит установлен на 5….


Django-CMS: cmsplugin_blog на странице по умолчанию

У меня возникли проблемы с размещением приложения cmsplugin_blog на первой странице в django-cms. Проблемы, среди прочего, заключаются в том, что URL не показывает имя страницы, поэтому есть…


Нужно ASP.NET CMS как MODx PHP один

Когда мне нужно разработать решение с помощью CMS, я рекомендую своим клиентам использовать MODx, гибкий для меня как разработчика и простой в использовании для контент-менеджеров. На этот раз мой…


Установите Modx на сервер FTP

Я довольно новичок в cms и надеюсь, что вы сможете мне помочь. Я хотел бы установить modx на сервер ftp. Моя проблема в том, что мой предшественник создал сайт с joomla . Теперь я хочу создать…


получить значение переменной шаблона на каждой странице modx revolution

Я использую modx и, честно говоря, я новичок в этом CMS. Я хочу показать значение соответствующей переменной шаблона на каждой странице. Вот мой код, написанный в сниппете: <?php if (…


запуск cms: plone или modx

Я моделирую новый проект, который потребует решения CMS. Я новичок в этом пространстве … я старожил с типичными корпоративными навыками моей эпохи: скриптинг, java/j2ee, plsql. Работа с jQuery и…


MODx CMS — как использовать собственный код PHP или HTML на пользовательских страницах

Можно ли реализовать пользовательские HTML или PHP на MODx CMS страницах? Я хочу сделать больше, чем может предложить редактор Rich Text. Спасибо.


Nesta CMS on linux не показывает последние статьи

Кто-нибудь испытывал неспособность для Nesta CMS показать последние статьи на linux? Работает Ubuntu 12.04. Я могу перейти к статье localhost:9393/filename, и она прекрасно отображается. Я пробовал…

pdoResources / Snippets / pdoTools / docs.modx.pro

Фрагмент для отображения списка ресурсов. Это продвинутая замена getResources: в нем есть все функции, но без недостатков.

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

Недвижимость

Свойства выбора ресурса

Эти свойства определяют, какие ресурсы будут отображаться в сгенерированном списке.

Имя По умолчанию Описание
и родители Текущий ресурс Список родителей, разделенных запятыми, для поиска результатов. Установите 0 для неограниченного доступа, до +0 для верхнего уровня. Если родительский идентификатор начинается с тире, он и его дочерние элементы исключаются из запроса.
и глубина 10 Глубина поиска дочерних ресурсов от родительского в дереве ресурсов.
и ресурсы Разделенный запятыми список ресурсов для добавления к результатам. Если идентификатор ресурса начинается с дефиса, этот ресурс исключается из запроса.
и контекст Ограничить ресурсы из данного контекста.
и где Массив дополнительных параметров выбора в кодировке JSON.
и показатьСкрытый 1 Показать ресурсы, скрытые в меню.
и показать Неопубликованные 0 Показать неопубликованные ресурсы.
и показать Удалено 0 Показать ресурсы, отмеченные как удаленные.
и скрыть Контейнеры 0 Исключить ресурсы контейнера, то есть ресурсы с «isfolder = 1».
и выберите 0 Список полей для извлечения, разделенных запятыми.Вы можете указать массив строк JSON, например {«modResource»: «id, pagetitle, content»} .
и сортировка название страницы Любое поле ресурса для сортировки, включая телевизоры, если также установлено свойство & includeTVs . Вы можете указать строку JSON с массивом из нескольких полей, например {«tvname»: «ASC», «pagetitle»: «DESC»} . Для случайной сортировки используйте «RAND ()».
и sortdir DESC Направление сортировки: по возрастанию или по убыванию.
и предел 10 Ограничьте количество результатов. Вы можете использовать «0» без ограничения.
и офсет 0 Число элементов, которые нужно пропустить, с самого начала.
и первый 1 Номер первого элемента выходных результатов.
и последние Автомат, по формуле (итого + первая — 1) Номер последней позиции результатов.
и нагрузка Модели Разделенный запятыми список компонентов, модель которых необходимо загрузить для построения запроса. Пример: & loadModels = `ms2gallery, msearch3` .
и tvFilters Список фильтров для ТВ, разделенных И и ИЛИ. Указанный разделителем параметр & tvFiltersOrDelimiter представляет собой логическое условие ИЛИ и условия, сгруппированные в первую очередь.Внутри каждой группы вы можете указать список значений, разделенных и tvFiltersAndDelimiter . Искать значения можно в любом конкретном ТВ, если указано «myTV == значение», или в любом «значении». Пример вызова: & tvFilters = `filter2 == one, filter1 == bar% || filter1 == foo` . Обратите внимание: в фильтре используется оператор LIKE, а символ «%» является метасимволом. Это будет искать значения для ресурсов, которые находятся в таблице site_tmplvar_contentvalues, а не в настройках телевизора по умолчанию.
и tvFiltersAndDelimiter «,» Разделитель условного И свойства & tvFilters .
и tvFiltersOrDelimiter «||» Разделитель для условного свойства OR и tvFilters .

Свойства шаблона

Эти свойства определяют блоки, содержащие шаблоны для форматирования сгенерированного вывода.

Имя Описание
и возврат Установите в «1», чтобы вернуть строку со списком идентификаторов ресурсов вместо полных результатов. Все шаблоны игнорируются.
и tpl Именованный блок для форматирования отдельных элементов. Если не указано, содержимое полей ресурсов будет выведено на экран.
и tpl Первый Имя фрагмента для форматирования первого элемента результатов.
и tpl Последний Имя фрагмента для форматирования последнего элемента результатов.
и tplOdd Имя фрагмента для форматирования каждого элемента с нечетным номером в результатах.
и tplWrapper Chunk — обертка для всех результатов. Принимает один заполнитель: [[+ output]] . Он не работает вместе с & toSeparatePlaceholder .
& wrapIfEmpty Включает внешнюю оболочку фрагментов * & tplWrapper **, даже если результатов нет.
и tpl Состояние Определяет поле ресурса для оценки по ключам, определенным в свойстве & conditionalTpls .
и tpl Оператор Необязательный оператор для сравнения поля ресурса & tplCondition с массивом значений и в блоках & conditionalTpls .
и условные Tpls Объект JSON, определяющий карту значений полей и связанных фрагментов tpl для использования, когда поле, определенное в & tplCondition , соответствует значению. Оператор сравнения указан в & tplOperator . Для таких операторов, как isempty , нельзя использовать массив ключей.
и выходной разделитель Необязательная строка для разделения результатов.

Свойства результата

Эти свойства дополнительно определяют, какие данные следует извлекать и как их отображать.

Имя По умолчанию Описание
и быстрый режим 0 Быстрый режим для обработки чанков. Все необработанные теги (модификаторы вывода, сниппеты и т. Д.) Удаляются.
и idx Начальное количество итераций вывода.
и набор Всего 0 Указывает, следует ли заполнить общий заполнитель количеством результатов.
и всего Вар всего Имя заполнителя для хранения общего количества результатов.
и includeContent 0 Указывает, следует ли возвращать в результатах поле «content» каждого ресурса.
и телевизоры Список значений переменных шаблона, разделенных запятыми, которые должны быть включены в заполнители, доступные для каждого шаблона ресурса. Пример: «действие, время» создаст заполнители [[+ tv.action]] и [[+ tv.time]] .
и подготовить телевизоры «1», подготавливает все телевизоры, указанные в , и включает телевизоры Разделенный запятыми список ТВ-значений, зависящих от медиаисточника, которые необходимо подготовить перед выводом.
и технологические телевизоры Разделенный запятыми список телевизоров, которые должны обрабатываться в соответствии с их параметрами вывода. Если установлено значение «1», будут обрабатываться все ТВ, перечисленные в , и includeTVs .
& tvPrefix тв. Свойство ТВ префикса.
и схема -1 Тип схемы URL, передаваемой в modX :: makeUrl (). См. Список допустимых вариантов.
& useWeblinkUrl 0 Создает ссылку на ресурс веб-ссылки, а не на целевой URL. ПРИМЕЧАНИЕ: Для правильной работы обязательно используйте [[+ link]] вместо [[~ [[+ id]]]] , например. [[+ pagetitle]]] .
и к держателю Сохранить вывод в заполнитель с этим именем вместо вывода вывода на экран.
и другие держатели Каждый элемент будет отображаться в виде заполнителя с именем, начинающимся с этого значения и заканчивающимся порядковым номером, начинающимся с нуля. Например, указав значение свойства «myPl», вы получите заполнители [[+ myPl0]] , [[+ myPl1]] и т. Д.
& showLog 0 Показать дополнительную отладочную информацию об обработке сниппета только зарегистрированным пользователям Manager.

Примеры

Простой список дочерних элементов ресурса № 1:

  [[pdoResources?
    & родители = `1`
    & глубина = `0`
    & tpl = `ListRowTpl`
]]  

Чтобы добавить телевизор с именем «image», тогда звонок будет следующим:

  [[pdoResources?
    & родители = `1`
    & глубина = `0`
    & tpl = `ListRowTpl`
    & includeTVs = `изображение`
]]  

Чанк ListRowTpl теперь позволяет использовать заполнитель [[+ tv.изображение]] .

Зачем использовать MODX часть 1 — Простой код шаблона

Опубликовано: 13 сен 2016

В этой новой серии коротких статей я продемонстрирую, почему мы при любом размере экрана выбираем MODX почти для всех наших веб-проектов. В этой первой части я покажу простой и чистый код, который использует MODX, что делает использование шаблонов и CMS очень простым и легким, не нужно знать PHP или Javascript!

В этой новой серии коротких статей под названием #whyusemodx я покажу, почему мы в Any Screen Size выбираем MODX почти для всех наших веб-проектов.

В этой первой части я покажу простой и понятный код, который использует MODX, это делает использование шаблонов и CMS очень простым и легким, не нужно знать PHP или Javascript!

Получение списка сообщений с помощью WordPress

Ниже я покажу код, который используется в официальной теме WordPress двадцать шестнадцать, это самая популярная и широко используемая тема с официального сайта WordPress.

Цикл по умолчанию для WordPress

WordPress заставляет вас использовать PHP и то, что они называют циклом , чтобы получить список статей:

Так что это выглядит довольно продвинутым для тех, кто не разбирается в PHP!

Получение списка ресурсов (это могут быть сообщения, продукты, FAQ или что-то еще) с использованием MODX

Так как же нам получить список постов с помощью MODX?

MODX pdoResources call

Для этого используется плагин pdoTools, и после его установки вы просто добавляете следующий вызов pdoResources (включенный в pdoTools) в свой код шаблона:

Мне нравится этот простой код! Это просто указывает MODX отобразить список ресурсов.

articleItemTpl

Единственный вариант, который нам действительно нужен, это & tpl , он используется для назначения HTML-кода, который будет использоваться для перечисления каждого элемента сообщения. Самый простой пример - создание блока с именем articleItemTpl :

.

Давайте сравним WordPress VS MODX код шаблона

Не знаю, как вы, но я предпочитаю чистый и аккуратный код, который структурирован и разбит по типу: HTML должен быть только HTML, PHP только PHP.В WordPress вы получаете множество HTML-файлов, содержащих огромные блоки PHP-кода, это одна из самых запутанных частей использования WordPress, а использование цикла может быть огромной проблемой.

Итак, как вы хотите, чтобы код вашего шаблона выглядел?

Руководств Боба | Отсутствуют телевизоры с getResources или pdoResources

В предыдущей статье мы рассмотрели, как не дать форуму MODX съесть вас.В этом разделе мы рассмотрим некоторые причины, по которым getResources и pdoResources могут не отображать ваши значения TV.


Проблема

Предположим, у вас есть вызов getResources или pdoResources, который содержит теги TV в блоке Tpl, но некоторые или все значения TV не отображаются или выглядят не так, как должны. Это может происходить по нескольким причинам. Следующие проблемы будут возникать как с getResources, так и с его более быстрой заменой pdoResources.

Я буду ссылаться на getResources в разделах ниже, но помните, что большинство пунктов в равной степени применимы к pdoResources.Если между ними есть различия, я расскажу вам о них.


Телевизоры не подключены к шаблону

Если телевизор не подключен к шаблону текущего ресурса, getResources не сможет получить к нему доступ. Эта ошибка встречается довольно редко, так как при редактировании ресурса вы могли бы заметить, что телевизор пропал.


Проблемы с разрешениями

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

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


и телевизоры

Это свойство необходимо установить, если в блоке Tpl есть теги TV. Использование этого свойства отличается от getResources и pdoResources. Для getResources свойство должно быть `0` или ` 1` (значение по умолчанию - `0` ).Если это все, что вы делаете, getResources подготовит установку заполнителей для всех подключенных к ресурсу телевизоров. Если у вас много телевизоров, но вы будете отображать только некоторые из них, вы можете ускорить процесс, добавив свойство & includeTVList , которое должно содержать список, разделенный запятыми, содержащий имена телевизоров, которые вам нужно показать.

Для pdoResources есть только одно свойство, & includeTVs , которое должно содержать разделенный запятыми список имен телевизоров, которые вы хотите показать.


и подготовить телевизоры

Если ваши телевизоры подключены к источнику мультимедиа, это свойство указывает MODX предпринять необходимые шаги для правильного отображения значения TV. Как и в случае с & includeTVs выше, getResources подготовит все телевизоры, если вы используете & prepareTVs = `1` . Он подготовит только те, которые вы хотите подготовить, если вы используете и prepareTVList со списком названий телевизоров, разделенных запятыми.

Для pdoResources список имен телевизоров, разделенных запятыми, помещается в свойство & prepareTVs .

и технологические телевизоры

Если вам нужно обработанное значение TV, а не необработанное значение, сохраненное в TV value, вам необходимо включить это свойство. Например, если у вас есть телевизор с изображениями и вы ожидаете, что полный тег изображения HTML заменит заполнитель, вам необходимо запросить обработанное значение телевизора.

Еще раз, getResources принимает два свойства: & processTVs = `1` и & processTVList со списком телевизоров, которые необходимо обработать, через запятую.

Тег фрагмента pdoResources принимает одно свойство, и processTVs , со списком названий телевизоров, разделенных запятыми.


При использовании getResources второе свойство в каждой паре ( & includeTVList , & prepareTVList и & processTVList ) является необязательным. Тем не менее, рекомендуется всегда использовать их, потому что включение, подготовка и обработка телевизоров - это относительно медленный процесс, и нет смысла заставлять MODX выполнять те операции на телевизорах, которые вы не будете отображать.

Это не проблема с pdoResources, поскольку он требует от вас указать телевизоры, которые вы хотите включить, подготовить и / или обработать, в теге pdoResources.


и tvPrefix

Это тот, который чаще всего сбивает с толку. И для getResources, и для pdoResources префикс по умолчанию - tv. . Вам нужно не только включить его в названия ваших телевизоров, но и в свойствах выше.

Это вопрос личных предпочтений, но редко есть причина для добавления ТВ-приставки.Единственный случай, который я могу придумать, - это если у вас есть телевизор с тем же именем, что и поле ресурса (например, телевизор с именем content или description ), и эти телевизоры можно легко переименовать, чтобы избежать конфликтов.

Добавление префикса к каждому телевизору требует времени, и легко забыть добавить префикс при указании телевизоров в свойствах выше, поэтому я рекомендую никогда не использовать префиксы TV и * всегда * включать это свойство в свой тег getResources или pdoResources :

& tvPrefix = ``
 

Если у ваших телевизоров нет префикса и вы не настроили свойство & tvPrefix , как показано выше, ваши телевизоры не будут отображаться в результатах.


Скоро

В следующей статье мы рассмотрим, как включить другие дополнения в транспортный пакет.



Для получения дополнительной информации о том, как использовать MODX для создания веб-сайта, посетите мой веб-сайт «Руководства Боба» или, еще лучше, купите мою книгу: MODX: Официальное руководство .

Ищете качественный хостинг с поддержкой MODX? По состоянию на май 2016 г. Bob's Guides размещается на хостинге A2. (Более подробная информация в поле ниже.)



Список изменений для коллекций.Коллекции 3.6.0 =================== - Добавить преобразователь таблиц синхронизации - Добавлены 3 опции для ускорения больших дочерних списков (+ 10К ресурсов) - Исправлена ​​сортировка D&D для ресурсов в глубине> 1 Коллекции 3.5.0 =================== - Добавить collections.renderer.boolean renderer - Добавить совместимость с AjaxManager - Отрегулируйте положение других столбцов при создании / обновлении столбца с указанной позицией - Добавить параметр excludeResources в фрагмент getSelections - Предотвратить сброс просмотра Коллекции после быстрого обновления ресурсов - Используйте лексиконы для кнопки Открыть - Добавить эллипс переполнения в главный столбец - Добавить область в системные настройки Коллекции 3.4.2 =================== - Исправлено сохранение значений телевизора из обновления из сетки - Исправлено после события сохранения, запущенного при обновлении из сетки Коллекции 3.4.1 =================== - Исправить бесконечную перезагрузку Safari - Исправить выбор при сортировке по menuindex Коллекции 3.4.0 =================== - Передать имя столбца средству рендеринга сниппета - Предотвратить постоянную сортировку, нарушающую сортировку D&D - Добавить рендерер Collections.renderer.buttons - Разрешить рендеринг фрагментов в несуществующем столбце - Добавить имена событий для обновления из процессора сетки - Показывать папки под коллекциями - Показывать хлебные крошки при просмотре папок в коллекциях - Импорт / экспорт представлений коллекции - Добавить быстрое обновление для сбора и выбора детей - Запретить сохранение столбцов с помощью модуля рендеринга из сетки - Добавлены новые системные настройки для отображения кнопки создания коллекции / выбора на древовидной панели инструментов. - Отображение идентификатора ресурса в окне ресурса ссылки - Настроить цвета в сетке коллекций Коллекции 3.3.0 =================== - Показать назначенные шаблоны в сетке просмотра Коллекции - Исправить игнорирование родителей для pdoResources - Добавить «Условие для окна ресурса ссылки» в качестве настройки для просмотра выбора. - Исправлено отображение ContentBlocks, когда контент находится на отдельной вкладке - Исправлена ​​проверка использования шаблона в представлениях. Коллекции 3.2.2 =================== - Исправлена ​​сортировка D&D для столбцов просмотра Коллекции. - Добавлен Collections.renderer.pagetitleWithIcons. - Улучшенный обработчик встроенных кнопок действий, позволяющих использовать значки. - Исправлена ​​сортировка D&D, когда в качестве поля сортировки по умолчанию задан индекс меню. - Переименовать тип сортировки String Коллекции 3.2.1 =================== - Исправить обновление с предыдущих версий Коллекции 3.2.0 =================== - Добавить тип сортировки в качестве настройки столбца шаблона новой коллекции - Добавить постоянную сортировку - Автоматическая установка метки столбца из заголовка ТВ или имени группы тегов - Передавать значение столбцов в качестве входных данных для средства визуализации фрагментов - Добавить тип сортировки в качестве новой настройки просмотра коллекции. - Добавить расположение содержимого в качестве настройки просмотра новой коллекции. - Добавить родителя в качестве настройки представления новой коллекции - Сделайте колонки ТВ доступными для поиска - Используйте modx-> getTableName, чтобы получить имена таблиц для таблиц Tagger - Показать значение по умолчанию для телевизора в сетке - Очистить фильтр, использовать поле сортировки и каталог из представления - Предотвратить ошибку, не передавая шаблоны ресурсов в представлении коллекции. Коллекции 3.1.1 =================== - Исправлено отображение (пустого) шаблона в поле выбора дочернего шаблона. - Исправлен путь к изображению в рендерере - Исправлены дочерние элементы, переупорядочивающие D&D при выборе элемента или дерева файлов. - Исправлена ​​кнопка возврата к сбору / выбору для статических ресурсов / веб-ссылок / символических ссылок. - Исправлена ​​кнопка возврата к коллекции / выбора при создании новой дочерней страницы. Коллекции 3.1.0 =================== - Исправлена ​​кнопка сброса фильтра в разделе "Выбор". - Добавлена ​​возможность установить значения по умолчанию для типа контента для новых детей. - Добавлена ​​системная настройка для изменения пути к изображению в рендерере изображений. - Разрешить детям в разделе "Выбор" - Добавлена ​​возможность добавить колонку quip. - Исправлен выбор шаблонов в представлении Коллекции в Revo 2.2.x - Добавлена ​​возможность установить значения по умолчанию для скрытого меню, опубликованного, кешируемого, доступного для поиска и расширенного текста для новых детей. - Добавлена ​​возможность указать сортировку для поискового запроса ресурса Selections. - Добавлена ​​возможность установить метку для кнопки «Назад в коллекцию / выбор». - Исправлено отображение сетки выбора с телевизорами - Передать целую строку средству рендеринга фрагментов - Исправлена ​​сортировка по ТВ с тире в названии Коллекции 3.0.2 =================== - Исправлено сохранение представления коллекций из вкладки настроек ресурса. - Связать ресурс с выделением можно с помощью поиска по идентификатору - Исправлена ​​передача формата sort dir int в верхнем регистре в getSelections. - Удалена опция родителей из вызова getSelections. Коллекции 3.0,1 =================== - Исправлено обновление из сетки Коллекции 3.0.0 =================== - Добавлена ​​проверка имени столбца, если он содержит точку - Добавлен рендерер PHP (сниппет), который будет использоваться для столбца - Добавлена ​​опция просмотра для определения классов ресурсов, которые будут доступны при выборе типа ресурса. - Добавлена ​​опция просмотра для определения пунктов контекстного меню. - Добавлена ​​опция просмотра для определения кнопок и их стиля. - Исправлено сохранение параметров просмотра из неактивированной вкладки - Изменен значок дерева по умолчанию для коллекций в Revo 2.3 - Добавлен сниппет getSelections (работает с getPage, getCache и т. Д.) - Обновлен вид вкладки настроек Коллекции. - Обновлен просмотр коллекций. - Добавлен CRC для выбора. - Добавлена ​​кнопка возврата для дочерних элементов Коллекции и кнопка возврата к исходному состоянию. - Запускать OnBeforeEmptyTrash и OnEmptyTrash при удалении ресурса через коллекции Коллекции 2.2.2 =================== - Исправлен рендеринг столбцов TV и Tagger с тире в имени / псевдониме. Коллекции 2.2.1 =================== - Исправлена ​​совместимость с PHP 5.2. Коллекции 2.2.0 =================== - Добавлена ​​возможность установить положение поля Контент. - Добавлены параметры для установки ярлыка вкладки и новой дочерней кнопки. - Добавлен Collections.renderer.image для рендеринга изображений. - Добавлены вкладки в представления коллекции, чтобы разделить ее настройки. - Разделенная вкладка настроек для вкладок vtabs для настроек ресурса и настроек коллекций. - Улучшена кнопка закрытия в дочерних элементах коллекции. - Исправлено отображение данных в столбцах ТВ. - Добавлена ​​возможность безвозвратно удалить удаленный ресурс - Исправлено повторяющееся действие из контекстного меню. - Добавлен контроллер данных для отображения страницы обзора ресурсов. - Исправлено добавление # к URL-адресу менеджера при нажатии кнопки - Исправить ошибку строгих стандартов (PHP 5.4+) в процессоре ресурсов / списков получения - Исправить неработающую ссылку для редактирования при щелчке по заголовку страницы в сетке. Коллекции 2.1.0 =================== - Добавлена ​​возможность дублировать представление Коллекции - Обновлен макет для создания / обновления столбца представления. - Добавлены просмотр, обновление, удаление, дублирование, публикация элементов в контекстное меню детской сетки. - Добавлен дочерний шаблон по умолчанию, тип ресурса по умолчанию и возможность выбора типа ресурса в шаблоны коллекции. - Исправлена ​​кнопка просмотра - Исправлены сообщения журнала от плагина Коллекции 2.0,2 =================== - Исправлены рендеры даты и времени Коллекции 2.0.1 =================== - Исправлено сохранение контейнера коллекций в Revolution 2.2.x Коллекции 2.0.0 =================== - Добавлены шаблоны коллекций - Добавлена ​​возможность создавать разные дочерние типы из сетки - Поддержка Revolution 2.3 Коллекции 1.3.3 =================== - Удалить вызов отладчика: X Коллекции 1.3.2 =================== - Исправление для диалога подтверждения навигации - Исправлен выбор нескольких строк - Исправлена ​​проверка на Tagger Коллекции 1.3.1 =================== - Выпуск с правильным номером версии Коллекции 1.3.0 =================== - Поддержка Tagger в поле поиска на вкладке Children - Добавлена ​​возможность перетаскивать дочерний элемент в дерево ресурсов для смены родителя. - Обновлена ​​английская и немецкая лексика. Коллекции 1.2.0 =================== - Добавлена ​​возможность поиска через созданное по полному имени - Добавлена ​​возможность поиска через созданное по имени пользователя - Исправлено переключение ребенка между двумя коллекциями - Исправлено переключение отличного родителя на Коллекции при перемещении последнего ребенка - Исправлено имя ребенка после создания дубликата - Добавлена ​​сортировка перетаскиванием по индексу меню. Коллекции 1.1.1 =================== - # 20 Исправлено после повторного сохранения дочернего набора show_in_tree 1 Сборники 1.1.0 =================== - # 9 Добавлена ​​кнопка дублирования - # 10 Добавлен значок коллекции в дерево ресурсов - # 11 Сделать сетку с отслеживанием состояния и добавить еще несколько столбцов (до очистки кеша сетка сохраняет отображаемые / скрытые столбцы и их порядок) - "Сборник" переименован в "Сборник". - # 7 Добавлен немецкий перевод (спасибо pepebe) - # 12 Добавлен чешский перевод - # 14 Добавлен голландский перевод (спасибо @mark_hamstra) - # 15 Добавлен французский перевод (спасибо @rtripault) - # 16 # 17 Добавлен русский перевод (спасибо vanchelo) - # 18 Исправлен конфликт show_in_tree Коллекции 1.0,0 =================== - Публикуется в дополнениях MODX Коллекции 0.8.2 =================== - Завершено переименование CollectionsContainer -> CollectionContainer. - Удалены вызовы журнала chromephp. Коллекции 0.8.1 =================== - Исправлено отображение псевдонимов в дочерней сетке. Коллекции 0.8.0 =================== - CollectionsContainer переименован в CollectionContainer. - Исправлено возвращение правильного количества детей в контейнере для сбора. Коллекции 0.7.0 =================== - Добавлен обратный преобразователь, который переключит все контейнеры коллекций обратно на modDocument и установит для show_in_tree значение 1 для всех дочерних коллекций при удалении. - Добавлена ​​поддержка переключения class_key дескриптора из CollectionContainer и в CollectionContainer. Коллекции 0.6.0 =================== - Исправлено правильное отображение контейнера коллекций под другим контейнером коллекций. - Исправлено правильное отображение нормальных контейнеров с детьми под CRC. - Добавлен слушатель для события Before Empty Trash, чтобы скрыть ресурсы, которые находятся в контейнере коллекций и у которых не будет других дочерних элементов после очистки корзины. Коллекции 0.5.0 =================== - Обновлен плагин для внедрения JS для обработки кнопки отмены на панели обновления ресурсов. Коллекции 0.4.0 =================== - Добавлен плагин, который обрабатывает правильную установку параметра show_in_tree для ресурсов после создания нового ресурса или сортировки ресурсов. Коллекции 0.3.0 =================== - Визуальные улучшения для сетки с детьми Коллекции 0.2.0 =================== - Расширенная панель обновления ресурсов с новой вкладкой, которая содержит сетку с дочерними элементами Коллекции 0.1.0 =================== - Первый выпуск.

sottwell.com - Перенос бесплатного шаблона

MODX работает, вставляя динамический контент, специфичный для запрашиваемой страницы, в общий шаблон. Этот шаблон очень простая HTML-страница с динамическим содержимым, замененным пользовательскими тегами MODX.Для этого урока мы будем использовать бесплатный шаблон от CSS Junction под названием «It Fits».

Первое, что нужно сделать, это загрузить архив шаблона "It Fits", а затем загрузить его файлы в вашу установку Revo. Вы можете положить их куда угодно; по привычке я использую папку assets / templates / или assets / themes / для хранения всех моих файлов шаблонов.

Вы можете переместить файлы в нужную файловую структуру. Я предпочитаю, чтобы все файлы .js были в assets / js, а все изображения, не используемые для самого шаблона, были в assets / images, поэтому я переместил файл.js и изображения содержимого из папки assets / template / itfits / в соответствующие активы / папки. Кажется, в настоящее время наблюдается мания по размещению всех библиотек Javascript и связанных с ними файлов в папке "vendor" внутри папки темы; ты можешь делать все, что хочешь.

Создайте новый шаблон с именем «Подходит (для дома)». Теперь откройте файл It Fits "index.html" в текстовом редакторе и скопируйте / вставьте содержимое файла в поле содержимого шаблона домашней страницы. Сохрани это. Откройте ресурс домашней страницы и используйте раскрывающийся список выбора шаблона использования, чтобы настроить его на использование домашнего шаблона.Страница обновится; вам все еще нужно сохранить его. Теперь просмотрите домашнюю страницу по умолчанию в вашем браузере. Должно получиться вот так.

Нам нужно скорректировать пути к файлам поддержки шаблона. Начните со ссылок на файлы .css. Измените их так, чтобы они соответствовали месту, в которое вы фактически помещаете файлы.

Я добавил файл "custom.css" в папку css для любого настраиваемого стиля, который я хочу использовать без изменения файлов .css по умолчанию, с которыми идет шаблон. Поскольку он загружается после основных стилей.min.css, его директивы переопределят директивы в основном файле .css.

  & lt; link rel = "stylesheet" href = "assets / templates / itfits / css / styles.min.css" & gt; 
& lt; link rel = "stylesheet" href = "assets / templates / itfits / css /custom.css">

И теперь у вас есть стоковая домашняя страница It Fits.

MODX имеет настройку шаблона по умолчанию, и после установки для него устанавливается шаблон №1, базовый шаблон, предоставляемый установкой.Все новые ресурсы будут автоматически использовать этот шаблон. Мы хотим, чтобы большая часть наших страниц была базовым шаблоном без всех дополнительных блоков и блоков, которые есть на домашней странице. Поэтому проще всего просто заменить код шаблона шаблона по умолчанию на код HTML из одного из шаблонов страницы It Fits. Откройте файл It Fits "page.html" в текстовом редакторе, откройте базовый шаблон для редактирования в Менеджере и скопируйте / вставьте код из файла page.html, заменив существующий код шаблона. Теперь выполните то же редактирование ссылки в заголовке шаблона, что и для домашнего шаблона - фактически, вы можете просто скопировать / вставить код из заголовка домашнего шаблона в шаблон страницы.

Замена содержимого тегами MODX

Теперь мы подошли к самому мелкому из шаблонов MODX. Нам нужно заменить все области содержимого в HTML соответствующими тегами MODX. Полное описание того, для чего предназначен каждый тег, см. В документации здесь.

Сначала мы пройдемся по заголовку шаблона и посмотрим, что мы можем сделать, чтобы настроить его для каждой страницы. В верхней части заголовка шаблона у нас есть метатег charset. Этот тег должен совпадать с настройкой заголовка HTTP.Поскольку MODX сам устанавливает HTTP-заголовок при отправке сгенерированной страницы на сервер, мы будем использовать для этого тег настройки системы.

  & lt; meta charset = "[[++ modx_charset]]" & gt;  

Нам нужно добавить «базовый» тег в заголовок шаблона перед любыми ссылками .css или .js. Это гарантирует, что все ваши относительные ссылки получат правильный полный URL. Следующее, что мы хотим заменить - это содержимое тега имени головы. Хорошей заменой может стать MODX in the Desert - Как модифицировать бесплатный шаблон для MODX.Мы также можем использовать тот же тег описания в метатеге описания заголовка. В итоге голова вашего шаблона будет выглядеть примерно так:

  & lt;! DOCTYPE html & gt; 
& nbsp; & lt; html lang = "ru" & gt;
& lt; head & gt;
& nbsp; & nbsp; & nbsp; & lt; meta charset = "[[++ modx_charset]]" & gt;
& nbsp; & nbsp; & nbsp; & lt; meta name = "viewport" content = "width = device-width, initial-scale = 1.0" & gt;
& nbsp; & nbsp; & nbsp; & lt; base href = "[[! ++ site_url]]" & gt;
& nbsp; & nbsp; & nbsp; & lt; title & gt; [[* pagetitle]] - [[++ site_name]] & lt; / title & gt;
& nbsp; & nbsp; & nbsp; & lt; link rel = "stylesheet" href = "assets / templates / itfits / css / styles.min.css "& gt;
& nbsp; & nbsp; & nbsp; & lt; link rel =" stylesheet "href =" assets / templates / itfits / css / custom.css "& gt;
& nbsp; & nbsp; & nbsp; & lt ; script src = "assets / templates / itfits / js / libs / modernizr-2.5.2.min.js" & gt; & lt; / script & gt;
& lt; / head & gt;

Внесите одинаковые изменения в оба шаблона.

ПРИМЕЧАНИЕ:

Поскольку эти заголовочные разделы HTML будут редко, если вообще когда-либо, изменяться, нет реальной необходимости добавлять дополнительную обработку к странице, разбивая ее на фрагменты.Если они, вероятно, будут часто меняться или у вас много шаблонов, было бы удобнее перемещать их по частям.

Заголовок страницы

Теперь мы подошли к тому моменту, когда нужно использовать какое-то суждение. Каждый шаблон здесь будет немного отличаться, поэтому для точного определения того, где начинается и заканчивается раздел шапки, необходимо изучить содержание. В нашем случае похоже, что весь

является заголовком, поэтому я просто собираюсь исследовать эту часть на предмет мест, где можно заменить контент тегами MODX.& lt; / a & gt; & lt; / li & gt;
& lt; / ul & gt;

Следующее, что нужно изменить, — это текст логотипа; мы изменим это на MODX в пустыне.

Другим изменением будет главное меню. К счастью, в этом шаблоне используется простой неупорядоченный список, поэтому он идеально подходит для очень простого тега фрагмента Wayfinder или pdoMenu. Нам нужно, чтобы тег ul имел установленный атрибут роли, поэтому нам нужно указать свойство outerTpl для pdoMenu. Чтобы упростить задачу, вот тег фрагмента pdoMenu, который имитирует меню шаблона:

  [[! PdoMenu? 
& nbsp; & nbsp; & nbsp; & parent = `+ 0`
& nbsp; & nbsp; & nbsp; & level = `1`
& nbsp; & nbsp; & nbsp; & outerTpl = `@ CODE:
    [[+ wrapper]]
`
]]

Для получения дополнительной информации о фрагменте pdoMenu и его свойствах см. Его документацию.

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

Баннер

С этого момента эти два шаблона различны. В этом шаблоне есть раздел баннеров, поэтому нам нужно заменить контент тегами MODX.Часть содержимого баннера перемещается в поле «сводка» (интротекст) ресурса.

Баннер по умолчанию
  & lt; section role = "banner" & gt; 
& nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h2 & gt; [[* pagetitle]] & lt; / h2 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h3 & gt; [[* longtitle]] & lt; / h3 & gt;
& nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & lt; article role = "main" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h3 & gt; [[* pagetitle]] & lt; / h3 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; p & gt; [[* introtext]] & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & lt; / article & gt;
& lt; / section & gt;
& lt;! - // заканчивается баннер - & gt;

Шаблон домашней страницы имеет более сложную нижнюю секцию, которую мы будем использовать для отображения содержимого ресурса домашней страницы, а также его интротекста.Этот раздел разделен на левую половину для содержимого и правую половину для изображения или другого содержимого. Там находится интротекст домашней страницы.

Баннер домашней страницы
  & lt; section role = "banner" & gt; 
& nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h2 & gt; [[* pagetitle]] & lt; / h2 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h3 & gt; [[* longtitle]] & lt; / h3 & gt;
& nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & lt; article role = "main" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h3 & gt; [[* pagetitle]] & lt; / h3 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[* содержание]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; aside role = "комплиментарный" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[* интротекст]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / aside & gt;
& nbsp; & nbsp; & nbsp; & lt; / article & gt;
& lt; / section & gt;

Основные области содержания

На домашней странице есть два набора блоков изображений, один с подписями, а другой — более простой список изображений, которые отлично подходят для ротатора Javascript.Остальные страницы имеют левую боковую панель и правую область основного содержимого.

Для домашней страницы мы будем использовать MIGx TV для обоих наборов блоков. MIGx предоставляет несколько фрагментов для отображения вывода телевизора, наиболее часто используемый — getImageList.

Основная часть главной страницы
  & lt; section & gt; 
& nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[getImageList?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tv = `homeBlocks`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tpl = `homeBlocksTpl`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & lt;! - //.столбцы - & gt;
& nbsp; & nbsp; & nbsp; [[getImageList?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tv = `homeRotator`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tpl = `rotatorImagesTpl`
& nbsp; & nbsp; & nbsp; ]]
& lt; / section & gt;

Для внутренних страниц мы могли бы использовать другой MIGx TV для разделов боковой панели или, как в этом случае, отображать список последних сообщений с помощью getResources или pdoResources.Контент ресурса используется для основной области контента.

Основной корпус по умолчанию
  & lt; section & gt; 
& nbsp; & nbsp; & nbsp; & lt; aside role = "комплиментарный" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[pdoResources?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & parent = `33`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tpl = `articleTpl`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & limit = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & depth = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & lt; / aside & gt;
& nbsp; & nbsp; & nbsp; & lt; статья & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[* содержание]]
& nbsp; & nbsp; & nbsp; & lt; / article & gt;
& lt; / section & gt;

Нижний колонтитул

На этом этапе шаблоны снова сходятся и используют тот же нижний колонтитул.Если хотите, вы можете переместить содержимое нижнего колонтитула в кусок.

  & lt; footer role = "contentinfo" & gt; 
& nbsp; & nbsp; & nbsp; & lt; p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; span & gt; & copy; [[!Авторское право? & startYear = `2012`]] & lt; a href =" [[! ++ site_url]] "& gt; [[++ site_name]] & lt; / a & gt; & lt; / span & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; span & gt; & lt; a href = "http: // modx.com "& gt; & lt; img src =" assets / images / icons / modx-logo.png "alt =" Контент, управляемый MODx "title =" Контент, управляемый MODx "& gt; & lt; / a & gt; & lt; a href = "https://modxcloud.com/"><img src =" assets / images / icons / modx-cloud-logo-small.png "alt =" Сайт размещен на MODx "title =" Сайт размещен на MODxCloud " & gt; & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / span & gt;
& nbsp; & nbsp; & nbsp; & lt; / p & gt;
& lt; / footer ;

Как видите, мы заменили часть контента тегами MODX.Вы можете жестко закодировать информацию своего сайта, но с помощью тегов шаблон можно использовать на любом сайте MODX. Мы также использовали простой фрагмент Copyright, чтобы обновлять дату авторского права.

После нижнего колонтитула и перед закрывающими тегами body и html мы добавляем Javascript. Причина размещения ссылок на Javascript внизу страницы заключается в том, что браузер заблокирует или прекратит обработку HTML, когда найдет ссылку на файл Javascript, и не возобновит обработку HTML для страницы, пока она не загрузится. файл Javascript.Это может привести к тому, что сайт будет работать медленнее, особенно если вы используете несколько файлов Javascript. Загрузка Javascript последней позволяет браузеру отображать всю страницу перед загрузкой Javascript, поэтому сайт будет работать быстрее.

И, наконец, два готовых шаблона.

Шаблон по умолчанию
  & lt;! DOCTYPE html & gt; 
& lt; html lang = "ru" & gt;
& lt; head & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; meta charset = "[[++ modx_charset]]" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; meta name = "viewport" content = "width = ширина устройства, начальный масштаб = 1.0 "& gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; base href =" [[! ++ site_url]] "& gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; title & gt; [[* pagetitle]] - [[++ site_name]] & lt; / title & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; link rel = "stylesheet" href = "assets / templates / itfits / css / styles.min. css "& gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; link rel =" stylesheet "href =" assets / templates / itfits / css / custom.css "& gt;
& nbsp; & nbsp; & nbsp; & nbsp ; & lt; script src = "assets / templates / itfits / js / libs / modernizr-2.5.2.min.js "& gt; & lt; / script & gt;
& lt; / head & gt;
& lt; body & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [! ++ site_url]] "& gt; [[++ site_name]] & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [ [$ socialLinks]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; nav & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[! pdoMenu?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & startId = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & level = `1`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ; & nbsp; & nbsp; & nbsp; & nbsp; & outerTpl = `@ КОД:
    [[+ wf.обертка]]
«
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / nav & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & lt; section role = "banner" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h2 & gt; [[* pagetitle]] & lt; / h2 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; p & gt; [[* longtitle]] & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; article role = "main" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h3 & gt; [[* pagetitle]] & lt; / h3 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; nbsp; nbsp; & lt; p & gt; [[* introtext]] & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / article & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; / section & gt; & lt;! - // заканчивается баннер - & gt;
& nbsp; & nbsp; & nbsp; & lt; section & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; aside role = "комплиментарный" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[pdoResources?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & parent = `33`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tpl = `articleTpl`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & limit = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & depth = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / aside & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; статья & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[* содержание]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / article & gt;
& nbsp; & nbsp; & nbsp; & lt; / section & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; footer role = "contentinfo" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; span & gt; & copy; [[!Авторское право? & startYear = `2012`]] & lt; a href =" [[! ++ site_url]] "& gt; [[++ site_name]] & lt; / a & gt; & lt; / span & gt;
& nbsp; & nbsp; & nbsp; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & lt; span & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; a href = "https: // modx.com "& gt; & lt; img src =" assets / images / icons / modx-logo.png "alt =" Контент, управляемый MODX "& gt; & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; a href = "https://modxcloud.com/" & gt; & lt; img src = "assets / images / icons / modx -cloud-logo-small.png "alt =" Хостинг в облаке MODX "& gt; & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt ; / span & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; / footer & gt;
& nbsp; nbsp; & nbsp; ; & lt; script src = "assets / js / jquery-2.1.4.min.js "& gt; & lt; / script & gt;
& lt; / body & gt;
& lt; / html & gt;
Шаблон домашней страницы
  & lt;! DOCTYPE html & gt; 
& lt; html lang = "ru" & gt;
& lt; head & gt;
& nbsp; & nbsp; & nbsp; & lt; meta charset = "[[++ modx_charset]]" & gt;
& nbsp; & nbsp; & nbsp; & lt; meta name = "viewport" content = "width = device-width, initial-scale = 1.0" & gt;
& nbsp; & nbsp; & nbsp; & lt; base href = "[[! ++ site_url]]" & gt;
& nbsp; & nbsp; & nbsp; & lt; title & gt; [[* pagetitle]] - [[++ site_name]] & lt; / title & gt;
& nbsp; & nbsp; & nbsp; & lt; link rel = "stylesheet" href = "assets / templates / itfits / css / styles.min.css "& gt;
& nbsp; & nbsp; & nbsp; & lt; link rel =" stylesheet "href =" assets / templates / itfits / css / custom.css "& gt;
& nbsp; & nbsp; & nbsp; & lt ; script src = "assets / templates / itfits / js / libs / modernizr-2.5.2.min.js" & gt; & lt; / script & gt;
& lt; / head & gt;
& lt; body & gt;
& nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbs nbsp; & nbsp; & nbsp; & nbsp; & lt; a href = "[[! ++ site_url]]" & gt; [[++ site_name]] & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[$ socialLinks]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; nav & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[! pdoMenu?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & parent = `0`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; nbsp; & nbsp; & nbsp; & nbsp; nbsp; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & nbsp; & level = `1`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & outerTpl = `@ CODE:
    [[+ wf.обертка]]
`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / nav & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & lt; section role = "banner" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h2 & gt; [[* pagetitle]] & lt; / h2 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; p & gt; [[* longtitle]] & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / header & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; article role = "main" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; h4 & gt; [[* pagetitle]] & lt; / h4 & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; nbsp; nbsp; [[* содержание]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; aside role = "комплиментарный" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[* интротекст]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / aside & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / article & gt;
& nbsp; & nbsp; & nbsp; & lt; / section & gt; & lt;! - // заканчивается баннер - & gt;
& nbsp; & nbsp; & nbsp; & lt; section & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[getImageList? & tv = `homeBlocks`]]
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / div & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; [[getImageList?
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & tv = `homeRotator`
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; ]]
& nbsp; & nbsp; & nbsp; & lt; / section & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & lt; footer role = "contentinfo" & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; p & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; span & gt; & copy; [[!Авторское право? & startYear = `2012`]] & lt; a href =" [[! ++ site_url]] "& gt; [[++ site_name]] & lt; / a & gt; & lt; / span & gt;
& nbsp; & nbsp; & nbsp; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & NBSP; & lt; span & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; a href = "https: // modx.com "& gt; & lt; img src =" assets / images / icons / modx-logo.png "alt =" Контент, управляемый MODX "& gt; & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; a href = "https://modxcloud.com/" & gt; & lt; img src = "assets / images / icons / modx -cloud-logo-small.png "alt =" Хостинг в облаке MODX "& gt; & lt; / a & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt ; / span & gt;
& nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & nbsp; & lt; / p & gt;
& nbsp; & nbsp; & nbsp; & lt; / footer & gt;
& nbsp; & nbsp; lt & nbsp; ; скрипт src = "assets / js / jquery-2.1.4.min.js "& gt; & lt; / script & gt;
& nbsp; & nbsp; & nbsp; & lt; script src =" assets / templates / itfits / js / script.min.js "& gt; & lt; / script & gt; < br> & lt; / body & gt;
& lt; / html & gt;

pdoTools / Утилиты / Дополнения MODX / modstore.pro

Версия 2.12.10-пл

Дата выхода 02.09.2021

Предупреждение! Для этого компонента требуется версия PHP 5,6 или выше! Если ваш сайт использует PHP меньше, чем требуется, установка этого пакет может его сломать.

Предупреждение! Этот пакет требует MODX не ниже 2,3 !

pdoTools — набор удобных сниппетов для повседневной работы + небольшая библиотека, что делает их очень быстрыми.

Благодаря использованию общих библиотек все фрагменты pdoTools имеют одинаковую минимальную функциональность:

  • Все запросы в базе данных работают через PDO. Объекты XPDO создаются только в том случае, если они действительно не нужны.
  • Предварительная обработка простых заполнителей кусками. Парсер MODX разбирается только в сложных задачах.
  • правильная сортировка, подготовка, обработка и настройки вывода на ТВ.
  • Куски кода могут быть указаны при вызове сниппета, загружены обычным способом или из статических файлов.
  • «Быстрые заполнители» в чанках, которые заменяют фильтры типа «isempty» и переносят значения в теги, только если они не пусты.
  • Ведение подробного фрагмента журнала с отметками времени для отладки.

Информация для modxrevolutionboilerplate — SiteDash, возьмите под свой контроль свои сайты MODX

Описание упаковки

Для всей информации: https://github.com/pdincubus/MODX-Revolution-Boilerplate/

# Последние добавления

## 1.2

* Удалите старые вещи, которыми я не пользовался давным-давно, немного изменив порядок. Обновил README.

## 1.1.3

* Доработки контактной формы для исправления хранения в базе данных MODX, исправлений перенаправления и изменений разметки

## 1.1.2

* Добавление AutoRetriever для персонализации страницы благодарности для контактной формы

* Сделать contact for имеет идентификатор по умолчанию, если он не передается в блок

* Новый шаблон ContactThanks

* Измените имена двух глобальных заполнителей ClientConfig, чтобы лучше понимать

* Обновленный README

* Добавить пустое поле формы SPAMbot с помощью: blank validator

## 1.1.1

* Исправить некоторые вещи автоответчика FormIt

* Незначительные изменения в шаблоне контактов для вышеуказанного

## 1.1

* Добавлено: контейнер коллекции и дочерние шаблоны коллекции

* Добавлено: блок строки результатов контейнера коллекции

* Убрать ошибку возвращается в контактной форме

* Обновить форму SimpleSearch для полноты

* Добавлено: блок SimpleSearch «нет результатов»

* Добавлено: блоки разбивки на страницы SimpleSearch

* Обновлен блок контейнера результатов SimpleSearch для исправления ошибки HTML

* Добавлен : Пользовательский драйвер SimpleSearch (я до сих пор не могу найти сообщение на форуме об этом и почему он мне нужен)

* Обновлено: контактная форма теперь принимает глобальные заполнители (см. README)

* Добавлено: шаблон страницы поиска

* Обновлено: Конфигурация SimpleSearch в шаблоне результатов поиска — позволяет выполнять поиск по ТВ и выполнять другие настройки с помощью вызовов фрагментов

## 1.0,1

* Исправить имена блоков pdoMenu в блоке site.head

## 1.0

* Удалить предыдущий транспортный пакет

* Обновить несколько блоков для использования глобальных заполнителей (рекомендуется использовать для этого ClientConfig)

* Обновить фрагменты

* Обновить шаблоны

* Удалить ВСЕ ресурсы — это репо ТОЛЬКО для шаблонов, фрагментов и фрагментов

* Новое — автоответчик FormIt и фрагменты

* Вместо этого предлагайте pdoTools для pdoResources, pdoSitemap, pdoMenu и т. Д.

## 1.0beta

* Новое репо и транспортный пакет beta

.
Оставить комментарий

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *