Давно не писал что-нибудь заумное, чтоб после прочтения у Вас голова заболела, поэтому решил написать! Может будет трудно осилить, но Вы приблизитесь к опытному уровню разработок в modx. В этой статье я не буду разжевывать всё в подробностях, но она будет очень большая, охватывающая многие аспекты программирования в среде для разработки modx, поэтому Вам придётся набраться терпения, но это будет того стоить, так как некоторые решения Вы не найдётё в интернете.
Что Вы будете уметь после прочтения?
- Во-первых работа с внешними скриптами с использованием API MODX;
- Не обойдется без решения таких вопросов как получения сессий, залогиных пользователей;
- Особое внимание я уделю выводу ресурсов(документы расположенные в админ. панели) с помощью jQuery;
- В конце всего вы найдёте мини-примеры, которые наиболее востребованы в моей практике.
- На последок я сделал Вам сюрприз, — мы встроим интересную jQuery каптчу в скрипт модуля регистрации MODX.
Итак, — поехали!
То что я буду Вам пытаться сейчас объяснить вызовет у Вас головную боль, но поверьте эта боль — меньшее зло, по сравнению с той, которая бы у Вас проявилась, если бы Вы вручную — методом проб, всё бы это пытались создать. Для начала давайте вспомним, что отменили в последней версии MODx — 2.1.
MODX Implementation Part 2 — Settings, Chunks & TV’s
Список отменённых методов в MODx 2.1!
- getSettings()
- getDocumentObject()
- getLoginUserType()
- getDocument()
- getDocuments()
- getUserDocGroups()
- getFullTableName()
- getAllChildren()
- getActiveChildren()
- getDocumentChildren()
- getDocumentChildrenTVars()
- getTemplateVar()
- getTemplateVars()
- getTemplateVarOutput()
- getParent()
- getPageInfo()
- getUserInfo()
- getWebUserInfo()
- getDocGroups()
- changeWebUserPassword()
- changePassword()
- cleanDocumentIdentifier()
- getDocumentIdentifier()
- getDocumentMethod()
- checkPreview()
- logEvent()
- getManagerPath()
- userLoggedIn()
- mergeDocumentContent()
- mergeSettingsContent()
- mergeChunkContent()
- mergePlaceholderContent()
- isBackend()
- isFrontend()
- insideManager()
- putChunk()
Правильно выводим статьи в MODX REVOLUTION!
Часто разработчику необходимо получать данные не прибегая к перезагрузке страницы, то есть через ajax. Так как с системами управления это достаточно сложно реализовать начинающим пользователям и разработчикам этих систем, поэтому мы начнём с правильного подключения MODx API во внешних скриптах.
Для начала нужно определится с подключением к MODX API. Данный код нужен для защиты.
Далее следует указать стоит ли кэшировать данные MODX, — по умолчанию данные кэшируются, что мы собственно и видим.
После этого нам нужно подключить основной класс для работы с API MODX и конфигурационный файл:
- config.core.php
- modx.class.php
В моих скриптах я использую заголовок для указания правильной кодировки. Правильнее этот заголовок разместить выше предыдущих скрипов, но в связи с тем что мои скрипы, как правило, не выводят ошибок до этого заголовка, то и сообщение о его неправильно размещении Вы так же не должны получить.
Я советую использовать нижеуказанный код для записи всех действий в журнал MODX.
Задайте уровень обработки ошибок.
Здесь нужно быть по внимательнее, выбрав правильный контекст, изначально он такой. Если Вам нужен другой контекст, — измените соответственно строку ‘web’.
Сейчас мы подобрались к основному выводу содержимого статей вашего сайта. В следующем листинге мы получаем объект — ресурс с «ID» равным 3. Если у Вас пока одна страница «HOME», то Вам необходимо изменить его на 1, иначе ничего не будет выведено. Сейчас я не буду объяснять подробное назначения массива, но заранее отмечу что в MODX можно выбирать статьи одновременно по нескольким параметрам, а так же несколько ресурсов в одни массив, но пока давайте выведем содержимое одной статьи по её ID.
Теперь, когда у нас есть объект, мы можем получить его данные, давайте получим содержимое статьи.
Рабочий вариант полностью.
Если нужно вывести одновременно несколько статей, например, зная их название и краткое описание, то нужно использовать метод getCollection и заменить всё в предыдущем листинге начиная с 93 строки следующим кодом:
В итоге будут получены первые три статьи, при этом все переменные, TV будут распарены, а сниппеты выполнены — это основное отличие от предыдущего листинга, в котором содержимое выводится в том виде, в котором Вы его видите в админ. Панели, — при редактировании в редакторе(content).
Используя этот шаблон php скрипта плюс небольшое дополнение на jQuery, например $.load или $.post или $.ajax Вы сможете создавать динамичные ресурсы внутри системы MODX.
Учимся выводить данные о пользователе во внешние php скрипты в MODX REVOLUTION!
Как-то у меня возникла необходимость получать имя активного пользователя, для того чтобы заполнить его данным таблицу SQL, я выбрал следующее решение.
Другой раз у меня возникла необходимость отправки данных на email, который должен был быть указан пользователем и может постоянно изменяться. Для того, чтобы пользователю не «лазить» по скриптам, я решил создать сниппет в котором пользователь мог удобно изменить email на нужный. Для вызова сниппета мне пришлось использовать метод runsnippet . Поэтому может и Вам пригодится:
Получаем данные об активном пользователе или странице через сниппет!
Получать данные об активном пользователе или странице внутри системы (НЕ ВО ВНЕШНЕМ СКРИПТЕ), через сниппет можно следующим образом:
Получим текущий заголовок страницы(pagttitle), в сниппетах, — не забывайте вместо echo пишется return:
Однажды столкнулся с ситуацией, когда в системе было несколько статей с одинаковыми заголовками, одни из которых были опубликованы, другие нет, для того чтобы вывести опубликованные использовал следующий код:
Мини-примеры MODX API REVOLUTION!
Получаем системные настройки MODX:
Получаем переменные шаблонов (TV):
Так как не запрещено внутри TV использовать другие TV, то для того чтобы получить TV с уже распарсенным TV, нужно использовать следующий код:
Встраиваем содержимое ресурса, заголовок которого — «MyDocument», в чанк, тем самым все переменные внутри этого содержимого будут распарсены парсером MODX.
Выполнить сниппет можно с указанием его настроек следующим образом:
Для получения параметров сниппета, установленных по умолчанию используется следующий код:
Встраиваем каптчу «QapTcha»!
Я взял каптчу с сайта QapTcha. Для начала включите в шаблон, на странице которого будет размещаться форма регистрации js и css файлы, как указано ниже:
После вставляем сниппет регистрации, он доступен по умолчанию и включен в состав сниппета «Login».
Следующий код нужно вставить в форму регистрации, — там где Вам нужно, обычно это перед кнопкой отправки формы. То есть данный код создаёт каптчу.
Далее заменить строку 69 сниппета «Register», находящийся в разделе сниппетов плагина «Login»:
В итоге на странице, где у Вас расположена форма будет находится красивая и простая каптча:
Для правильной работы каптчи нужен php, сохраняющий данные в сессию, который указан ниже:
Заключение
Теперь многое для Вас в Modx станет доступным. А если не совсем, — для этого есть комментарии или форум со специальным разделом «MODX REVOLUTION»!
Источник: slyweb.ru
Fenom для MODX — базовые понятия
Шаблонизатор Fenom – это надстройка для MODX Revo, включённая в состав пакета pdoTools. Позволяет полностью заменить «родные» теги MODX с увеличением скорости и удобства работы с информацией из таблиц базы данных и значительно расширить возможности шаблонизации.
Для тех, кто начинал изучение MODX по официальной документации, поначалу работа с Fenom может показаться неудобной и более сложной, а, открыв первый раз сайт на Fenom, вообще не сообразить, что и как работает.
Это быстро проходит) и, возвращаясь при необходимости к стандартным тегам, начинает не хватать возможностей парсера pdoTools.
Включение Fenom
Для того, чтобы теги Fenom начали обрабатываться в шаблонах, чанках и тексте ресурса, нужно включить следующие настройки: Системные настройки — pdotools:
Шаблонизатор имеет такую особенность – если парсер не может обработать страницу, она может выйти пустой, либо с исходными тегами. Причина пишется в Журнале ошибок. Первоначально, нужно обратить внимание на инлайновые стили и скрипты Java, потому что парсер срабатывает на фигурные скобки {} .
Для указания парсеру Fenom фрагментов, не подлежащих обработке, используются теги {ignore}фрагмент{/ignore} . Помогает не всегда, это связано с особенностями работы парсера.
Часто бывает проще расставить пробелы или переносы строки после открывающей скобки и перед закрывающей.
Базовые понятия
Основные источники информации по работе с Fenom – в документации modx.pro и в исходной документации.
Желательно сразу освоить файловые элементы (официальное руководство).
Начнём с шаблонов. По умолчанию, путь к файлам core/elements (папку elements нужно будет создать). Дальше, на усмотрение, кому как удобно.
Например, создадим папки templates, chunks и snippets (в директории elements, понятное дело). Пускай базовый шаблон будет main.html (или с расширением tpl, неважно). Весь текст, соответственно, будет храниться в файле core/elements/templates/main.html .
Для связи со структурой MODX нужно будет создать обычным способом шаблон, в поле Код шаблона которого записывается ссылка на файл в виде {include ‘file:templates/main.html’> .
В шаблонах и чанках нежелательно мешать теги Fenom со стандартными тегами, поскольку в этом случае запускается встроенный парсер MODX.
Как работает наследование и расширение шаблонов (чанков) в Minishop2 можно увидеть на примере чанков писем. Здесь 6 видов оповещений построены на 1 базовом шаблоне.
Аналоги тегов MODX
Поля текущего ресурса (теги со *): {$_modx->resource.id> , {$_modx->resource.pagetitle> , {$_modx->resource[‘description’]> , либо {$_modx->resource[‘имя_тв_поля’]> и т.д. (разные варианты обращения к элементам массива $_modx->resource).
Плейсхолдеры сниппета (теги с +): {$id> , {$longtitle>
Системные настройки (теги с ++): {‘site_url’ | option> или {$_modx->config[‘site_url’]>
Ссылка на ресурс (теги с ~): {88 | url> . Например, генерация абсолютной ссылки на документ с id = 88, [[++site_url]][[~88]] = {‘site_url’ | option ~ (88 | url)> или {‘site_url’ | option>{88 | url)> (в Fenom символ ~ выполняет объединение строк)
Поля любого ресурса: {11 | resource : ‘longtitle’>
Вызов сниппета: {‘pdoSitemap’ | snippet> ,
некешированный {‘!pdoSitemap’ | snippet> ,
с параметрами {‘!pdoMenu’ | snippet : [‘parents’ => 0, ‘resources’ => ‘-1,-6’, ‘showHidden’ => 1]>
Поля любого пользователя по его id: {5 | user : ‘fullname’>
Массив полей текущего пользователя $_modx->user . Например, посмотреть все поля {$_modx->user | print>
Закомментировать теги Fenom можно так: {*’!pdoPage’ | snippet*>
Разумеется, это не все возможности шаблонизатора, есть ещё масса модификаторов, полностью заменяющих «родные» теги MODX и расширяющие их функции.
Условия и циклы
Это как раз то, что меняет подход к построению страницы сайта. При всём уважении, условия в стандартном синтаксисе MODX, в особенности вложенные, напоминают фразу из «Собачьего сердца»: «Кто на ком стоял. Потрудитесь излагать Ваши мысли яснее.»
Условия в Fenom задаются так же, как в большинстве языков программирования:
условие if:
{if $_modx->resource.parent == 1> {$_modx->resource.pagetitle> {elseif $_modx->resource.parent == 5> {$_modx->resource.longtitle> {else> Другой текст заголовка {/if>
использование логических И (), ИЛИ (||) и группировка условий (тут же пример присвоения значения переменной):
{var $u = 5>{var $e = 9> {if $u > 2 || ($e >= 3 $e < 100)>Выполненное условие {/if>
короткая запись if (тернарный оператор),
{$_modx->resource.longtitle ? $_modx->resource.longtitle : $_modx->resource.pagetitle>
или аналог стандартного default в случае пустого значения:
{$_modx->resource.introtext ?: ‘аннотация не заполнена’>
условие switch:
{switch $_modx->resource.id> {case 5> Текст {case 7,8> Другой текст {case default> Пусто {/switch>
Полноценный цикл foreach:
{var $array = [0 => ‘val1’, 1 => ‘val2’]> {foreach $array as $key => $value> key = {$key>, value = {$value> {/foreach>
Пример вывода дочерних ресурсов без вызова сниппета
В Fenom переменная $_modx – обращение к классу microMODX, имеющему несколько очень полезных методов.
перенаправление на заданный url, либо ресурс (здесь, с id = 101) {$_modx->sendRedirect(101 | resource : ‘uri’)>
получение потомков документа (здесь, id документа 47, глубина вложенности 1). Поскольку возвращает массив, для наглядности показан с простым выводом на экран. {$_modx->getChildIds(47, 1) | print>
То же, для родителей документа $_modx->getParentIds()
Получение масивов полей ресурсов без сниппета и вывод без чанка:
{var $parents = $_modx->getResources( [‘published’ => 1, ‘deleted’ => 0, ‘isfolder’ => 1], [‘sortby’ => ‘menuindex’, ‘select’ => ‘id,pagetitle’])> {foreach $parents as $parent> {var $childs = $_modx->getResources( [‘published’ => 1, ‘deleted’ => 0, ‘parent’ => $parent.id], [‘select’ => ‘pagetitle’, ‘sortby’ => ‘menuindex’])> {if $childs>
{$parent.pagetitle>
{foreach $childs as $child> {$child.pagetitle> {/foreach> {/if> {/foreach>
Этот пример показывает, как, пользуясь только средствами Fenom, вывести дочерние ресурсы, сгруппированные по родительскому документу.
Произвольная группировка товаров и порядок вывода категорий miniShop2 в корзине
Товары в корзине выводятся с помощью сниппета msCart, чанк вывода, по умолчанию, tpl.msCart. Добавленные в корзину покупки хранятся в переменной $_SESSION в таком виде:
[minishop2] => Array ( [cart] => Array ( [19540dc928fb772d846a78d33c108a6e] => Array ( [id] => 821 [price] => 150 [weight] => 0 [count] => 1 [options] => Array ( ) [ctx] => web ) [9537fcc265888919ea41499d68ce0317] => Array ( [id] => 371 [price] => 400 [weight] => 0 [count] => 1 [options] => Array ( [prs] => 400 [age] => 3-6 [month] => 400 ) [ctx] => web ) [c158d4dca43e0a30c567c0b2f415d04e] => Array ( [id] => 822 [price] => 400 [weight] => 0 [count] => 1 [options] => Array ( ) [ctx] => web ) )
Где ключ элемента массива с покупкой, например, такой [c158d4dca43e0a30c567c0b2f415d04e] , формируется динамически при добавлении товара в корзину при помощи функции md5 следующим образом: $key = md5($id . $price . $weight . (json_encode($options))); (исходник).
Соответственно, товары в корзине выводятся по очерёдности их добавления, без учёта id товара, либо его категории.
Стандартный чанк tpl.msCart сделан на Fenom, поэтому, можно, с минимальными изменениями, задать нужную группировку и порядок вывода категорий товаров.
Чанк принимает массив товаров $products , поэтому в чанке, до цикла {foreach $products as $product> (это 16 строка), раскидываем общий массив на несколько массивов категорий, например, cat_15 и cat_16 , где число – id категории.
{foreach $products as $product> {if $product.parent == 15> {set $cat_15[] = $product> {elseif $product.parent == 16> {set $cat_16[] = $product> {else> {set $other_products[] = $product> {/if> {/foreach>
И вывод товаров из категорий:
{if count($cat_15)> {foreach $cat_15 as $product> {*здесь вывод товара*> {/foreach> {/if> {if count($cat_16)> {foreach $cat_16 as $product> {*аналогично стандартному выводу*> {/foreach> {/if> {if count($other_products)> {foreach $other_products as $product> {*внутри цикла foreach (строки 17. 69)*> {/foreach> {/if>
Таким образом можно не только определить последовательность вывода категорий товаров, но и задать общий заголовок и футер товаров одной категории и использовать разное оформление.
Источник: my-priv.ru
Управление modx
Добавление и редактирование страниц, выбор шаблонов, добавление изображений , видео , таблиц и меди файлов
Всем доброго дня! Сегодня мы рассмотрим основные моменты, как пользоваться системой Modx и её редактором TineMCE
Тестовый сайт: http://aiesec.dispsoft.ru/
FAQ. Часто задаваемые вопросы по управлению Modx.
Видео инструкция:
Текстовая инструкция:
- Редактирование меню
- Заголовки, описание, выбор шаблона и т.д.
- Modx TinyMCE(форма для редактирования документов) :Вставка/редактирование текста, вставка/редактирование изображений и медиа объектов,вставка/редактирование таблиц,вставка/редактирование ссылок
- Задать свой вопрос(online)
Ответы:
1. Редактирование меню? к вопросам
Меню для сайта делают программисты. В нашем примере сделано выпадающее меню под номером
1 и боковое меню под номером 2
Редактирование меню в modx
1 меню содержит в себе все документы в виде дерева.
2 меню содержит только документы конкретного раздела, в котором находится посетитель сайта. В нашем примере , в разделе Студентам посетитель увидит документы, вложенные в этот раздел
Для изменения верхнего меню и бокового нужно менять документы в разделе Верхнее меню(47)
Что можно изменить: Нажав на нужную страницу или раздел правой кнопкой мыши, выберите Редактировать
2. Заголовки, описание , выбор шаблона и т.д.к вопросам
Заголовки, описание , выбор шаблона и т.д.
Для начала редактирования выберите документ и щёлкните правой кнопкой мыши, в контекстном меню выберите Редактировать.Для создания нового документа нажмите на кнопку Новый ресурс или выберите раздел, где хотите создать ресурс(страницу), нажмите правой кнопкой мыши, в контекстном меню выберите Дочерний ресурс
При нажатии правой клавиши мышки на любом из документов выскочит панель следующего вида:
Главный ресурс — это страничка вашего сайта которая будет отображаться в верхнем меню и содержать информацию как свою, так и дочерних документов. Дочерние ресурсы будут отображаться в разделе Главного ресурса. Вы можете добавлять/изменять Главный ресурс и Дочерний ресурс.
Для этого нужно нажать на иконку «Новый ресурс» в левом верхнем углу,под словом «Главная» или правой кнопкой мышки вызвать «Панель редактирования» у одного из ресурсов слева и выбрать «Дочерний Ресурс»
Далее вы увидите форму следующего вида:
Добавление нового ресурса в MODx
Остальные поля будут заполняться автоматически или останутся пустыми*.
*Например, при добавлении свежей Новости после нажатия «Публиковать» время публикации будет выставлено автоматически. Если нужно время исправить, его можно выставить в ручном режиме в разделе «Настройка страницы—Дата Публикации»
3. Modx TinyMCE :Вставка/редактирование текста,вставка/редактирование изображений и медиа объектов,вставка/редактирование таблиц,вставка/редактирование ссылок? к вопросам
Редактировать тексты можно в Содержимое ресурса, давайте рассмотрим, какие возможности есть у редактора:
редактирование текста и страниц в modx
редактирование текста и страниц в modx
вставка изображения в modx
вставка таблиц в modx
После загрузки видео, зайдите на свой видеоролик. Внизу вы уведите кнопочку «Встроить/Получить код видео/Embed Video». Нажав на неё, вы получите код, который сможете встроить себе на сайт, скопируйте его
Как получить код Видео
Для вставки видео на сайт, в поле «Содержимое ресурса» на верхней панели есть иконка
Вставка видео в TinyMCE Modx
- -После нажатия откроет окно для вставки кода видео.
- Вставка HTML кода — Поле куда нужно вставить код видео, который дает youtube, vkontakte и т.д..
- Вставить — После нажатия будет создана табличка, где в верхней части будет само видео, а в нижней подпись к нему.
- Текст — Вместо слово «ТЕКСТ» напишите описание видеоролика.
- Указать — Для перехода на следующую строку выставите указатель после таблицы и нажмите «Enter».
- Стили — для каждого элемента программист может создать свой стиль, это опция заказывается отдельно
- Восстановить данные — Важно! Если после нажатия Сохранить вы потеряли документ по какой то причине (Отключение от интернета, выход по таймеру) войдите снова в тот документ, который редактировали и нажмите эту кнопку для восстановления потерянных данных
Задать свой вопрос к вопросам
Write a comment
- Required fields are marked with *.
Дмитрий
Posts: 63
о галочке
Reply #67 on : Fri October 28, 2011, 14:07:15
Проблема в том, что я убираю галочку с в настройках страницы «Публиковать».
После сохранения изменений галочка остается на месте, т.е. не убирается и соответственно в дереве ссылка страницы не меняется на курсив.
Может ли мне кто подсказать в чем причина?
Александр
Posts: 63
о галочке
Reply #66 on : Tue November 08, 2011, 15:19:49
Добрый день!
Хватает ли у вас прав на данное дейстивие?
Проповали ли вы нажать праваой клавишей мыши на страницу и нажать отменить публикацию?
Можете попробовать сделать схожие действие в другом браузере, например Google Chrome
Юлия
Posts: 63
загрузка изображений
Reply #65 on : Mon December 05, 2011, 12:40:25
Проблема: при загрузке изображения(загрузке файла) компьютер выдает ошибку и ничего не загружает. Помогите разобраться пожалуйста.
Александр
Posts: 63
Re: Добавление и редактирование страниц, выбор шаблонов
Reply #64 on : Wed December 07, 2011, 00:06:09
Юлия, добрый день!
Скорее всего у вас не хватает прав на загрузку изображений на сервер.
Вы пользуйтесь менеджером файлов в MODX или на Хостинге?
Александр
Posts: 63
Re: Добавление и редактирование страниц, выбор шаблонов
Reply #63 on : Wed December 07, 2011, 00:48:35
Если можно, укажите пожалуйста каким хостингом пользуйтесь
Влад Борнов
Posts: 63
Про видео
Reply #62 on : Thu December 22, 2011, 13:36:58
Скажите, в какой сборке редактора есть кнопка YouTube? В стандарте кнопки этой нет. Ну худой конец дайте ссылке на плагин для TinyMCE.
Александр
Posts: 63
про видео
Reply #61 on : Thu December 22, 2011, 14:47:57
Влад, добрый день!
Кнопка youtube наша личная доработка tineMCE по заказу наших клиентов. Ответил вам на почту
Nephi
Posts: 63
nwVjiPhJrKlAOI
Reply #60 on : Sat December 31, 2011, 11:22:01
You have more useufl info than the British had colonies pre-WWII.
Таня
Posts: 63
Расширенный заголовок
Reply #59 on : Wed March 14, 2012, 13:56:34
При редактирование ресурса не появляется поля «расширенный заголовок» «Описание» «Аннотация»
Эти поля появляются в момент обновления или загрузки страницы редактирования. Но при полной загрузке они исчезают.
Администратор
Posts: 63
Расширенный заголовок
Reply #58 on : Wed March 14, 2012, 14:00:51
Татьяна,
Нам кажется, что данные поля были отключены разработчиками вашего сайта, т.к. не принимают участие в формирование страничек на сайте. У вас раньше также было?
Таня
Posts: 63
Расширенный заголовок
Reply #57 on : Wed March 14, 2012, 14:07:19
Не могу сказать точно, сайт разрабатывала не я. Но мне нужны эти поля для сео оптимизации. Подскажите пожалуйста как их можно активизировать, есть пароль от админки с правами администратора, есть данные от FTP.
Администратор
Posts: 63
Расширенный заголовок
Reply #56 on : Wed March 14, 2012, 14:18:15
Нужно менять шаблоны сайт, и настройку самой CMS. Если у вас есть связь с исполнителем сайта, попросить его это сделать за дополнительные деньги. Если связь потерянна, возможно мы сможешь вам помочь.Остальные рекомендации выслал вам личным письмом
Екатерина
Posts: 63
Дочерний ресурс
Reply #55 on : Sun April 01, 2012, 14:04:58
Здравствуйте, помогите, пожалуйста, никак не могу разобраться!
При создании ресурса все хорошо, все стили на месте. Как только от этого ресурса пытаюсь создать дочерний, теряются куда-то стили не только куса текста, который вставляю, но и шапки, вообще всей страницы.
Что с этим делать?
Источник: dispsoft.ru