Modx pdotools: pdoTools / Компоненты / docs.modx.pro

pdoResources / Сниппеты / pdoTools / docs.modx.pro

Сниппет предназначен для вывода списка ресурсов. Является продвинутой заменой для getResources: обладает всеми его возможностями, но лишен недостатков.

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

Параметры

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

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

НазваниеПо умолчаниюОписание
&parentsТекущий ресурсСписок родителей, через запятую, для поиска результатов. Если поставить 0 — выборка не ограничивается. Если id родителя начинается с дефиса, он и его потомки исключаются из выборки.
&depth10Глубина поиска дочерних ресурсов от родителя.
&resourcesСписок ресурсов, через запятую, для вывода в результатах. Если id ресурса начинается с дефиса, этот ресурс исключается из выборки.
&contextОграничение выборки по контексту ресурсов.
&whereМассив дополнительных параметров выборки, закодированный в JSON.
&showHidden1Показывать ресурсы, скрытые в меню.
&showUnpublished0Показывать неопубликованные ресурсы.
&showDeleted0Показывать удалённые ресурсы.
&hideContainers0Отключает вывод контейнеров, то есть, ресурсов с «isfolder = 1».
&select0Список полей для выборки, через запятую. Можно указывать JSON строку с массивом, например {«modResource»:»id,pagetitle,content»}.
&sortbypagetitleЛюбое поле ресурса для сортировки, включая ТВ параметр, если он указан в параметре &includeTVs. Можно указывать JSON строку с массивом нескольких полей, например
{«tvname»:»ASC», «pagetitle»:»DESC»}
. Для случайно сортировки укажите «RAND()»
&sortdirDESCНаправление сортировки: по убыванию или возрастанию.
&setTotal0Отключение выборки total по умолчанию (с версии 2.11.0). Сниппет pdoPage включает его всегда.
&limit10Ограничение количества результатов выборки. Можно использовать «0».
&offset0Пропуск результатов от начала. Необходимо использовать вместе с явно указанным &limit
&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.

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

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

НазваниеОписание
&returnIdsУстановите значение «1», чтобы вернуть строку со списком id ресурсов, вместо оформленных результатов. Все указанные шаблоны игнорируются.
&tpl
Имя чанка для оформления ресурса. Если не указан, то содержимое полей ресурса будет распечатано на экран.
&tplFirstИмя чанка для первого ресурса в результатах.
&tplLastИмя чанка для последнего ресурса в результатах.
&tplOddИмя чанка для каждого второго ресурса (хоть «odd» значит «нечётный», работает для чётных ресурсов).
&tplWrapperЧанк-обёртка, для заворачивания всех результатов. Понимает один плейсхолдер: [[+output]]. Не работает вместе с параметром &toSeparatePlaceholders.
&wrapIfEmptyВключает вывод чанка-обертки &tplWrapper даже если результатов нет.
&tplConditionПоле ресурса, из которого будет получено значение для выбора чанка по условию в &conditionalTpls.
&tplOperatorНеобязательный оператор для проведения сравнения поля ресурса в &tplCondition с массивом значений и чанков в &conditionalTpls.
&conditionalTplsJSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &tplCondition, а в значениях — чанки, которые будут использованы для вывода, если сравнение будет успешно. Оператор сравнения указывается в &tplOperator. Для операторов типа isempty можно использовать массив без ключей.
&outputSeparatorНеобязательная строка для разделения результатов работы.

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

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

