среда, 29 апреля 2015 г.

Начало работы в MODX. Первоначальная настройка. Приложения для установки, настройки системы и дружелюбные URL

Статья - заметка, о том какие манипуляции нужно произвести в свежеустановленной CMF MODX для комфортной работы как программиста, так и контент менеджера.

Первоначальные приложения для установки:

CKEditor - редактор текста для содержимого документов(поле content), который преобразует форматирование, которое задает контент менеджер в HTML код;
Ace - редактор кода для шаблонов, сниппетов, чанков и плагинов;
pdoTools - набор удобных и производительных инструментов, включающие в себя аналог getResources - сниппет для вывода полей ресурсов списком с помощью чанков, которые используются как шаблоны для вывода и аналог fastField - сниппет, позволяющий быстро и удобно получить поле стороннего ресурса таким образом: [[#23.pagetitle]];
Console - полезное дополнение, позволяющее зайти в "Приложения"=>"Console" и запустить php скрипт, который не требуется вводить ни в плагины ни в сниппеты, а просто использовать один(или более) раз;
FormIt - сниппет, облегчающий работу с HTML формами(<form>). Его можно положить на странице с формой и он будет ждать момента GET или POST запроса к этой странице, после чего начнет работать;
phpthumbof - сниппет, генерирующий ссылки на изображения с заданными параметрами размеров и качества, обычно используется для вывода уменьшенных версий изображений в тех местах - где нет смысла выводить исходное качество изображения, где нужно сохранить трафик пользователя и увеличить скорость загрузки страницы;
Gallery - расширение для составление галерей, альбомов, и использования их в сайтах для различных слайдеров или сетов фотографий;
MIGX - дополнение, позволяющее создать дополнительное поле в виде таблицы, которое можно использовать для слайдеров, списка партнеров, или просто небольшой информации, которая недостойна того, чтобы создавать для неё отдельный ресурс(я про него рассказывал);
Collections - дополнение, с помощью которого дочерние ресурсы можно выводить не в общем древе, а в отдельной вкладке ресурса, с возможностью вывода дополнительной инфы и быстрого её редактирования(я про него рассказывал);
Wayfinder - сниппет для вывода многоуровневых менюшек на сайтах;
translit - дополнение, которое используется для работы с ЧПУ(Человеку Понятный Урл), оно транслиретирует русский pagetitle документов при сохранении и формирует из него alias, из которых как раз и формируются адреса страниц в MODX;
MinifyX - крутой сниппет, который позволяет работать c SCSS, LESS и coffee прямо в MODX, и компилировать их в css и js на лету, при загрузке страниц(понятия не имею почему это почти нигде не упоминается, но на страничке, ссылку на которую я прикрепил, можно зайти в модальное окно "Документация" и убедится, посмотреть).

Настройки системы:

site_name: **Имя сайта**

friendly_alias_translit: russian
use_alias_path: Да
friendly_urls: Да

error_page_header: HTTP/1.0 404
unauthorized_page_header: HTTP/1.0 401 Unauthorized

upload_files: txt,html,htm,xml,js,css,zip,gz,rar,z,tgz,tar,htaccess,mp3,mp4,aac,wav,au,wmv,avi,mpg,mpeg,pdf,doc,docx,xls,xlsx,ppt,pptx,jpg,jpeg,png,gif,psd,ico,bmp,odt,ods,odp,odb,odg,odf,otf,eot,svg,ttf,woff,woff2,json

Здесь настраиваем имя сайта, ЧПУ, избегаем проблем с кодировками и разрешаем добавлять в MODX через менеджер файлов дополнительно svg, шрифты и json.

Дополнительная настройка для ЧПУ:

"Сайт"=>"Типы содержимого"=>Строчка с HTML=>Убираем расширение файла, оставляем клетку пустой.
Переименовываем ht.access в .htaccess

При размещении готовой верстки в чанк или шаблон не забудьте добавить 
<base href="[[++site_url]]" />
в <head> страницы, иначе не избежать проблем с выводом изображений, скриптов и стилей :)

Читать далее

суббота, 11 апреля 2015 г.

MODX TV Список(Множественный и одиночный выбор). Применение возможностей @EVAL, @SELECT

TV в MODX является очень мощным инструментом, у которого куча возможностей: от стандартных и вполне очевидных и до тех, на какие у вас хватит фантазии, ведь в доп. полях практически нет никаких ограничений. Я например не могу себе представить то, что нельзя замутить с помощью TV(в разумных пределах естественно).

Существует несколько стандартных типов ввода в TV, которые позволяют выводить в админке списки из различных пунктов для выбора(одиночного или множественного). 
Они дают возможность контент менеджеру выбрать из предложенного списка какой либо пункт:

Или несколько пунктов:
А вы, как разработчик сайта, можете использовать полученное значение выбора как вам заблагорассудится:

1. Просто вывод выбранного текста
Можно,например, использовать при вводе в Возможные значения такого содержимого: 
Из админки это будет выглядеть так:
И, например, при вводе в шаблон ресурса [[*example-choice]]  в нужном месте мы, при открытии страницы, получим "Текст для вывода 1" или "Текст для вывода 2" в зависимости от нашего выбора.
Это надуманный пример, но удобен для начального понимания того как работает поле Возможные значения: разделяет содержимое по знаку "||" и выводит их пунктами в списке выбора.

2. Использование значения для режима вывода содержимого на странице можно реализовать если ввести что-то подобное в возможные значениях:
Из админки это, будет выглядеть так:
Таким образом MODX берет из поля Возможные значения содержимое, делит его по знаку "||", и к тому же каждый поделенный пункт делит еще по знаку ==, беря первую часть(например "Маленький слайдер") как текст для списка, который видит пользователь админки, а вторую часть("small") как значение, которое будет выводится, когда мы будем запрашивать значение нашего TV: [[*slider-type]] выведет small.
Теперь мы можем добавить примитивную логику в наш шаблон странички, с помощью фильтров MODX, чтобы выводить маленький или большой слайдер в зависимости от выбора:
[[*slider-type:is=`small`:then=`[[$SmallSlider]]`:else=`[[$BigSlider]]`]]
Здесь уже пример более приближен к реальности, и взят из реального проекта.

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

Достаточно просто прописать ключевое слово вначале "@SELECT" для SQL, и "@EVAL" для PHP.
Как видно на первом скрине с SQL кодом: в нем я просто выбираю список ресурсов из БД, у которых родитель с id 53, и шаблон с id 19. Для вывода списка ресурсов по идее предназначен соответствующий тип вывода "Список ресурсов"(он и правильнее для этой цели с точки зрения реализации с помощью AJAX подгрузки по поиску), но дело в том что в нем нет возможности выбора нескольких пунктов сразу, как на 2-м скрине из этой статьи, на нем вы можете посмотреть результат вывода пунктов с помощью SELECT:

Выборка из БД с помощью "@SELECT" не требует дополнительных усилий по оформлению в отличие от "@EVAL" подхода, в нем нам необходимо с помощью какого-либо сниппета для вывода списка(в данном случае getImageList от MIGX, но можно использовать и всем хорошо знакомый getResources) привести наш массив пунктов к уже знакомому виду: "Значение 1==value1||Значение 2==value2".
Только в данном случае мы к началу добавляем еще один пункт "- Выберите Вопрос - Ответ==||", который будет выдавать нам пустое значение при его выборе.
Как я уже сказал последний пример использования поля Возможные значения содержит код, использующий сниппет getImageList для получения списка пунктов из MIGX таблички в каком-либо ресурсе, что по-моему очень круто и для некоторых случаев удобно: когда какая либо информация не заслуживает отдельного ресурса(не должна иметь собственную страницу и имеет пару полей для заполнения) как в моем случае вопрос - ответ:

Но в тоже время есть потребность выбирать нужный вопрос-ответ для вывода в подвале(например как на моем 2-м скрине в этой статье).

Кстати: при использовании Списка(множественный выбор) следует выбрать тип вывода: "Разделитель" и  ввести запятую: "," в предложенное поле:
тогда при выборе, например, нескольких ресурсов в нужном месте у вас будет выводится что-то подобное: "93,95,97". Такую форму вывода можно использовать например в сниппете getResources:
[[!getResources? &parents=`-1` &resources=`[[*multi-docs]]` &tpl=`myRowTpl`]]

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

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

иначе время будет не актуально. Но нужно понимать что так делать не правильно, ведь подобную задачу обычно выполняют сниппеты, не смотря на это можно придумать и что-то более подходящее для доп. поля, допустим: если создать скрытый TV(migx-table-summ) по соседству с MIGX TV(migx-table), и в поле Значение по умолчанию migx-table-summ ввести некоторый код, который из таблицы MIGX берет значения из одного из столбцов(например цена), умножает на значение из другого столбца(например количество) то можно выводить и получать результирующую сумму из таблицы migx-table просто вызвав TV в теле шаблона ресурса: [[*migx-table-summ]].
Хотя это довольно спорный момент, скорее всего очевиднее было бы писать подобный код в теле какого-либо сниппета, и вызвать его например так: [[*migx-table:calcSumm]], но полезно знать что есть такая возможность, так как она может пригодится.
Вышепреведенный код можно найти в моем репо:
https://github.com/Jonybang/ModX-tehniques/tree/master/dynamic-select
Ссылки:
Документация по @SELECT
Input и Output фильтры в MODX
Обсуждение по вводу в Возможные значения исполняемого кода
Документация по @EVAL который можно практически в любом месте использовать в MODX
Использование SQL в Возможных значениях
Читать далее