Шаблонизатор Fenom в MODX Revolution
Сравнительная таблица элементов
Элементы | ModX (пример) | Fenom (пример) |
---|---|---|
Поля ресурса (Resource Fields) | [[*pagetitle]] | {$_modx->resource.pagetitle} |
Переменные шаблона (Template Variables) | [[*tag]] | {$_modx->resource.tag} |
Словари (Lexicon) | [[%link_contacts]] | {$_modx->lexicon(‘link_contacts’)} или {‘link_contacts’ | lexicon} |
Ссылки (links) | [[~12]] [[~[[*id]]]] |
{$_modx->makeUrl(12)} {$_modx->makeUrl($_modx->resource.id)} |
Системные настройки (System settings) | [[++access_category_enabled]] | {$_modx->config. access_category_enabled} или {$_modx->config[‘access_category_enabled’]} |
Плейсхолдеры (Placeholders) | [[+image]] | {$_modx->getPlaceholder(image)} или {$image} |
Плейсхолдеры с точкой или тире | [[+tag.subtag]] | {$_pls[‘tag.subtag’]} |
Комментарии (Comments) | [[- Это комментарий]] | {* Это комментарий *} |
Игнорирование кода с круглыми скобками | {ignore} {/ignore} | |
Чанки (Chunks) | [[$chunk]] | {$_modx->getChunk(‘chunk’)} или {include ‘chunk’} |
Сниппеты (Snippets) | [[!pdoMenu? &parents=`0` &level=`0`]] | {$_modx->runSnippet(‘!pdoMenu’, [‘parents’=>’0′,’level’=>’0’])} или {‘!pdoMenu’ | snippet:[‘parents’=>’0′,’level’=>’0’]} |
Авторизация
Проверка авторизации пользователя | Проверка доступа к контексту | Проверка прав |
---|---|---|
{$_modx->isAuthenticated()} | {$_modx->hasSessionContext(‘web’)} | {$_modx->hasPermission(‘load’)} |
Массивы и объекты
Массив/объект | Описание | Распечатать данные на экран |
---|---|---|
{$_modx->user} | Массив с информацией о пользователе | {$_modx->user | print_r} |
{$_modx->context} | Массив с информацией о контексте | {$_modx->context | print_r} |
{$_modx->resource} | Массив с информацией о текущем ресурсе | |
{$_modx->lexicon} | Объект modLexicon, который можно использовать для загрузки произвольных словарей |
Полезные функции
Функция | Описание |
---|---|
{$_modx->regClientCss(‘/assets/css/style. css’)} | Подключение css файла |
{$_modx->regClientScript(‘/assets/css/script.js’)} | Подключение js файла |
{$_modx->sendForward(1)} | Загрузка ресурса без изменения ссылки |
{$_modx->sendRedirect(‘http://modx.ru’)} | Перенаправление на страницу |
{$_modx->setPlaceholder(‘name’, ‘Ivan’)} | Сохранение плейсхолдера |
{$_modx->toPlaceholder(‘name’, ‘Ivan’,’my’)} | Сохранение плейсхолдера с префиксом |
{$_modx->toPlaceholders([‘city’ => ‘Moscow’, ‘man’ => [‘name’ => ‘Ivan’, ‘surname’ => ‘Ivanov’]],’my’)} | Предает многоуровневый массив в плейсхолдер |
{$_modx->setPlaceholders([‘name’ => ‘Ivan’, ‘surname’ => ‘Ivanov’])} | Сохранение массива плейсхолдеров |
{$_modx->getPlaceholder(‘name’)} | Получение значения плейсхолдера |
{$_modx->getPlaceholders()} | Получение списка плейсхолдеров |
{$_modx->unsetPlaceholder(‘name’)} | Удаление плейсхолдера по ключу |
{$_modx->unsetPlaceholders([‘name’, ‘surname’])} | Удаление плейсхолдера по массиву ключей |
{$_modx->regClientStartupScript(‘//ajax. googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js’)} | Добавление js файла перед закрытием тега head |
{$_modx->regClientStartupHTMLBlock(‘<strong>Привет мир</strong>’)} | Добавление тегов перед закрытием тега head |
{$_modx->regClientHTMLBlock(‘<div>(c) 2009 MODx</div>’)} | Добавление тегов перед закрытием тега body |
{$_modx->runProcessor(‘resource/update’, [‘id’ => 10,’alias’ => ‘test’,’context_key’ => ‘web’])} | Запуск системного процессора |
{$_modx->hasPermission(‘edit_chunk’)} | Возвращает true, если пользователь имеет доступ к политике |
{$_modx->isMember(‘Marketing’)} | Проверяет, принадлежит ли пользователь группе |
{$_modx->findResource(‘url-to/doc/’)} | Возвращает true если ресурс найден |
{$_modx->sendError(‘unavailable’)} | Отправляем ошибку пользователю и прекращаем работу скрипта |
{$_modx->getInfo()} | Информация о скорости загрузки |
{$_modx->getChildIds(23,6,[‘context’ => ‘web’]} | Получаем список идентификаторов дочерних ресурсов |
{$_modx->getParentIds(23,6,[‘context’ => ‘web’]} | Получаем список идентификаторов родительских ресурсов, которым принадлежит данный ресурс |
{$_modx->->getResource(1)} | Получаем массив информации о текущем ресурсе по его id |
{$_modx->getResources([‘published’ => 1, ‘deleted’ => 0])} | Получаем массив ресурсов |
{$_modx->cleanAlias()} | Генерация псевдонима |
Модификаторы
Со всеми модификаторами можно ознакомиться здесь
Условный оператор
{set $pt = $_modx->resource. pagetitle} {if $pt == 'Главная'} <p>Главная страница</p> {else} <p>Не главная</p> {/if}
Второй способ
{set $pt = $_modx->resource.pagetitle} {$pt == 'Главная' ? '<p>Главная страница</p>' : '<p>Не главная</p>'}
Перебор элементов
{var $array = ['key' => 'value']} {foreach $array as $key => $value} <p>{$key} is {$value}</p> {/foreach}Выборка из списка
{set $count = 3} {set $array = [1,2,3,4,5,6]} {if $count in list $array} // действия удовлетворяющие условию {/if}
Множественный выбор
{switch $_modx->resource.id} {case '1'} <p>Главная страница</p> {case '2'} <p>О компании</p> {case '3'} <p>Услуги</p> {/switch}
Шаблоны
Название шаблона «Базовый шаблон»
<!doctype html> <html lang="ru"> <head> <meta charset="{$_modx->config. modx_charset}"> <base href="{$_modx->config.site_url}" /> <title>{$_modx->resource.longtitle} - {$_modx->config.site_name} </title> </head> <body> // добавляем чанк {include 'file:chunks/header.html'} // расширяем шаблон {block 'center'} {include 'file:chunks/center.html'} {/block} {include 'file:chunks/footer.html'} {include 'file:chunks/js.html'} </body> </html>
Шаблон «Второстепенные страницы»
// расширяем шаблон {extends 'template:Базовый шаблон'} {block 'center'} {include 'file:chunks/othercenter.html'} {/block}
@ru_modx — страница 1211 — Telegram web archive & catalog
« Назад
Страница 1211 из 1422
Далее »
Sergey19.08.2018
16:49:06
19.08.2018
17:08:42
19.08.2018
17:10:38
$_modx->makeUrl($_modx->resource.id) вместо $_modx->resource.id
Запутался. ( Как правильно написать? {$_modx->makeUrl($_modx->resource.id)|url:[‘service’=>’logout’]} ? Миша19.08.2018
17:11:18
Запутался. ( Как правильно написать? {$_modx->makeUrl($_modx->resource.id)|url:[‘service’=>’logout’]} ?
{$_modx->resource.id|url:[‘service’ => ‘logout’]}GoogleSergey19.08.2018
17:12:36
{$_modx->resource.id|url:[‘service’ => ‘logout’]}
а почему вы [[~[[*id]] переводите как $_modx->resource.id ведь это не верноМиша19.08.2018
17:13:06
19.08.2018
17:16:03
19.08.2018
17:35:33
19.08.2018
18:08:03
и что-то вообще корзина не очищается.
я идиот, просто надо сниппеты некэшированными вызывать.Sergey
19.08.2018
19:06:23
я идиот, просто надо сниппеты некэшированными вызывать.
Ты не идиот, просто теперь ты это знаешь ?Anton19.08.2018
19:08:16
19.08.2018
19:09:24
Евгений
19.08.2018
19:10:12
19.08.2018
19:10:51
19. 08.2018
19:11:09
Второй — ПряныйSerious
19.08.2018
19:11:41
Это на пост советском пространстве йогурт считается сладостьюЕвгений
19.08.2018
19:12:14
19.08.2018
19:12:37
Я тут ещё нашёл местную тему — вспененный айран
Дичь какая-то ☺
0гтя кисломолочный продукты люблю
Anton
19.08.2018
19:14:35
19.08.2018
19:14:40
Именно такAnton
19.08.2018
19:15:54
19. 08.2018
19:16:07
19.08.2018
19:16:20
19.08.2018
19:16:26
19.08.2018
19:19:37
19.08.2018
19:47:55
Моя бабушка так кислить умеет
простокваша называется)Pavel19.08.2018
19:57:10
19.08.2018
20:01:28
20.08.2018
04:17:58
а как сделать, чтоб мфильтр сам подхватывал опции для фильтрации? Или надо просто все возможные указать, а он лишние сам спрячет?
Никак. Вручную нужные указываешь. Ну или как вариант пишешь сниппет который все опции из базы тащит и в нужном формате выводитМожно pdoTools приспособить или написать сниппет обертку для mfilterЕвгений
20.08.2018
05:30:28
Очередная порцияSergey
20.08.2018
06:01:54
а как сделать, чтоб мфильтр сам подхватывал опции для фильтрации? Или надо просто все возможные указать, а он лишние сам спрячет?
можно прописать все а чтобы не выводил пустые есть showEmptyFilters параметрEvgeniy20.08.2018
06:18:06
20.08.2018
06:59:11
20.08.2018
07:08:21
20.08.2018
07:09:04
20.08.2018
07:21:31
20.08.2018
07:41:17
может стыренные аккиМиша
20. 08.2018
08:08:27
ни у кого в закладках нет?Евгений
20.08.2018
08:08:58
20.08.2018
08:09:09
хотя я первый раз на такое наталкиваюсьЕвгений
20.08.2018
08:10:34
20.08.2018
08:10:39
20.08.2018
08:15:56
20.08.2018
08:16:06
20.08.2018
08:17:50
В настройках чпу
да он всегда пустойAnton20.08.2018
08:18:31
20.08.2018
08:25:20
20.08.2018
08:26:05
Неделю назад обновил кучу сайтов до 2.6.5 и плагин gallery. Сейчас смотрю ломают понемногу, сайтмапы появляются и другие файлы которые я удалял. Я так понимаю без переименования директорий, создания htpasswd дела не будет?
без отката на бекап ДО взлома — толку не будетполностью очистить сайт от гадости — очень сложно. По любому где то останется файл через который снова зальют дряниРостислав
20.08.2018
08:27:01
без отката на бекап ДО взлома — толку не будет
А если я антивирусом пришёлся и вручную почистил?Derzaiii20.08.2018
08:27:21
20.08.2018
08:35:42
Повторюсь — очень сложно очистить всё.
Дело в том что много сайтов создано буквально 2-3 недели назад, особо нечего откатывать. Я думаю сейчас этот вирус популярный(который создаёт сайтмапы). Интересно хватит ли обновления движка и галереи чтобы его удержать или придётся дополнительно директории переименовывать и т.п.? Думаете aibolit не способен найти все вирусные файлы чтобы вручную почистить?iWatchYouFromAfar20.08.2018
08:37:47
20.08.2018
08:38:04
Дело в том что много сайтов создано буквально 2-3 недели назад, особо нечего откатывать. Я думаю сейчас этот вирус популярный(который создаёт сайтмапы). Интересно хватит ли обновления движка и галереи чтобы его удержать или придётся дополнительно директории переименовывать и т.п.? Думаете aibolit не способен найти все вирусные файлы чтобы вручную почистить?
Айболит не способенРостислав20.08.2018
08:40:38
Народ, на сайте есть несколько кастомных полей пользователя, во все эти поля пользователь вносит урлы, урлы вносят в разоброй (с протоколами и без). Как мне правильно применить сниппет валидации? Чтобы протокол вырезался?
я писал плагин который обрезает http/https. Он далек от идеала, но могу скинутьiWatchYouFromAfar20.08.2018
08:41:32
я писал плагин который обрезает http/https. Он далек от идеала, но могу скинуть
Именно плагин? Кидай конечно, буду благодарен. Я пока сниппетом пытаюсь вырезать, вырезает нафиг весь урл…Ростислав20.08.2018
08:42:11
Именно плагин? Кидай конечно, буду благодарен. Я пока сниппетом пытаюсь вырезать, вырезает нафиг весь урл…
сори, сниппет. Ща найдуJack20.08.2018
08:42:15
20.08.2018
08:42:45
хотя gallery давно уже не пользовалсяJack
20.08.2018
08:46:45
20. 08.2018
08:47:05
просто есть ли смысл ставить компонент магазина, когда нужны простые страницы с галлереей и со своими чанками?
ms2Gallery, причем тут магазин\Евгений20.08.2018
08:47:27
просто есть ли смысл ставить компонент магазина, когда нужны простые страницы с галлереей и со своими чанками?
модуль галереи есть отедльно, он платныйРостислав20.08.2018
08:47:55
Народ, на сайте есть несколько кастомных полей пользователя, во все эти поля пользователь вносит урлы, урлы вносят в разоброй (с протоколами и без). Как мне правильно применить сниппет валидации? Чтобы протокол вырезался?
Возможно я не так понял. Пользователь заполняет поля в админке?iWatchYouFromAfar20.08.2018
08:48:11
Возможно я не так понял. Пользователь заполняет поля в админке?
нет, через фронтJack20.08.2018
08:48:43
ms2Gallery, причем тут магазин\
а понял, я просто думал для минишоп она только, спасибоiWatchYouFromAfar20. 08.2018
08:49:13
Возможно я не так понял. Пользователь заполняет поля в админке?
Обычный личный кабинет, где пароли там меняют, почту и т.д. Вот там есть поля в которые вносят урлы, их нужно кастрироватьJack20.08.2018
08:50:06
20.08.2018
08:50:30
Еще вопросик важный. Мне нужно сделать мультиподдоменную региональную структуру сайта: spb.site.ru, ekb.site.ru и т.д. Но, нужно, чтобы в ресурсах контекстов вставлялись свои чанки и tv, например, в заголовок и текст подставлялся tv «в Санкт-Петербурге», tv со своим телефоном и адресом и т.п. Как это вообще правильно реализовать? Может есть что-то готовое?
changeDomainЕвгений20. 08.2018
08:50:38
20.08.2018
08:51:26
нет, через фронт
а, ну тут не помогу, извините. Возможно нужно прикрутить какой-то inputmask« Назад
Страница 1211 из 1422
Далее »
Открыть в Telegram
Перенаправление устаревших URI в MODX CMS
Проблема
Перенаправления — это факт жизни. (Да, в этом контексте Жизнь == Интернет.) К счастью, MODX предоставляет вам множество опций для обработки перенаправлений, включая основные методы и устанавливаемые дополнения. Вот обзор большинства, если не всех, этих вариантов.
Опции для перенаправления устаревших URI в MODX
Redirector
Redirector долгое время был незаменимым дополнением для обработки перенаправлений в MODX. Он полнофункциональный, включая страницу пользовательского менеджера (CMP), которая предоставляет простой в использовании интерфейс для людей, не являющихся техническими специалистами, для управления своими перенаправлениями.
Он может даже обрабатывать более сложные требования, такие как отслеживание действий диспетчера для измененных URI. Если вам нужна помощь в реализации некоторых более продвинутых функций или вы можете воспользоваться дополнительными функциями, свяжитесь с командой MODX PS.
Помимо всего этого, Redirector не всегда является лучшим решением, по крайней мере, для некоторых распространенных случаев использования. Почему?
Тот факт, что он полнофункциональный, означает, условно говоря, выполнение большого количества кода. Плагин Redirector включает свой класс, выполняет поиск в базе данных, вызывает методы для обработки тегов MODX и т. д.
Конечно, он срабатывает только при событии OnPageNotFound, так что общая производительность сайта, вероятно, не будет отправлена в канализацию, но если вам нужна только отвертка, может быть, лучше не использовать дрель…?
htaccess или nginx перезаписывает
На сегодняшний день наиболее эффективным способом перенаправления трафика является настройка сервера. В Интернете есть много документации по этой теме, написанной гораздо более квалифицированными людьми, чем я, поэтому используйте этот всемогущий ресурс для разработчиков «Google», и вы почти наверняка найдете то, что вам нужно. Если вы используете MODX Cloud (или любой сервер nginx), вам, вероятно, будет полезна эта документация здесь.
Причина, по которой этот вариант наиболее эффективен, заключается в том, что вам вообще не нужно запускать PHP для обслуживания перенаправления. PHP будет сложно превзойти правильно настроенный веб-сервер в таких задачах, как простые перенаправления.
Однако есть и недостатки. Если у вас есть огромный список URI для перенаправления, может быть неудобно управлять ими в файле .htaccess или .conf. Кроме того, вы ограничены в «динамических» вещах, которые вы можете делать… Я объясню, что это может означать, в следующем разделе…
Пользовательский плагин MODX с использованием основных методов
Допустим, вы только что перестроили веб-сайт клиента в MODX, но клиент обеспокоен SEO (а кого нет?) Вам нужно перенаправить устаревшие URI, но что, если вы также хотите сохранить контроль цели перенаправления путем «маршрутизации» через ресурс MODX?
Использование оператора Switch
Вот пример того, как вы можете сделать это с помощью пользовательского плагина, некоторых основных методов MODX и оператора switch:
Комментарии должны прояснить, что здесь происходит. Обратите внимание, что с помощью $modx->makeUrl()
, у вас есть доступ к некоторым довольно надежным функциям динамической маршрутизации. При использовании оператора switch будет выполняться только соответствующий случай. Этот метод, вероятно, начинает падать, если вам нужно управлять кучей редиректов. Кроме того, он не раскрывает ничего из этого людям, не занимающимся кодированием. Для этого вернемся к Redirector.
Использование массива
Иногда клиент предоставляет список старых URI, которые он хочет сопоставить с новыми URI. Я сталкивался с этим несколько раз. Если нет необходимости использовать метод makeURL, простой PHP-массив может быть немного быстрее, чем оператор switch:
Опять же, не так быстро, как настройка сервера, но определенно быстрее, чем другие параметры плагина, упомянутые здесь, а также он более доступен, чем файл nginx .conf. Вы можете отредактировать этот плагин, например, в диспетчере MODX, и вы можете добавить переменную $baseUrl
для обработки нескольких контекстов.
Фрагменты кода и другие параметры
Не каждое требование перенаправления требует обработки длинного списка URI. Иногда вам нужно перенаправить один Ресурс на внешнюю ссылку или на другой Ресурс. Вы можете сделать это, просто сделав свой ресурс документом WebLink, который является встроенной функцией MODX. Вы также можете динамически вызвать фрагмент Redirectoid в своем шаблоне или перенаправить на первый «дочерний» ресурс данного ресурса с помощью FirstChildRedirect.
Свобода творчества
Это ни в коем случае не исчерпывающий список, но вы можете видеть, что MODX дает вам множество вариантов, связанных с домашними обязанностями по перенаправлению старых URL-адресов. Если у вас есть собственные решения, поделитесь ими в комментариях 🙂
Информация для перенаправления — SiteDash, возьмите под контроль свои сайты MODX
перенаправление — это дополнение от sepiariver, впервые выпущенное 15 февраля 2022 года.
Описание упаковки
Инструкции по использованию/установке
Детали
- Разработчик(и)
- сепиарвер
- Выпущено
- 15.02.2022
- Первое появление
- 15.02.2022
- Лицензия
- GPLv2
- Поддерживаемые базы данных
- MySQL
- Минимальные требования MODX
- 2
redirectoid Релизы
Поставщик | Подпись | Выпущено |
---|---|---|
MODX. com | 3.0.0-rc1 | 2022-02-15 (1 год назад) |
MODX.com | 2.2.2-пл | 2021-10-16 (1 год назад) |
MODX.com | 2. Оставить комментарий
|