НазваниеПо умолчаниюОписание
&fastMode0Быстрый режим обработки чанков. Все необработанные теги (условия, сниппеты и т.п.) будут вырезаны.
&idxВы можете указать стартовый номер итерации вывода результатов.
&totalVartotalИмя плейсхолдера для сохранения общего количества результатов. Параметр setTotal должен быть включен.
&includeContent0Включаем поле «content» в выборку.
&includeTVsСписок ТВ параметров для выборки, через запятую. Например: «action,time» дадут плейсхолдеры
[[+tv.action]]
и [[+tv.time]].
&prepareTVs«1», что означает подготовку всех ТВ, указанных в &includeTVsСписок ТВ параметров, которые нужно подготовить перед выводом.
&processTVsСписок ТВ параметров, которые нужно обработать перед выводом. Если установить в «1», будут обработаны все ТВ, указанные в &includeTVs.
&tvPrefixtv.Префикс для ТВ параметров.
&useWeblinkUrlГенерировать ссылку с учетом класса ресурса, включает плейсхолдер [[+link]].
&toPlaceholderЕсли не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран.
&toSeparatePlaceholdersЕсли вы укажете слово в этом параметре, то ВСЕ результаты будут выставлены в разные плейсхолдеры, начинающиеся с этого слова и заканчивающиеся порядковым номером строки, от нуля. Например, указав в параметре «myPl», вы получите плейсхолдеры [[+myPl0]], [[+myPl1]] и т.д.
&showLog0Показывать дополнительную информацию о работе сниппета. Только для авторизованных в контекте «mgr».

Примеры

Простейший вывод списка дочерних ресурсов документа с идентификатором 1:

[[pdoResources?
    &parents=`1`
    &depth=`0`
    &tpl=`ListRowTpl`
]]

Если используется дополнительное поле image, то вызов изменится следующим образом:

[[pdoResources?
    &parents=`1`
    &depth=`0`
    &tpl=`ListRowTpl`
    &includeTVs=`image`
]]

Если нужно вывести элементы в том же порядке, как они объявлены в параметре &resources

[[pdoResources?
    &resources=`213,34,58,290`
    &sortby=``
    &sortdir=`ASC`
    &tpl=`ListRowTpl`
    &includeTVs=`image`
]]

В чанке ListRowTpl за это поле будет отвечать плейсхолдер [[+tv. image]]

Дополнительная информация

При переносе чанков с getResources, довольно распространённой ошибкой является использование модификатора strtotime, для форматирования даты.

Дело в том, что даты ресурсов и так хранятся в виде timestamp, но конвертируются в нормальные даты из-за использования объектов modResource — так запрограммировано в его свойствах. А потом, для форматирования даты, их нужно перевести обратно в timestamp. Выходит двойная ненужная конвертация.

pdoTools же работает напрямую с базой данных, без создания объектов и конвертации их значений, поэтому в чанк приходит timestamp, который не нужно дополнительно обрабатывать. Вы можете сразу применять модификатор date к значениям:

[[+publishedon:date=`%d.%m.%Y`]]
или
[[+createdon:date=`%Y-%m-%d`]]

Это касается работы с датами ресурсов и в других сниппетах pdoTools.

Общие параметры / pdoTools / Компоненты / docs.modx.pro

Общие параметры для сниппетов, основанных на 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()»
&sortdirASCНаправление сортировки: по убыванию или возрастанию.
&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.
&conditionalTplsJSON строка с массивом, у которого в ключах указано то, с чем будет сравниваться &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.

Разработка сайта MODx в спешке

Когда мы обновляли демо-сайт нашей компании (клиентская площадка), мы поняли, что разработка сайта идет намного быстрее, когда контент и структура уже есть. Мы не просто экономили время, которое обычно тратили на настройку структуры. Очень важно, чтобы структура была на месте. В результате ваша команда разработчиков будет работать примерно в 20 раз быстрее, чем обычно.

В этой статье мы рассмотрим несколько вещей, которые мы делали (неправильно) в прошлом, но которые мы не собираемся делать снова в будущем, особенно не для больших или растущих сайтов.

Разработка сайта MODx — восхитительная работа. По нескольким причинам:

  • «Есть несколько способов сделать это»
  • Нет ограничительного механизма шаблонов, говорящего вам, где что размещать
  • Нет уязвимых «популярных» плагинов, которые сводят вас с ума
  • Никаких попыток взлома пароля (после смены адреса менеджера)
  • Нет сценария, в котором вы должны сказать своему клиенту, что «это просто невозможно»

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

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

Предварительные требования

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

  • getResources
  • получить страницу
  • Навигатор
  • МИГКС
  • Коллекции

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

Что еще нужно знать о
  • Настройка разрешений
  • Настройка отдельного медиа-источника для ваших клиентов
  • Настройка менеджера/формы

