Содержание
Как получить parent parent’a или дедушку MODX revo
Тут возникла проблема: как получить парент парента (parent parent’a) или дедушку ресурса или прадедушку. Ну и разумеется решить эту задачу без всяких сниппетов. Оказалось это можно решить довольно просто. Первое это ставим PDOTools и вводим такой код:
[ [#[ [#[ [*id]].parent]].parent]]
Это и есть наш дедушка. Точнее его id, ну а с ним то уж можно делать все что угодно.
Если нужно не id а поля там всякие есть еще один вариант:
[ [pdofield? &top=`2`]]
где &top Выбирает родителя указанного &id на уровне &top. Уровень отсчитывается от начала контекста. Ниже остальные параметры pdofield:
Параметр | По умолчанию | Описание |
---|---|---|
&id | Текущий документ | Идентификатор ресурса. |
&field | pagetitle | Поле ресурса. |
&top | Выбирает родителя указанного &id на уровне &top. | |
&topLevel | Выбирает родителя указанного &id на уровне &topLevel от корня контекста. | |
&default | Указывает поле ресурса, которое вернётся, если &field окажется пуст. Более быстрый аналог фильтра :default= | |
&output | Указывает строку, которая вернётся, если и &default, и &field оказались пусты. | |
&toPlaceholder | Если не пусто, сниппет сохранит все данные в плейсхолдер с этим именем, вместо вывода не экран. |
Ну и еще один пример использования:
[ [pdoField? &id=`[ [*id]]` &field=`longtitle` &top=`2` ]]
Комментарии (2)
GoogleSheets / Импорт, Экспорт / Дополнения MODX / modstore.pro
Версия
1.6.5-pl
Дата выпуска
23.09.2021
Внимание, этот компонент требует версию PHP
5.6
или выше!
Если ваш сайт использует PHP ниже требуемого, установка этого
дополнения может его сломать.
Внимание, этот компонент требует версию MODX не ниже
2.6
!
Компонент для импорта и экспорта ресурсов, товаров minishop2, заказов, пользователей, а также migx таблиц.
Возможность менять данные на лету используя события. Более подробно о читайте в документации.
Интеграция
- ms2Gallery2
- msOptionsPrice2
- msProductRemains
- SEO Tab
- SEO Pro
Документация:
Теги: import, export
- Исправлено: ошибки
- Исправлено:
экспорт больших данных
создание модификаций при импорте
- Исправлено: ошибки
- Исправлено: экспорт остатков
- Улучшен импорт опций товара
- Исправлена ошибка при импорте опций товара
- Исправлена ошибка передачи пустого значения для изображения при импорте
- Исправлен сниипет GoogleSheetsFront для крона
- Добавлены параметры query и where в сниппет GoogleSheets
- Исправлен импорт поля categories
- Добавлена синхронизация по любому полю
- Добавлено событие: gsOnAfterExportValues
- Исправлено получение поля address_properties в плагине
- Исправлено сообщение после экспорта
- Добавление TV в экспорт категории
- Исправлен экспорт изображений
- Исправлена ошибка поиска в таблице
- Добавлены события: gsOnAfterImportValues, gsOnAfterExportValues
- Добавлено: копирование настроек
- Поправлен экспорт заказов
- Поправлен импорт/экспорт migx поля
- Исправлен redirect_uri при авторизации
- Обновлена авторизация
- Исправлен экспорт товаров
- Решена проблема с ограничением при экспорте
- Добавлено: создание опций товара
- Исправлен импорт товаров и опций
- Удаление старых изображений в галереи товара(msGallery) при импорте
- Добавлена ссылка для авторизации
- Обновлен сниппет GoogleSheets
- Исправлено удаление данных
- Исправлена ошибка импорта при создании товара
- Исправлена ошибка при экспорте картинок
- Исправлена ошибка при инициализации класса GoogleSheets
- Исправлены сниппеты
- Исправлена функция hasError
- Улучшен экспорт/импорт
- Исправлен плагин GoogleSheetsSyncOrder
- Добавлены события: gsOnBeforeGetVendors, gsOnGetVendors, gsOnBeforeGetClients, gsOnGetClients
- Добавлена возможность получение данных через js
- Исправление ошибок
- подключение пользователей в getOrders
- убран parent c дефолтных полей
- исправлен разделитель для опций модификации товара
- исправлен импорт по артиклу товара
- Добавлены события
- Импорт/Экспорт MIGX полей
- Импорт/Экспорт msVendor(производители товара minishop2)
- Импорт
- переделан импорт
- добавлен импорт категорий minishop2(msCategory)
- возможность пропускать первую строку
- Экспорт
- добавлен экспорт покупателей minishop2(msClient)
- изменены параметры заказов
- добавлены параметры template_name, vendor_name(minishop2)
- возможность использовать поля экспорта как заголовки
- Интеграция
- ms2Gallery2
- msOptionsPrice2
- msProductRemains
- SEO Tab
- SEO Pro
- Поправлена синхронизация
- Добавлена сортировка грида
- Добавлен экспорт/импорт опций товара
- Исправлены ошибки при создании заказа
- Исправлена ошибка экспорта tv полей
- Добавлен экспорт категорий(msCategory)
- Добавлена фильтрация по условию category_id/category_name
- Округление времени выполнения операции
- Исправление ошибок при экспорте товаров
- Исправлен баг с кешем при авторизации
- Добавлена кнопка сброса авторизации
- Переделан импорт(исправлена синхронизация)
- Исправлена авторизация
- Исправлены ошибки экспорта/импорта
- Исправлен баг импорта при отсутствии условий
- Пропуск пустой строчки в таблице
- Улучшен импорт/экспорт
- Добавлена поддержка TV для экспорта
- Исправление ошибки при экспорте в режиме Update
- Добавлен сниппет GoogleSheetsFront — для запуска экспорта/импорта с фронта
- Добавлен файл action.php для запуска экспорта/импорта по ajax
- Добавлены условия для Импорта и Экспорта
- Экспорт в режиме Update теперь пропускает 1 строку в таблице
- Рефакторинг кода
- Исправлен лексикон import
- Синхронизация ресурсов/товаров/пользователей
- Удалены системные настройки для создание заказов
- Синхронизация заказов minishop2
- Добавлено описание для системных настроек
- Обновлен хук GoogleSheetsSaveForm
- Добавлена поддержка TV
- Автоматически создание категорий, если указан родитель.
- Добавлена поддержка мультикатегорий
- Добавлены поля для экспорта: parent_name, category_name
- Добавлена поддержка заголовков для полей импорта: parent, category
- Добавлена поддержка галереи minishop2
- Исправлены ошибки при импорте
- Добавлены поля производителя товара для экспорта (vendor.name, vendor.logo, vendor.country…)
- Добавлена проверка списка полей для импорта
- Добавлена проверка уникального поля при импорте
- Добавлено поле ‘список полей для импорта’
- Удаление ресурсов/товаров через импорт
- Добавлен экспорт ресурсов/товаров/заказов/пользователей
- Добавлен тег ignore для пропуска ячейки при сохранении заказов/форм
- Добавлены свойства товара при сохранении заказа
- Добавлены доп. поля к заказу по инструкции https://modx.pro/solutions/10040
- Улучшен модификатор table
- Добавлены новые параметры для сниппета GoogleSheets: fields,ignore
- Добавлен плагин для сохранение заказов minishop2
- Добавлен импорт товаров minishop2
- Добавлены сообщение о кол-во обновленных и созданных ресурсов
- Добавлены настройки импорта
- Добавлены лексиконы
- Добавлен модификатор table
- Добавлена защита дополнения
Шпаргалка по Fenom | BUSTEP.RU
Описание по подключению плейсхолдеров на страницу
информация с официальной документации pdotools
MODX | Fenom | Описание |
---|---|---|
[[+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 21870
MODX — Как вывести популярные статьи
Урок, на котором рассмотрим, как с помощью сниппетов pdoTools создать виджет, отображающий на сайте 5 самых популярных статей за последние 7 дней.
Описание виджета «Популярные статьи»
Виджет «Популярные статьи» предназначен для отображения на сайте 5 самых просматриваемых страниц за последние 7 дней.
Визуально данный виджет выполним в виде панели (компонента panel) front-end фреймворка Twitter Bootstrap. Содержимое панели организуем в виде нумерованного списка статей в порядке их убывания по количеству просмотров за неделю.
Необходимые компоненты
Рассматривать создание блока «Самое популярное» будем для сайта, в котором статьи организованы на базе компонента Tickets. По умолчанию просмотры тикетов в компоненте Tickets ведутся только для зарегистрированных пользователей. Для того чтобы просмотры регистрировались и для незарегистрированных посетителей, необходимо включить опцию «tickets.count_guests» в настройках.
Кроме компонента Tickets, потребуется ещё компонент pdoTools. Данный компонент, содержит хороший набор сниппетов. В этой статье будем использовать из этого набора только сниппет pdoResources.
Таблицы TicketView и Ticket
Для создания запросов понадобятся 2 таблицы: TicketView и Ticket.
Первая таблица (TicketView) содержит записи о просмотренных пользователями тикетах. Она состоит из четырёх полей, но для выполнения запроса понадобятся только 2. Первое поле — это parent
, оно хранит id
просмотренного пользователем тикета. Второе поле — это timestamp
, оно предназначено для хранения даты просмотра.
Вторая таблица (Ticket) будет основной. Она понадобится для того чтобы выбрать из неё необходимые ресурсы для которых будем подсчитывать количество просмотров.
Взаимосвязь между таблицами представим на следующей схеме:
Разработка виджета «Популярные статьи»
Создание виджета осуществим за 2 шага:
- Напишем сниппет getDateWeekAgo, который будет возвращать дату, которая была 7 дней назад.
- Выберем и выведем необходимые ресурсы с помощью сниппета pdoResources и getTicket. Сравним время и ресурсы, затрачиваемые ими на обработку.
Создание сниппета getDateWeekAgo
Для создания сниппетов необходимо открыть в левой панели администрирования вкладку «Элементы» и нажать на значок «+» напротив надписи «Сниппеты». В открывшейся странице ввести следующее:
Выборка записей с помощью сниппета pdoResources
В качестве 1 способа выберем и выведем записи с помощью сниппета pdoResources. Для этого необходимо открыть нужный шаблон или чанк, и поместить в него следующий код:
<section> <div> <h5> <i></i> <span title="Самые популярные статьи и уроки за последние 7 дней">Популярные статьи</span> </h5> </div> <div> [[!pdoResources? &loadModels=`tickets` &class=`Ticket` &leftJoin=`{ "TicketView": { "class": "TicketView", "on": "Ticket.id = TicketView.parent" } }` &parents=`4` &where=`{"TicketView.timestamp:>":"[[!getDateWeekAgo]]"}` &select=`{ "Ticket": "Ticket.id as id, Ticket.uri as uri, Ticket.pageTitle as pagetitle", "TicketView": "COUNT(TicketView.parent) as countviews" }` &hideContainers=`1` &groupby=`Ticket.id` &sortby=`{"countviews":"desc"}` &tpl=`@INLINE <p><span>[[+idx]]</span> <a href="[[+uri]]">[[+pagetitle]]</a> <span><i></i><span title="Количество просмотров за последние 7 дней"> [[+countviews]]</span></span></p>` &limit=`5` ]] </div> </section>
Выборка записей с помощью сниппета getTickets
В качестве 2 способа рассмотрим выборку данных и их отображение с помощью сниппета getTickets.
<section> <div> <h5> <i></i> <span title="Самые популярные статьи и уроки за последние 7 дней">Популярные статьи</span> </h5> </div> <div> [[!getTickets? &leftJoin=`{ "TicketView": { "class": "TicketView", "on": "Ticket.id = TicketView.parent" } }` &parents=`4` &where=`{"TicketView.timestamp:>":"[[!getDateWeekAgo]]"}` &select=`{ "Ticket": "Ticket.id as id, Ticket.uri as uri, Ticket.pageTitle as pagetitle", "TicketView": "COUNT(TicketView.parent) as countviews" }` &hideContainers=`1` &groupby=`Ticket.id` &sortby=`{"countviews":"desc"}` &tpl=`@INLINE <p><span>[[+idx]]</span> <a href="[[+uri]]">[[+pagetitle]]</a> <span><i></i><span title="Количество просмотров за последние 7 дней"> [[+countviews]]</span></span></p>` &limit=`5` ]] </div> </section>
Поиск нужных ресурсов вышепредставленные сниппеты осуществляют с помощью параметра &parent
. Т.е. для того чтобы настроить виджет «Популярные статьи» на свой сайт, Вам достаточно изменить значение 4 на необходимое.
Сравнение результатов работы сниппетов
Как видно из результатов логов, сниппет pdoResources выбирает данные намного быстрее. Это связано с тем, что в запросе участвуют только нужные таблицы. В то время как сниппет getTickets дополнительно подключает ещё классы (таблицы) TicketsSection, modUser и modUserProfile.
Интервью с Райаном Трэшем из MODx CMS
MODx CMS постоянно набирает популярность на протяжении многих лет, и мы подумали, что было бы интересно пообщаться с основателем этой замечательной CMS и узнать его мысли о проекте, о том, как он начался и где он будет развиваться. Читать дальше!
Расскажите немного о себе и своем прошлом.
Я вырос в Тайлере, маленьком городке на востоке Техаса, с моими родителями и младшим братом. В 1994 году я переехал в Даллас, штат Техас, где поступил в колледж, чтобы получить степень по бизнесу в SMU.Спустя годы после окончания учебы я был настроен на свидание вслепую с великолепной женщиной, которую мне удалось убедить выйти за меня замуж, и вот уже 11 лет. Мне повезло, что у меня есть невероятно поддерживающий партнер, который при необходимости держит безумного предпринимателя более 20 лет в очереди. У нас есть дочь (4), сын (8) и наш новый щенок, который приехал на это Рождество.
В профессиональном плане я пришел из мира печати, открыв цех допечатной подготовки и производства рекламы, которым я владел около десяти лет. Хотя мне нравится потрясающая типографика, пустое пространство и красивые пропорции, я определенно не скучаю по миру CMYK.
Люди часто спрашивают, как мир печати трансформировался в бизнес программного обеспечения CMS. Мое первое знакомство с программированием произошло, когда я начал изучать мэйнфреймы в 4-м классе на летнем уроке для детей в соседнем общественном колледже. Хотя я, конечно, не разработчик в полном смысле этого слова — тем более, что CSS действительно имеет для меня смысл, — я знаю, чего можно достичь. Я всегда был ведущим специалистом в своем бизнесе, и, начиная с середины 90-х, я начал копаться в том, что тогда было PHP-FI, в моем цехе допечатной подготовки.
Моим первым опытом открытого исходного кода была osCommerce, в которой я некоторое время участвовал в этом сообществе. Я последовал за этим, став частью первых 10 или около того первых людей с ZenCart, баловался с Mambo и Etomite и, наконец, начал то, что оказалось MODX. Это, конечно, не было планом, но это была моя карьера на протяжении последних семи с лишним лет.
Как появился MODX?
В 2004 году я искал CMS, которая позволила бы мне избежать распространенных тогда макетов на основе таблиц и стилей сайтов с упрощенной разметкой и CSS.Тогда имела значение пропускная способность, и я перенес osCommerce для вывода семантической разметки и увидел огромное сокращение времени рендеринга; с тех пор я был продан.
Мне также нужна была платформа, которая упростила бы создание контента, защищенного входом в систему, чтобы мои клиенты могли брать и использовать для управления своими сайтами, не ломая ничего, и что они могли бы изучить в течение часа. Излишне говорить, что его не существовало. Таким образом, я объединился с небольшой группой людей, включая Рэймонда Ирвинга и Джейсона Кауарда, у которых были похожие цели, и мы начали свой путь к достижению некоторых очень конкретных целей:
- Предоставьте простую систему шаблонов, в которой использовались стандартные (X) HTML / CSS, которые никоим образом не препятствовали дизайну или структуре сайта.
- Позвольте пользователям быстро создавать контент сайта, защищенный логином.
- Создайте разумный, надежный и расширяемый API, который разработчики могли бы использовать для расширения или переопределения платформы без необходимости взламывать ядро.
- Позвольте людям организовать контент логичным и понятным образом.
- Избегайте извилистых или длительных кривых обучения, характерных для многих других CMS.
- Работает одинаково хорошо как для базовых маркетинговых веб-сайтов, так и для более сложных приложений.
Мы впервые выпустили MODX в мир в 2005 году, и было очень приятно наблюдать, как люди находят отклик в нашей работе. Наша первая награда Packt Award за самую многообещающую CMS с открытым исходным кодом была вручена в 2007 году, что стало большим стимулом для превращения страсти в профессию.
В 2010 году мы основали компанию вокруг MODX, чтобы уделять ей все свое внимание. В прошлом году я нанял нашего генерального директора, чтобы он сосредоточился на стратегических вопросах бизнеса, освободив остальную часть команды, чтобы сосредоточиться на трех ключевых областях: сообщество, MODX Complete (поддержка и обслуживание для бизнеса) и MODX Cloud, что станет просто невероятным платформу, о которой я хотел бы поговорить с вами подробнее позже.
Мы с нетерпением ждем встречи с множеством людей на выставке CMS Expo в этом году, которую мы считаем нашим первым крупным запуском. Это довольно забавно, учитывая, что у нас уже есть сотни тысяч сайтов, работающих на MODX, отличные партнеры и отличная популярность.
Почему название MODX?
МОДУЛЬНЫЙ и расширяемый. Или что-то в этом роде… на самом деле это было рабочее название, которое изначально планировалось называть Tattoo CMS с лозунгом «Сделай свой знак» и логотипом, напечатанным вручную, но оно было отложено, и прозвище MODX прижилось.Нам это нравится сейчас.
Каковы отличия между Evolution и Revolution для тех, кто не знает?
MODX Revolution, сокращенно «Revo», — это новая, полностью переписанная версия нашей классической кодовой базы. Revo сохранил те же парадигмы, что и MODX Evolution, но выполнялся в объектно-ориентированном PHP с использованием уровня базы данных, который позволяет MODX также работать на Microsoft SQL Server. Это дает разработчикам возможность переопределять и расширять Revo для достижения точной функциональности, необходимой для любого проекта, без необходимости «взлома» ядра, блокирующего обновление.
Вы не только получаете как настраиваемые функции, так и возможность обновления до следующей версии, но эта новая версия также предлагает больший контроль, возможность создавать сложные приложения и интеграции, которые были бы невозможны с Evo. Например, с Revo вполне возможно масштабирование до сотен миллионов просмотров страниц. Вы можете расширить слой кэширования для использования Memcache или Membase, сессий для использования Redis или какой-либо другой высокопроизводительной разновидности новейших технологий.
MODX Evolution идеально подходит для небольших веб-сайтов, в которых доминирует маркетинг, или для недорогого общего сервера с ограниченными ресурсами без слишком большого количества страниц. Revolution по-прежнему может использоваться для небольших сайтов, но позволяет значительно более сложную разработку, интеграцию и практически неограниченный контент. MODX Revolution находится в центре внимания нашей деятельности по разработке, однако мы продолжим предоставлять рекомендации, исправления и выпуски для Evolution по мере необходимости.
В чем уникальность MODX?
MODX позволяет невероятно легко использовать любой дизайн, который только можно придумать для своего веб-сайта, и делать это без необходимости кодирования — фактически, мы можем с уверенностью утверждать, что MODX поддерживает HTML7 и CSS5 уже сегодня.Он делает это, отделяя внешний вид сайта от того, как он функционирует. Пользователи любого уровня подготовки считают, что MODX легко и уверенно публиковать свой контент. Что еще больше отличает его, так это то, что интерфейс управления MODX может быть полностью настроен для пользователей и адаптирован к контенту. Это гарантирует, что люди, которые ежедневно используют MODX для управления сайтом, могут легко использовать этот инструмент и при необходимости быстро обучать других.
Что, по вашему мнению, является основной причиной, по которой люди используют его в качестве своей CMS?
MODX действительно дает возможность творческим людям иметь 100% -ный контроль с точностью до пикселя над тем, как выглядят сайты, без необходимости писать ни единой строчки на PHP.Вы можете использовать любой вариант HTML / CSS / JS, который хотите, и вам не нужно беспокоиться о том, чтобы погрузиться в тематическую систему, смешанные шаблоны / код или разобраться с таксономиями или ограниченными категориями. У нас также есть отличный послужной список в области безопасности, с момента создания очень мало критических проблем.
Можете ли вы указать какие-либо реализации значительного размера, о которых вы знаете?
Complex.com в настоящее время обслуживает около 100 миллионов просмотров страниц в месяц и приближается к 150 миллионам к декабрю 2012 года.MODX.com также обслуживает довольно небольшой объем трафика с тонной сложной серверной инфраструктурой, поддерживающей все наши сайты. Мы твердо убеждены в том, что наш главный маркетинговый сайт должен работать с нашим программным обеспечением, и постоянно работаем над тем, чтобы сделать его лучшим решением.
Какой сайт, по вашему мнению, лучше всего использует возможности MODX?
MODX.com имеет множество пользовательских интеграций и компонентов. Наше настраиваемое приложение единого входа привязано к хранилищу Mongo DB. Наши форумы построены с использованием MODX API и обслуживают десятки тысяч пользователей, опубликовавших около полумиллиона сообщений.Для новостей, объявлений и ведения блогов мы используем наш родной блог Extra, называемый «Статьи», и у нас есть транзакции электронной коммерции, привязанные к FoxyCart и Recurly.
У нас также есть внутренняя инфраструктура для платформы лидеров MODX, которую мы тестировали в течение нескольких месяцев, внутренняя панель управления, живая карта, показывающая, когда пользователи что-то загружают или публикуют на форумах (или что-то еще, что может их переместить вверх по таблице лидеров), интеграция с Redmine для управления продуктами и многое другое.Мы также работаем над программой Certified MODX Professional, которая будет использовать еще один MODX Extra для обработки экзаменов и динамического создания сертификатов об окончании в формате PDF.
Есть ли коммерческое предложение CMS? Как организация привлекает финансирование?
Программное обеспечение
MODX является открытым исходным кодом и всегда будет оставаться бесплатным для загрузки и использования кем угодно — мы на 100% привержены принципам открытого исходного кода. Компания MODX предлагает поддержку и обслуживание под ключ после запуска, а также профессиональные услуги, работая совместно с партнерами MODX и крупными организациями для завершения любого этапа проекта на основе MODX.
Позже в этом году мы запустим новую платформу для веб-разработчиков, основанную на MODX Revolution, под названием «MODX Cloud». Это кардинально меняет правила игры для людей, которые создают веб-сайты или управляют ими, особенно для творческих или маркетинговых организаций.
Кто основные участники проекта? Не могли бы вы немного рассказать о них?
Джейсон Кауард и Шон МакКормик выполнили большую часть разработки MODX Revolution, и они оба работают на MODX. В сообществе есть сотни участников, которые сообщают об ошибках и отправляют запросы на вытягивание в наш репозиторий GitHub.На ум сразу приходят Боб Рэй, автор MODX: The Official Guide, Сьюзан Отвелл из Израиля и Стефан Булар из Франции, которые значительно улучшили интерфейс внутреннего менеджера.
Для MODX Evolution русское и японское сообщества проделывают огромную работу по поддержке программного обеспечения. Майк Шелл, еще один из наших старших разработчиков MODX, проверяет вклад и занимается выпуском.
Если люди хотят участвовать в проекте, как они могут это сделать?
Есть много способов поучаствовать в MODX для людей любого уровня подготовки и из любого места.Самое простое, что люди могут сделать, чтобы внести свой вклад в MODX, — это сообщить нам, когда что-то нужно исправить или улучшить, или запросив новые функции в нашем трекере проектов. Это не ограничивается только нашим программным обеспечением. Если люди находят проблемы на наших форумах, в документации или где-нибудь на сайте modx.com, нам нравится слышать об этом, чтобы мы могли улучшить его. В этой связи мы всегда можем воспользоваться помощью в улучшении нашей документации. Разработчики и дизайнеры могут вносить свой код через GitHub. Чтобы принять участие в написании кода, не забудьте сначала подписать лицензионное соглашение с участником.
Форумы сообщества MODX с более чем 38 000 пользователей — это гостеприимное, позитивное и благоприятное место для изучения MODX. Ответы даже на самые простые вопросы — невероятный способ освоить MODX, подружиться и найти соавторов. Большая часть команды MODX привлекла наше внимание с форумов.
Наконец, в прошлом году было проведено более десятка встреч по всему миру. Мы стремимся к экспоненциальному росту нашего международного взаимодействия в этом году, и мы собираемся посвятить этому время и деньги.Для пользователей MODX это отличный способ поделиться опытом и найти соавторов.
Заключительные мысли или напутственные комментарии.
Спасибо, что дали нам возможность поговорить о MODX. Мы прячемся у всех на виду уже несколько лет, и пора это изменить!
Я думаю, что действительно особенным в MODX по сравнению с большинством проектов с открытым исходным кодом является то, что мы очень дружелюбны к коммерческим интересам. Другими словами, хотя мы и являемся ярыми сторонниками открытого исходного кода, мы определенно не фанатики.Фактически, я написал об этом сообщение в блоге некоторое время назад. Мы, безусловно, поощряем людей лицензировать свою работу под лицензией на ОС в MODX, но мы также не будем обвинять их, если они решат поступить иначе.
Другими словами, мы не рассматриваем открытый исходный код как предложение по принципу «все или ничего». Если вы не изменяете основное приложение или не используете общедоступные API для создания чего-то крутого поверх MODX — например, потрясающего шаблона или дополнения, улучшающего работу MODX, — мы думаем, что вы сможете лицензировать это, как хотите.Мы не думаем, что лицензия GPL MODX должна «заразить» все, что касается ее, и, в свою очередь, диктовать лицензию, по которой вы выпускаете свой IP. Таким образом, мы находимся в прекрасном положении для создания невероятной коммерческой экосистемы на основе дополнений и тем MODX, которая невероятно удобна для разработчиков и дизайнеров. Подробнее об этом в конце 2012 года!
Настройки
— Фред
Наборы опций
могут иметь глобальные настройки для таких вещей, как источники мультимедиа и управления, должны ли происходить динамические асинхронные вызовы XHR.Визуальные настройки, отображаемые в браузере, также могут иметь подмножества, которые служат для упорядочивания вещей.
Глобальные настройки
Следующее управление индивидуальными настройками и группировкой для элемента на странице, управляемой Фредом.
пульт
Установите значение true
, чтобы запросы XHR отображали элемент через парсеры Twig и MODX. При изменении настроек элемента также выполняется повторный рендеринг как с помощью парсера Twig, так и MODX. Это означает, что вы можете иметь динамический контент, который ссылается на другие страницы в пределах страницы Fred, используя фрагменты MODX.По умолчанию: ложь
.
кэш, вывод
Это кэширует вывод элемента в статический HTML, если установлено значение true
и когда предыдущий глобальный параметр remote
также установлен на true
.
медиаисточник
Имя медиаисточника для использования в Finder. Несколько имен можно передавать через запятую ,
.
imageMediaSource
Имя медиаисточника для использования в полях изображения. Несколько имен можно передавать через запятую ,
.Этот параметр переопределяет mediaSource
.
Панель инструментов
Плагины Включить
Список подключаемых модулей панели инструментов для включения элементов.
Панель инструментов
Плагины Исключить
Список подключаемых модулей панели инструментов, которые нужно отключить для элементов.
Настройки
Параметры состоят из массива объектов JSON и групповых объектов, которые предоставляют элементы управления конфигурацией для элементов. Параметры могут импортировать подмножества параметров с помощью объекта fred-import
.
Параметры настроек
Следующие свойства применяются ко всем настройкам, независимо от типов ниже:
-
name
— Имя настройки, может использоваться как переменная Twig -
label
— Метка настройки, отображается на панели «Параметры элемента» -
значение
— значение по умолчанию -
тип
— Тип настройки, см. Следующий раздел
Примечание: для наилучшего взаимодействия с конечным пользователем рекомендуется установить значение по умолчанию, чтобы у конечных пользователей была отправная точка для работы.В противном случае это может сбивать с толку из-за наличия пустого элемента, который может не соответствовать изображению предварительного просмотра при перетаскивании на страницы.
Доступные типы настроек
Следующие типы настроек используются для настройки элементов в Fred.
текст
- Однострочный элемент HTML
- Может иметь любое текстовое значение
текстовое поле
- Многострочный HTML
элемент
- Может иметь любое текстовое значение
- Типовые характеристики:
-
rows
— количество отображаемых строк; По умолчанию: 4
выбрать
- Элемент списка HTML
- Поддерживает только одно значение выбора
- Типовые характеристики:
-
options
— Объект со значением: label
properties
переключатель
- чекбокс истина / ложь
- возвращает логическое
истинное
илиложное
цветов часы
- Визуальный выбор цвета, выбор из предопределенных значений
- Типовые характеристики:
- варианты
- Массив цветов; Пример:
[«светло-коралловый», «красный», «черный»]
- может быть строкой
-
значение
— значение, переданное Twig для цвета, которое может быть любым -
color
— отображаемый цвет для образца -
colorAsClass
— если установлено значениеtrue
, значениеcolor
будет добавлено как класс к опции, вместо установки в качестве фона -
label
— произвольная метка для свотча -
width
— ширина варианта цвета, по умолчанию1
Цвет
- Массив цветов; Пример:
палитра цветов
- Палитра цветов, поддерживающая произвольные определения цвета, включая значения RGB, HSL или Hex с дополнительной непрозрачностью
- Типовые характеристики:
-
showAlpha
— Логическое значение для отображения ползунка альфа-прозрачности; По умолчанию:true
-
варианты
— Массив цветов; Пример:[«светло-коралловый», «красный», «черный»]
слайдер
- Ползунок ввода чисел
- Типовые характеристики:
-
мин
— ТРЕБУЕТСЯ : минимальное значение ползунка -
max
— ТРЕБУЕТСЯ : максимальное значение ползунка -
tooltipDecimals
— количество десятичных знаков, отображаемых во всплывающей подсказке ползунка; По умолчанию: 0 -
шаг
— Число для увеличения значения ползунка; По умолчанию: 1
стр.
- MODX Выбор страницы
- Значение возвращается как объект в формате:
{"id": 1, "url": "fred.html "}
- Refrencing ID или URL только выполняется с помощью синтаксиса точки:
{{page-name-example.id}}
- Типовые характеристики:
-
clearButton
— Если установлено значениеtrue
, в поле ввода отображается кнопкаx
, позволяющая пользователю удалить любое установленное значение -
ресурсы
— Если установлено, будет отображаться только ресурс с указанными идентификаторами; Значение может быть строкой с запятой в качестве разделителя или массивом -
Родители
— Если задано, будут отображаться только ресурсы от этих родителей (включая самих родителей); Значение может быть строкой с запятой в качестве разделителя или массивом -
глубина
— Глубина поиска детей по указаннымродителям
; По умолчанию: 1
файл
- Средство выбора файлов
- Типовое свойство:
-
mediaSource
— Дополнительное имя медиаисточника для использования, которое переопределяет глобальную настройку верхнего уровня`mediaSource`
папка
- Сборщик папок
- Типовое свойство:
-
mediaSource
— Дополнительное имя медиаисточника для использования, которое переопределяет глобальную настройку верхнего уровня`mediaSource`
-
showOnlyFolders
— Если установлено значениеtrue
, в elFinder будет видна только папка; По умолчанию: false
изображение
- Выбор изображения
- Типовые характеристики:
-
showPreview
— Если установлено значениеfalse, предварительный просмотр
не будет отображаться под вводимым текстом -
mediaSource
— Дополнительное имя медиаисточника для использования, которое переопределяет верхний уровень`imageMediaSource` глобальный параметр
тегер
- Позволяет пользователям выбирать из предустановленных тегов тегов
- Типовые характеристики:
-
autoTag
— true / false, чтобы показать / скрыть автоматический тег -
hideInput
— true / false, чтобы показать / скрыть ввод -
group
— идентификатор группы Tagger для использования -
limit
— Максимальный лимит количества тегов, которые можно выбрать
Группы уставок
Группы
используются для организации связанных наборов параметров или для удаления редко используемых настроек из главного окна.
-
группа
— Имя группы связанных подпараметров, которые открываются при нажатии на дополнительной панели. Значение свойства группы будет использоваться как метка для группы -
settings
— Массив объектов настройки
.
{
"group": "Название группы",
"настройки": [
{
…
},
{
…
}
]
}
Соглашения об именах настроек
Поскольку интерфейс визуализируется через Twig, все значения «name»
должны соответствовать соглашениям JavaScript.В первую очередь это означает, что дефисы, пробелы и другие специальные символы не допускаются, поскольку они могут иметь зарезервированные функции в JavaScript.
Объединение нескольких слов в названиях настроек
Подчеркивание:
cta_title, cta_image, cta_link
Верхний футляр Camel (футляр Pascal):
CtaTitle, CtaImage, CtaLink
Нижний ящик Camel:
ctaTitle, ctaImage, ctaLink
Пример набора опций с настройками
{
"удаленный": правда,
"настройки": [
{
"имя": "класс_панели",
"label": "Панельные классы",
"тип": "текст",
"значение": "col-6 col-sm-12"
},
{
"name": "логотип",
"label": "Логотип",
"тип": "изображение",
"mediaSource": "ресурсы сайта",
"значение": "активы / изображения / логотип.svg "
},
{
"имя": "nda-файл",
"label": "Загрузить NDA",
"тип": "файл",
"mediaSource": "файлы-ресурсы-сайты",
"value": "assets / files / contract.pdf"
},
{
"name": "слоган",
"label": "Слоган",
"тип": "текстовое поле",
"value": "Введите здесь свой слоган"
},
{
"имя": "тип_панели",
"label": "Тип панели",
"тип": "выбрать",
"options": {"info": "Панель информации", "warn": "Панель предупреждений", "error": "Панель ошибок"},
"значение": "информация"
},
{
"name": "padding_top",
"label": "Верхнее заполнение",
"тип": "слайдер",
«мин»: 0,
«макс»: 100,
«шаг»: 10,
«значение»: 20
},
{
"group": "CTA",
"настройки": [
{
"name": "cta_class",
"label": "CTA Class",
"тип": "выбрать",
"параметры": {
«опасность»: «Красный призыв к действию»,
"info": "Синий CTA",
"default": "CTA по умолчанию"
},
"значение": "по умолчанию"
},
{
"name": "show_cta",
"label": "Показать CTA",
"тип": "переключатель",
"значение": ложь
},
{
"имя": "цвет",
"label": "Цвет текста",
"type": "colorswatch",
"значение": "черный",
"options": [{"value": "primary", "color": "blue", "label": "Primary"}, "lightcoral", "black", "rgba (0,255,0 ,.5) "]
},
{
"name": "bg_color",
"label": "Фоновый цвет",
"type": "colorpicker",
"значение": "белый",
"showAlpha": правда,
"варианты": ["светло-коралловый", "черный", "белый"]
},
{
"имя": "страница",
"label": "Связанная страница",
"тип": "страница",
"значение": {"идентификатор": 1, "URL": "[[~ 1]]"}
}
]
}
]
}
Архив 2010 :: Марк Хамстра
MODX Revolution имеет ряд очень мощных функций, которые скрыты под поверхностью, но когда их обнаруживают, с ними трудно жить.Два из них — это свойства элемента и модификаторы вывода. Эта короткая статья расскажет вам, что это такое и как их можно использовать.
Чего мы хотим достичь
Есть ли у вас какой-то след в заголовке страницы, который должен отображать родительский элемент ресурса, в котором вы находитесь? Отлично, но мы не хотим, чтобы это появлялось на обычных страницах. Наши обычные страницы и страницы блога (где мы хотим, чтобы родительский заголовок был в заголовке нашей страницы) находятся в двух разных шаблонах, но имеют один и тот же кусок заголовка.Мы хотим использовать один и тот же кусок заголовка, но сделать так, чтобы он выводил другое содержимое.
Итак, как нам это сделать?
Мы укажем блоку в шаблоне блога выводить родительский объект (используя свойство элемента), а в блок мы добавим некоторую условную логику (с модификаторами вывода).
Предположим, что следующий шаблон является вашим.
Что мы можем сделать, так это присвоить свойство. Назначение свойства можно рассматривать как добавление переменной или указание ей что-то сделать.Когда мы помещаем вызовы сниппета в наш шаблон, мы сообщаем сниппету, что делать, используя свойства. Например, вызов Wayfinder может иметь свойство startId и level, сообщающее ему, как обрабатывать ваше меню.
Те свойства, которые мы назначаем сниппетам, мы также можем назначать другим элементам (в этом случае наиболее применимы чанки и переменные шаблона). Зная это, мы можем использовать следующее, чтобы указать блоку core.header показывать родительский элемент:
Просто так делать нечего… нам нужно будет настроить наш блок core.header, чтобы использовать свойство, которое мы передаем ему (showParent), и на основе этого вывода заголовок родителя или нет. При использовании свойств с чанками они будут добавлены как заполнители, чтобы мы могли получить к ним доступ с помощью синтаксиса заполнителя. Давайте воспользуемся этим и добавим необходимую нам условную логику.
Допустим, это соответствующая часть блока core.header:
После внесения изменений он будет выглядеть примерно так:
Хорошо.Давайте разберемся, что мы там делали.
- Сначала он просто получает название страницы.
- Затем он выбирает заполнитель, который мы только что установили с помощью параметра & showParent при вызове блока, и совершает с ним волшебство:
- Сначала он проверяет, не является ли заполнитель пустым (или: имеет ли он значение?), Используя модификатор вывода «notempty». Если это так, он выводит «:: [[* parent: getPagetitle]]». Если он пуст, он вернет значение заполнителя (которое тогда ничего).
- [[* parent: getPagetitle]] — это то место, где мы используем другой модификатор вывода, на этот раз настраиваемый (сниппет), который извлекает идентификатор родителя и анализирует его с помощью небольшого фрагмента, чтобы получить заголовок страницы.
- Затем он просто устанавливает остальную часть заголовка.
Проверяя, является ли параметр showParent пустым, вы создаете способ условного управления значением, выводимым блоком. Добавьте настраиваемый выходной фильтр для дальнейшего анализа значения, и вы создали динамический (-ский) заголовок.
Кстати, это настраиваемый сниппет getPagetitle, который мы используем в качестве выходного фильтра:
Из-за рекурсивного синтаксического анализа тегов необходимо проверить переменную $ input на допустимое значение и прекратить выполнение действий, если это не так. После этого просто выберите ресурс с заданным идентификатором и верните его pagetitle.
Параметры
, которые указывают Wayfinder, какие шаблоны использовать | MODX 日本 公式 サ イ ト
Параметры, указывающие Wayfinder, какие шаблоны использовать
Параметры, указывающие Wayfinder, какие шаблоны использовать
Wayfinder может использовать до одиннадцати шаблонов для определения того, как структурировать различные части своего вывода, и предоставляет соответствующий набор параметров, с помощью которых вы можете определять каждый из них.Из одиннадцати возможных шаблонов абсолютно необходимы только два. Wayfinder имеет встроенные значения по умолчанию для этих двух и использует их для создания неупорядоченного списка с отступом, который создается по умолчанию. И если для & displayStart установлено значение TRUE, третий шаблон присоединяется к минимально необходимому набору, и Wayfinder также имеет встроенное значение по умолчанию для этого.
Чтобы создать и использовать шаблон: поместите шаблон в блок, затем используйте соответствующий параметр, чтобы сообщить Wayfinder имя блока.Для каждого из одиннадцати возможных шаблонов есть один параметр, и если вы используете их все, вам понадобится одиннадцать соответствующих фрагментов.
Содержимое каждого шаблона представляет собой фрагмент HTML с некоторыми встроенными заполнителями. При запуске Wayfinder делает копию шаблона, заменяет каждый заполнитель некоторым динамически определяемым текстом, а затем добавляет результат к генерируемым им выводам. Он продолжает этот процесс до тех пор, пока все части не будут собраны, и получившаяся масса текста не станет его выводом.
Обратите внимание, что родительские шаблоны используются только в том случае, если есть дочерние строки для вывода под ними.
Чтобы узнать, как выходные данные шаблона объединяются в готовый продукт, см. Раздел «Шаблоны » ниже.
Параметр | Описание | Тип значения | Допустимые значения | Значение по умолчанию | Комментарии |
---|---|---|---|---|---|
Это шаблоны уровня строки14: (1) 906 | |||||
и startItemTpl |
|
текстовая строка | Имя блока, содержащего соответствующий шаблон.(См. Примечание (6) для дополнительных опций.) | (2) | Может быть не более одного экземпляра вывода из этого шаблона для каждого вызова Wayfinder. |
& rowTpl | Это шаблон по умолчанию, используемый для всех элементов уровня строки, кроме начального. | « | « | (3) | |
и innerRowTpl |
|
« | « | (пусто) | |
и здесь TL | Этот шаблон будет использоваться для строки, соответствующей текущему документу, его родителю, его прародителю и т. Д.вплоть до уровня чуть ниже исходного документа. Это позволяет вам применять особый набор стилевых правил к цепочке документов, которая ведет от вершины структуры меню к текущему документу — независимо от того, насколько глубоким он может быть. Обратите внимание, что это те же документы, которые будут перечислены в цепочке навигации. | « | « | (пусто) | |
и innerHereTpl | То же, что и для , и здесь TL , за исключением того, что применяется ко всем подменю.Если этот шаблон определен, то шаблон & hereTpl будет использоваться только для верхнего уровня иерархии меню. Если этот шаблон не определен, то для всех строк будет использоваться шаблон & hereTpl . | « | « | (пусто) | |
и parentRowTpl | Если определено, то этот шаблон будет определять вывод для строк, которые являются родительскими. | « | « | (пусто) | (7) |
и parentRowHereTpl | Если определено, то этот шаблон будет определять вывод всех строк в цепочке «здесь», которые находятся выше последнего / самого низкого уровня (т. Е.е. для всех родителей). | « | « | (пусто) | (7) |
и activeParentRowTpl | ??? | « | « | (пусто) | (7) |
& категорияПапкиTpl | Если определено, то этот шаблон будет определять вывод для строк, которые (а) являются родительскими и (б) не имеют связанного шаблона документа или (в) имеют атрибуты ссылок , поля имеют значение rel = «category» .
Это полезно, потому что иногда веб-дизайнеры используют «пустые» родительские страницы для предоставления информации заголовка категории для набора вспомогательных страниц, и вам не нужны активные ссылки на эти страницы заголовков, у которых нет шаблона веб-страницы. |
« | « | (пусто) | (7)? |
Это шаблоны на уровне строк: (5) | |||||
и внешний TL |
|
« | « | (4) | |
и внутренний Tpl |
|
« | « | (пусто) |
Примечания:
- Все шаблоны на уровне строк могут использовать любой или все из этих заполнителей:
- [+ wf.wrapper +] — Сообщает Wayfinder, куда вставлять строки, составляющие меню или подменю, если таковые имеются.
- [+ wf.classnames +] — список применимых имен классов CSS, если таковые имеются.
- [+ wf.classes +] — содержит
class = "[+ wf.classnames +]"
- [+ wf.link +] — URL-адрес документа.
- [+ wf.title +] — поле pagetitle документа.
- [+ wf.linktext +] — поле меню документа.
- [+ wf.subitemcount +] — количество непосредственных дочерних элементов документа.
- [+ template_variable_name +] — Имя любой доступной переменной шаблона.
- [+ document_field_name +] — Имя любого стандартного поля документа.
- [+ wf.attributes +] — Ссылка атрибутирует поле документа.
- [+ wf.id +] — уникальный идентификатор строки (если есть), указанный в и rowIdPrefix .
- [+ wf.docid +] — ID документа.
- [+ wf.description +] — поле description документа.
- [+ wf.introtext +] — поле introtext документа.
- Стандартный шаблон и startItemTpl :
[+ wf.linktext +]
[+ wf.wrapper +]
- Стандартный шаблон и rowTpl :
- [+ wf .linktext +]
[+ wf.wrapper +] - [+ wf .linktext +]
- Стандартный шаблон и outerTpl :
- [+ wf.wrapper +]
- Я думаю, что единственным заполнителем, применимым к шаблонам и outerTpl и и innerTpl , являются:
- [+ wf.wrapper +] — вывод всех шаблонов на уровне строк помещается в этот заполнитель.
- [+ wf.classes +] — список применимых имен классов CSS, если таковые имеются.
- [+ wf.classnames +] — содержит
class = "[+ wf.classnames +]"
- В дополнение к «стандартной» опции указания имени блока в качестве значения параметра шаблона, есть две дополнительные опции:
- Если значение параметра шаблона начинается с @FILE: тогда Wayfinder интерпретирует оставшуюся часть значения как путь к каталогу файла, содержащего шаблон.Например:
-
& rowTpl = `@FILE: / assets / templates / myTemplate.txt`
-
- Если значение параметра шаблона начинается с @CODE: тогда Wayfinder интерпретирует остальную часть значения как сам шаблон! Например:
-
& rowTpl = `@CODE:
[+ pagetitle +]
`
-
- Если значение параметра шаблона начинается с @FILE: тогда Wayfinder интерпретирует оставшуюся часть значения как путь к каталогу файла, содержащего шаблон.Например:
- Родительские шаблоны используются только для родителей, дочерние документы которых показаны в подменю.
MODX Add-On все, что вам нужно знать
Modx — это платформа управления веб-приложениями с открытым исходным кодом.Modx изначально разработан на php и поддерживает интеграцию с облаком. В этой статье рассказывается о prevNext надстройке MODX. Мы также рассказали, как использовать аддон prevnext modx в системе modx. Мы записали, какие функции доступны в аддоне prevnext modx с синтаксисом для программиста.
Что такое prevNext Modx Addon?
Разработчик может использовать аддон prevnext, когда разработчик хочет переместить пользователя с текущей страницы на следующую, а с текущей страницы — на предыдущую. Затем он должен разработать код.Но prevnext — это готовый компонент, разработанный командой modx.
prevNext Modx Addon — это бесплатное дополнение, используемое в modx для обеспечения навигации.
Используя prevnext, вы можете указать, как перейти к предыдущему сообщению и как перейти к следующему сообщению.
Как скачать аддон prevNext Modx?
Есть три способа загрузить дополнение prevnext modx.
С официального сайта
Официальная загрузка дополнений prevnext
доступна по ссылке на сайте modx.
После загрузки вы должны интегрировать это дополнение в вашу систему управления контентом modx.
скачать с Github
, вы можете скачать prevnext с github по этой ссылке для скачивания prevnext
Как в программировании вызвать prevnext?
Чтобы использовать это дополнение в программировании приложений Modx, вы должны использовать следующий тег с аргументом или без него.
[[! PrevNext]]
Базовый синтаксис prevnext со всеми параметрами
Это основной вызов, который вы должны интегрировать в сообщение в блоге, и вы должны установить различные варианты, чтобы работать с ним.
[[! PrevNext? & parent = ‘ 345'
& includeTvs = ‘1’ & includeTVList = ‘TV1, TV2’ & nextPrefix = ‘Перейти на следующую страницу’ & prevprefix = ‘Перейти на предыдущую страницу’ & processTVs = ‘1’ & processTVsList = ‘img-tv -list, imag-date-list ‘]]
другие функции prevnext с примером и объяснением
& includeTvs = ’1 ′ , если вы установите & includeTvs = 1, тогда это позволит вам включать переменную шаблона в свой код, и если вы не хотите включать переменную шаблона, установите & includeTvs = 0
& includeTVList = «img-print-first» Это позволяет вам включать переменные шаблона в ваше сообщение.здесь, когда вы используете переменную TV в списке, тогда не используйте работу TV перед именем TV.
& nextPrefix = «Укажите текст, отображаемый в nexprefix». Это позволяет указать значение ссылки при использовании щелчка и перенаправления на следующую страницу.
& PrePrefix = «Укажите текст, отображаемый в nexprefix». Это позволяет указать значение ссылки при использовании щелчка и перенаправления на следующую страницу.
& Tvprefix = здесь вы можете указать префикс, используемый перед переменной шаблона, и с его помощью он будет вызывать переменную шаблона этого класса.например, mydate — это переменная шаблона, а префикс — tv, тогда использование может вызвать это с помощью tv.mydate.
& processTVs : установите это значение в 1, чтобы обрабатывать Tvs в потоке. если это установлено, вы можете указать & includeProcessList со всеми процессами, которые могут получить доступ к этой переменной панели терминов.
& processTVList: Здесь вы можете указать разделенный запятыми список переменных шаблона процесса. В свою очередь, это будет вызываться с использованием this.
и родители: Разделенный запятыми список идентификаторов, выступающих в качестве родителей. Используйте -1, чтобы игнорировать родителей при указании _resources_to include. Если этого не сделать, getResources принимает & parent в качестве текущего ресурса и считывает оттуда своих потомков (плюс ресурсы, указанные в & resources = неожиданные результаты)
& css: укажите имя класса css, с помощью которого вы можете изменить внешний вид текста.
и тпл:
можно указать типы заполнителей шаблонов.Есть три значения заполнителя шаблона. ссылка, текст и разделитель.
, шаг за шагом: как использовать аддон prevnext в modx crm
Как только вы войдете в систему, вы увидите это системное меню. щелкните меню управления пакетами в ssystem и щелкните по нему, чтобы отобразить следующий экран.
, шаг 1: перейдите в раздел «Система» и щелкните «Управление пакетами»
.
Теперь нажмите на загрузку дополнительного показа в верхней части слова версии.
Шаг 2: нажмите Download Extras
Шаг 3. Просмотрите доступные пакеты, в которых отображаются популярные пакеты для загрузки, пакеты с высоким рейтингом и новые дополнительные пакеты.
Теперь найдите слово prevnext в диспетчере пакетов modx crm, и он покажет вам этот пакет.
Шаг 4: После загрузки пакет доступен с кнопкой установки
Шаг 5: Нажмите «Установить», чтобы установить пакет.
Заключение
Мы должны попытаться изучить свойства аддона prevnext modx, разработанного modx.Мы также записали, как использовать это дополнение с синтаксисом и функциями
.
В спешке разрабатываем сайт под MODx
Vom
14. декабрь 2015 г.
Когда мы обновляли демонстрационный сайт нашей компании (игровая площадка для клиентов), мы поняли, что разработка сайта идет намного быстрее, когда контент и структура уже есть. Не то чтобы мы просто экономили время, которое обычно тратили на настройку структуры. Очень важно иметь структуру на месте. В результате ваша команда разработчиков будет примерно в 20 раз быстрее, чем обычно.
В этой статье мы собираемся рассмотреть несколько вещей, которые мы делали (неправильно) в прошлом, но мы не собираемся делать это снова в будущем, особенно для больших или растущих сайтов.
Разработка сайта MODx — восхитительная работа. По нескольким причинам:
- «Есть несколько способов сделать это»
- Нет ограничительного механизма шаблонов, который сообщает вам, где что разместить.
- Нет уязвимых «популярных» плагинов, которые сводят вас с ума
- Нет попыток подбора пароля (после смены адреса менеджера)
- Нет сценария, когда вы должны сказать своему клиенту, что «это просто невозможно».
Нам всем нравится наша продуктивная свобода в MODx.И, что более важно, нам нравится, как мы можем настраивать диспетчер, переименовывать файлы, добавлять или удалять их, отключать их, иметь очень специфический уровень разрешений под нашим программным обеспечением, с которым мы можем работать, а с чем — нет.
Однако, чтобы довести сайт до производственного уровня, требуется много работы. И мы хотели бы поделиться своими достижениями за последние несколько лет со всеми, кто начал с нуля — или, что более вероятно, с людьми, которые создали несколько сайтов и хотят улучшить свои навыки, не изучая это на собственном горьком опыте.
Предварительные требования
Это статья с передовым опытом, адресованная разработчикам, которые знают о следующих программных продуктах:
Есть еще несколько, о которых нам нужно знать. На самом деле речь идет не об этих конкретных пакетах, а об уровне вашего опыта разработки сайтов в целом.
Еще кое-что, что вам следует знать о
- Настройка разрешений
- Настройка отдельного медиа-источника для ваших клиентов
- Настройка менеджера / настроек формы
Почему вы должны об этом знать? Мы обращаемся к тем из вас, кто планирует предоставить своим клиентам «идеальный» продукт, который трудно сломать и который легко поддерживать, даже если он поддерживает сложный веб-сайт.
Делать все в правильном порядке
Это самая важная часть, в которой мы чаще всего ошибались. Даже если это сложно сделать, постарайтесь придерживаться следующего порядка:
- Соберите всей информации, которую вы можете получить о сайте, который вы должны создать
- Создайте структуру на сайте, как она будет выглядеть, какой сайт вы хотите создать, образцы страниц, образцы коллекций и т. Д.
- Добавьте большинство переменных шаблона и образцы фрагментов (да, большинство из них, вы пропустите хотя бы один :))
После этого можно приступать к работе.Вы можете создавать шаблоны. Вот как это сделать быстро и элегантно:
- Выберите шаблон с наибольшим количеством элементов (скорее всего, страница приветствия)
- Начните разбивать шаблон на многократно используемые части, которые вы можете использовать в других шаблонах (заголовок, нижний колонтитул, новости, участники, welcomeSlider и т. Д.).
- Установите и запустите этот шаблон one , собрав всю информацию из связанных ресурсов и т. Д.
- После этого скопируйте из этого шаблона и повторно используйте уже проделанную работу.Это намного быстрее, когда у вас уже есть все готовые к работе и извлеченные из них фрагменты.
- Когда все будет готово, вы можете приступить к настройке параметров менеджера, разрешений и всего остального. Это также работа, которую необходимо выполнить последний , потому что вы можете дублировать свои наборы настроек, что также сэкономит вам много работы.
К настоящему времени ваши шаблоны должны выглядеть чистыми и простыми (как и ваши формы). К настоящему времени большая часть кода шаблона должна уместиться в одном окне.Если есть еще несколько огромных блоков HTML, подумайте, не являются ли они чем-то избыточным, что принадлежит чунлу.
Примечание: мы написали это, потому что выполнение действий в неправильном порядке оставит вам примерно в три раза больше работы, не считая одной настройки менеджера.
Избегайте «дорогих» фрагментов
Мы использовали 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, а список конкретных телевизоров, которые нужно захватить, что делает его тоньше и быстрее, чем getResources
родителей : наконец соответствует. pdoMenu не использует startId вместо родителей, и флаги tpl немного отличаются. Кроме того, это прямая замена Wayfinder.Поскольку вы, скорее всего, отобразите меню на ВСЕХ своих страницах, включая нижний колонтитул и другие меню, изменение этого параметра сильно повлияет на производительность ваших сайтов.
pdoPage также более удобен и больше не требует этого неортодоксального синтаксиса.
Вместо того, чтобы читать это, вам, вероятно, следует прочитать документацию pdoTools и попробовать.
pThumb, изменение размера, getCache, MinifyX, autoFixImageSize
Есть также множество других сниппетов, которые заменяют «дорогие», завершают вещи, которые увеличивают загрузку страницы и которые в большинстве случаев просто неправильно настроены (или отсутствуют).Многие люди забывают изменять размер фоновых изображений, изображений слайдеров и общего содержимого, и, что более важно, иметь pthumb отрисовывать их с качеством 85% и принудительно форматировать их в jpg, чтобы избежать bmps, tiffs и png для огромных изображений. Это значительно уменьшит размер вашей страницы. Просто прочтите, что делают другие фрагменты.
Общие улучшения
На самом деле это не относится к улучшениям MODx, но не меняет того факта, что эти факторы значительно улучшают производительность.
MinifyX не может объединить все Javascript и CSS, иногда это все портит. Но ты можешь. После завершения работы над сайтом вы можете использовать компилятор Google Closure Compiler, чтобы загрузить только ОДИН минифицированный файл javascript вместо загрузки тонны отдельных файлов.
Уменьшите размеры изображений, уменьшите размер файлов CSS и постарайтесь придерживаться вышеуказанных правил.
Разработка сайта не должна занимать у вас более двух дней, если нет необходимости в индивидуальной разработке. Но соблюдение правильного порядка и выполнение задач с первого раза должно сэкономить вам много времени.
Итог
Избегайте getResources, избегайте WayFinder, замените phpThumbof на pthumb, настройте кэширование базы данных, замените большую часть используемого вами материала эквивалентом pdoTools и начните делать вещи в правильном порядке.
Как сказал бы Монах:
Ты поблагодаришь меня позже.
Приложение
Для вашего удовольствия вот несколько вещей, в которых мы пошли не так:
# 1 После того, как мы спланировали сайт для нашего клиента, мы начали разработку сайта, добавили к нему много данных, настроили красивые страницы для ссылок и членов команды, настроили для всех них настройки менеджера и представили работу, которую мы уже пришлось им, чтобы они могли видеть, как легко поддерживать свою информацию.
— Оказывается, колебания количества сотрудников слишком велики, чтобы назвать кого-либо из членов команды, фотографий не существует, а ссылки / портфолио не нужны, потому что они не хотят, чтобы кто-то знал, кто их клиенты. Большинство из них — конкуренты. Возможно, у нас была возможность сначала спланировать структуру сайта. Мы как бы упустили это.
# 2 Один и тот же клиент дает нам много информации. Мы исходим из уже имеющихся у нас шаблонов и начинаем исправлять. Наряду с этим большинство настроек менеджера, потому что клиенты хотели начать поддерживать свои продукты, пока мы имеем дело с шаблонами.
— каждые две недели мы добавляли еще одно поле, еще одно поле, дополнительное изображение и прикрепленный к нему файл PDF. Тогда PDF-файл должен быть изображением первой страницы PDF-файла, и он должен быть интерактивным. После этого нужно было подсчитать количество скачиваний файла.
Примерно через шесть недель клиенты спрашивают: «Можно ли вообще просто вести список общей информации вместо того, что мы только что добавили». — на этом этапе вы можете захотеть убить своего клиента.Но с другой стороны, это наша вина. Сначала мы должны были собрать всю эту информацию, и мы должны были сделать предложение о том, как поддерживать и представлять эту информацию.
часов, потраченных впустую на настройки менеджера, отсутствующие поля в настройках менеджера, отсутствующий MIGX, сломанный MIGX, различные метки и т. Д. И т. Д. — всего этого можно было бы избежать, если бы мы просто сделали все в правильном порядке.
Это намного больше, и мы уверены, что это еще не все. Но вы видите, к чему мы клоним.
Как использовать prevNext Modx Addon —
Modax — это среда управления веб-приложениями с открытым исходным кодом. Modex изначально разрабатывался в сочетании с PHP и Support Cloud. Я писал о предыдущем дополнении для Modex. Я обсуждал различные варианты использования Priority в Modex и других языках. Modex также предлагает частично передний плагин от Drupal.
prevnext — это бесплатное дополнение, используемое в модах для обеспечения навигации.
Используя предыдущий пост, вы можете указать, как перейти к предыдущему посту и как перейти к следующему посту.
Также читаю
Как в программировании вызвать prevnext?
Чтобы использовать это дополнение в программировании приложений Modx, вы должны использовать следующий тег с аргументом или без него.
другие функции prevnext с примером и объяснением
& includeTvs = ‘1 ′ , если вы установите & includeTvs = 1, тогда это позволит вам включить переменную шаблона в свой код, и если вы не хотите включать переменную шаблона, установите & includeTvs = 0
& includeTVList = «img-print-first» Это позволяет вам включать переменные шаблона в ваше сообщение.здесь, когда вы используете переменную TV в списке, тогда не используйте работу TV перед именем TV.
& nextPrefix = «Укажите текст, отображаемый в nexprefix». Это позволяет указать значение ссылки при использовании щелчка и перенаправления на следующую страницу.
& PrePrefix = «Укажите текст, отображаемый в nexprefix». Это позволяет указать значение ссылки при использовании щелчка и перенаправления на следующую страницу.
& Tvprefix = здесь вы можете указать префикс, используемый перед переменной шаблона, и с его помощью он будет вызывать переменную шаблона этого класса.например, mydate — это переменная шаблона, а префикс — tv, тогда использование может вызвать это с помощью tv.mydate.
& processTVs : установите это значение в 1, чтобы рассматривать процессные Tvs в потоке. если это установлено, вы можете указать & includeProcessList со всеми процессами, которые могут получить доступ к этой переменной панели терминов.
& processTVList: Здесь вы можете указать разделенный запятыми список переменных шаблона процесса. В свою очередь, это будет вызываться с использованием this.
и родители: Разделенный запятыми список идентификаторов, выступающих в качестве родителей.Используйте -1, чтобы игнорировать родителей при указании _resources_to include. Если этого не сделать, getResources принимает & parent в качестве текущего ресурса и считывает его дочерние элементы оттуда (плюс ресурсы, указанные в & resources = неожиданные результаты)
& css: укажите имя класса css, с помощью которого вы можете изменить внешний вид текста.