Зачем вам об этом знать? Мы обращаемся к тем из вас, кто планирует предоставить своим клиентам «идеальный» продукт, который трудно сломать и который легко поддерживать, даже если он поддерживает сложный веб-сайт.

Делать вещи в правильном порядке

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

  1. Соберите всю информацию, которую вы можете получить о сайте, который вы должны создать
  2. Создайте структуру на сайте, как она будет выглядеть, какой сайт вы хотите иметь, образцы страниц, образцы коллекций и т. д.
  3. Добавьте большинство переменных шаблона и фрагменты сэмплов (да, большинство из них, вы пропустите хотя бы один 🙂 )

После этого можно приступать к работе. Вы можете начать делать шаблоны. Вот как это сделать быстро и элегантно:

  1. Выберите шаблон с наибольшим количеством элементов (скорее всего, страница приветствия)
  2. Начните разбивать шаблон на повторно используемые фрагменты, которые вы можете использовать в других шаблонах (шапка, нижний колонтитул, новости, участники, welcomeSlider и т. д.)
  3. Получить этот  один шаблон и запустить его, собрав всю информацию из связанных ресурсов и т. д.
  4. После этого скопируйте из этого шаблона и повторно используйте уже проделанную работу. Это намного быстрее, когда у вас уже есть все куски, которые можно использовать и извлекать из них.
  5. Когда все будет готово, вы можете приступить к настройке настроек менеджера, разрешений и всего остального. Это тоже работа, которую нужно сделать last , потому что вы можете дублировать свои наборы настройки, что также сэкономит вам много работы.

Теперь ваши шаблоны должны выглядеть чистыми и простыми (как и ваши формы). К настоящему времени большая часть кода шаблона должна умещаться в одном окне. Если все еще есть какие-то огромные блоки HTML, подумайте, не являются ли они чем-то избыточным, принадлежащим chunl.

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

Избегайте «дорогих» фрагментов

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

Кэширование базы данных, переключение на memcache, множество других улучшений, но все это, похоже, не имело значения. Но ждать! Было много реликвий разработки: почти половина наших вызовов сниппетов были некэшированными. Это сделало некоторое улучшение. Но все же страница грузилась около 2 секунд.

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

Это может показаться не таким уж большим, но сэкономит вам половину времени рендеринга. Либо $chunk1, либо $chunk2 будут оставлены, заключенные в две дополнительные скобки, что приведет к тому, что MODx будет разрешать только результат, а не рендерить каждый отдельный фрагмент.

Если вы еще не делаете вышеперечисленное, возможно, вы все еще используете фрагмент «Если». Удалите его и используйте выходные фильтры. Если очень медленно.

getResources, getPage, WayFinder

…все они могут быть заменены пакетом под названием «pdoTools». Использование эквивалентов pdoTools для упомянутых выше сниппетов ускорит вашу страницу в среднем в 10 раз.

Это делается для того, чтобы избежать ненужных вызовов. Таким образом, этот подход также имеет некоторые недостатки. Поскольку pdoTools использует xpdo напрямую вместо использования getCollection, это также означает, что он обходит безопасность MODx, поэтому разрешения и все, что в них нуждается (что не так на большинстве сайтов, потому что большинство сайтов не имеют большого количества логики или разных пользователей). -groups) необходимо активировать вручную. Однако есть флаг под названием &checkPermissions, чтобы включить их, если они вам понадобятся.

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

Другие отличия:

includeTVs : это не флаг 0 или 1 в pdoResources, а список конкретных TV, которые нужно захватить, что делает его более тонким и быстрым, чем getResources

родителей : окончательно согласовано. pdoMenu не использует startId вместо родителей, а флаги tpl немного отличаются. Кроме того, это замена Wayfinder. Поскольку вы, скорее всего, рендерите меню на ВСЕ ваших страниц, включая нижний колонтитул и другие меню, изменение этого параметра сильно повлияет на производительность вашего сайта.

pdoPage также более удобен и больше не нуждается в этом неортодоксальном синтаксисе.

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

pThumb, resizer, getCache, MinifyX, autoFixImageSize

Существует также множество других фрагментов кода, которые заменяют «дорогие» фрагменты кода, которые увеличивают загрузку страницы и в большинстве случаев просто неправильно настроены (или отсутствуют). Многие люди забывают изменить размер фоновых изображений, изображений слайдера и общего контента, и, что более важно, сделать так, чтобы pthumb отображал их с качеством 85% и принудительно форматировал их в jpg, чтобы избежать bmp, tiffs и pngs для огромных изображений. Это значительно уменьшит размер вашей страницы. Просто прочитайте, что делают другие фрагменты.

Общие улучшения

На самом деле это не относится к улучшениям MODx, но это не меняет того факта, что эти факторы улучшают производительность — очень сильно.

MinifyX не может объединить все Javascript и CSS, иногда это приводит к путанице. Но вы можете. После того, как сайт будет готов, вы можете использовать Google Closure Compiler, чтобы загрузить только ОДИН минимизированный файл javascript вместо загрузки множества отдельных файлов.

Уменьшите размеры изображений, уменьшите размер файлов CSS и старайтесь придерживаться приведенных выше правил.

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

Итог

Избегайте getResources, избегайте WayFinder, замените phpThumbof на pthumb, настройте кэширование базы данных, замените большую часть того, что вы используете, эквивалентом pdoTools и начните делать вещи в правильном порядке.

Как сказал бы Монк:

Вы поблагодарите меня позже.
Приложение

Для вашего личного развлечения, вот несколько вещей, где мы пошли не так:

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

— Оказывается, текучесть кадров слишком высока, чтобы назвать кого-либо из команды, фотографий не существует, а рекомендации/портфолио не нужны, потому что они не хотят, чтобы кто-либо знал, кто их клиенты. Большинство из них являются конкурентами. Возможно, у нас была возможность сначала спланировать структуру сайта. Мы как-то пропустили.

#2 Один и тот же клиент предоставляет нам много информации. Мы исходим из шаблонов, которые у нас уже есть, и начинаем исправлять вещи. Наряду с этим большинство настроек менеджера, потому что клиенты хотели начать поддерживать свои продукты, пока мы имеем дело с шаблонами.

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

Примерно через шесть недель клиенты спрашивают: «Возможно ли вообще вести список общей информации вместо того, что мы только что добавили». — в этот момент вы можете захотеть убить своего клиента. Но с другой стороны, это наша вина. Мы должны были сначала собрать всю эту информацию, и мы должны были сделать предложение о том, как сохранить и представить эту информацию.

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

Есть еще много всего, и мы уверены, что это еще не все. Но вы видите, к чему мы клоним.

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

migxMultiLang — это дополнение от bruno17, впервые выпущенное 14 сентября 2014 г.

Описание пакета

Этот MODX Revolution Extra представляет собой простое в использовании многоязычное решение.

Все переводы и языки — переключение осуществляется на одном и том же ресурсе.

Нет контекстов или языка — нужны папки.

Специальный файл .htaccess не требуется

Работает с FURL и выключено .0 pl (проверено только с этой версией)

http://modx.com/extras/package/pdotools

для получения дополнительной информации см.: https://github.com/Bruno17/migxmultilang

Инструкции по использованию/установке

Установите пакет с помощью управления пакетами MODX

Измените системные настройки

pdoFetch.class на: pdotools.mmlfetch

Убедитесь, что таблицы созданы и обновлены, выполнив следующие шаги:

Перейдите на MIGX — CMP на вкладку «Диспетчер пакетов»

введите имя пакета: migxmultilang

перейдите на вкладку «создать таблицы» и нажмите «создать таблицы»

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

перейдите на вкладку «Добавить поля» и нажмите кнопку «Добавить поля»

перейдите на вкладку «Обновить индексы» и нажмите кнопку «Обновить индексы»

см. также: https://github.com/Bruno17 /migxmultilang

Сведения

Разработчик(и)
бруно17
Выпущено
14.09.2014
Первое появление
14.09.2014
Лицензия
GPLv2
Поддерживаемые базы данных
MySQL
Минимальные требования MODX
2,2

Версии migxMultiLang

Поставщик Подпись Выпущено
MODX.

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

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