Примеры GalleryItemPagination

advertisement
Устанавливаем MODx Revolution 2.x
В первую очередь, необходимо скачать MODx Revolution 2.x. У вас есть возможность сскачать прямо
с сайта разработчика.
"Traditional" или "Advanced"?
Открыв страничку загрузки, вы сможете увидеть 2 варианта "Traditional" и "Advanced". Какому же
отдать предпочтение?
Traditional является скомпилированным пакетом из репозитория Git. Вам остается лишь элементарно
распаковать файлы на выбраный сервер и выполнить все шаги руководства по установке. Основная
масса пользователей традиционно используют именно данную версию.
Advanced является пакетом по размеру практически в два раза менее, нежели "Traditional", так как
содержимое "ядра" заархивировано. MODx Setup распаковывает данный пакет в ходе инсталляции.
Данный вариант советуется применять лишь в том случае, в случае если вы намереваетесь смешать
каталоги с ядром, управлением и коннекторами (connectors), и в случае если вы располагаете SSHдоступ и понимаете, как скорректировать права доступа к папкам. В случае если вы избираете
данный вариант, перейдите к разделу "Advanced Installation".
Примечание: Так как я избрал вариант Traditional, в следующем изложении речь пойдет лишь о
данном варианте. В случае если вас интересуют остальные - почитайте оригинальную
документацию.
Подготавливаем базу
Так как MODx функционирует с использованием базы данных MySQL, накануне установки
необходимо создать базу. При данном нужно выяснить такие данные:
•
•
•
•
название сервера баз данных (выяснить у хостинг-провайдера)
название базы
логин юзера для доступа к базе
пароль юзера
Загружаем дистрибутив не сервер
После подготовки базы, закачивайте дистрибутив на сервер хостера. При данном лучше закачивать
непосредственно в виде архива, хоть данное возможно лишь в том случае, в случае если вы затем
сможете разархивировать дистрибутив там. Мой хостер (mchost.ru) дает право закачать zip-архив и
автоматом расположить его на хостинге, что я и проделал.
В случае если подобная возможность отсутствует, то доведется развернуть архив на локальном
компьютере и закачать его посредством FTP. Разница значимая, так как объем архива 8,25
Мегабайта, а уже в развернутом виде он занимает целых 21,27 МБ.
Перед тем как перейти к этапу инсталляции, необходимо еще проконтролировать, что на каталогам
core/cache/ и core/config/ дано право записи. Вот сейчас, как будто бы все готово и имеется
возможность приступить непосредственно к установки.
Административная панелью
После щелка по кнопочке "Войти", вам будет предложен ввод имени и пароля админа сайта.
Далее вы попадаете в админ. панель MODx. Прочитайте (в случае если владеете английским), далее
закрываем данное окно и видим, и перед нами предстает, админ. панель в ее изначальном состоянии.
Примечание: Далее для того чтобы попасть в панель управления, вам нужно ввести в адресной
строчке браузера http://ваш_сайт/manager/ и перед вами предстанет также форма ввода имени и
пароля пользователя.
Установка базового пакета
Начало установки
MODx Revolution скачан, и перед тем как начать установку, прочитайте Советы к серверу, а равным
образом удостоверьтесь в том, что папки /core/cache и core/config являются доступными для записи.
В случае если в ходе установки появились трудности, просьба прочитайте Проблемы при установке.
Для старта установки перейдите по адресу 'http://вашсайт/setup'.
На 1 страничке вам порекомендуют сделать выбор языка. Жмите далее
Параметры установки
Далее, вы увидите страничку с Параметрами установки
Вам будет доступен вариант лишь новейшей установки. В случае если вам нужно поменять права
доступа для вашего вебсервера, у вас есть возможность сделать это в текстовых полях. Основная
масса серверов прекрасно работает с правами по умолчанию. Жмите дальше для продолжения.
Настройка базы данных
В этом месте вам нужно заполнить данные о вашей базе данных.
Добавьте имя вашей базы данных, а так же URL где находится ваша база. Для основной массы
пользователей это localhost.
В свою очередь, вы можете изменить префикс таблиц. Это префикс таблиц,их MODX применяет для
собственных переменных. Замена префикса таблицы может понадобиться, в случае если вы
намереваетесь в одной базе данных хранить данные многих сайтов на MODx.
Когда завершите жмите на ссылочку Проверить соединение с сервером баз данных и показать
перечень доступных сопоставлений. Если возникли какие-нибудь ошибки, вы увидите их внизу. В
случае если предстанут ошибки, удостоверьтесь, что вы верно ввели имя пользователя базы данных
или же пароль. Вполне вероятно названный вами пользователь не располагает правом создавать базу
данных, тогда нужно создать ее вручную.
MySQL Notes
В случае если у вас MySQL сервер располагает не стандартным портом, вы сможете назначить его
"my.database.com;port=3307", прибавляя к IP адресу или же имени хоста ;port= .
В случае если MySql сервер не располагает поддержкой сети, то вы сможете применять имя соккета
";unix_socket=MySQL"
Microsoft SQL Server Notes
Поддержка Microsoft SQL Server предусмотрена с версии MODx Revolution 2.1
В зависимости от конфигурации сети вашего SQL сервера, нужно указать последующие настройки:
• Named pipe: (local)/SQLEXPRESS
• Tcp/ip: 127.0.0.1,2301 (IP, port)
Вследствие этого PDO драйвер вашего сервера будет функционировать и вы не уведите ошибку
когда нажмете Проверить соединение с сервером баз данных и показать перечень доступных
сопоставлений. В случае если данное все таки приключалось это говорит о том, что у вас имеются
затруднения с соединением с базой данных, аутентификацией или же выбором базы данных. В
последствии проверки и исправления всех данных жмите Назад, для того чтобы возвратиться на
предшествующую страничку и затем Далее, что бы возвратиться на страничку настроек базы
данных.
Параметры кодировки и сравнения
После этого внизу выплывет последующее окно - выбор кодировки и сравнения базы данных.
В основной массе случаев вы можете сохранить эти значения по умолчанию. Но, в случае если вами
нужно изменить их, удостоверьтесь, что параметр сравнения совместим с кодировкой. Для
продолжения установки жмите Создание и проверка выборки из базы данных Microsoft SQL Server
Notes.
Заполняем форму, необходимую для создания системного администратора. MODx советует не
использовать имя администратора 'admin'. Это известное имя администратора и применяется
традиционно для взлома системы хакерами.
Далее вводите e-mail администратора, а затем пароль. Жмем Далее
Проверка системы перед установкой
В MODx будет выведено окно в котором будут отображены все результатами проверки вашей
системы перед установкой. В случае если проверка не была закончена, удостоверьтесь, что ваша
система отвечает условиям Рекомендаций к серверу и нужные директории располагают правом на
запись. После успешного прохождения проверки, нажимайте Установить.
В случае если перед вами предстанет пустой экран или же процесс установки не пойдет после
нажатия на Установить, опробуйте следующее:
1. Удостоверьтесь что директории /core/packges, /core/import и /core/export располагают правом на
запись
2. Удостоверьтесь что в файле опций PHP php.ini выставлены следующие значения memory_limit
128M и max_execution_time 120
3. Создайте пустой файл /core/config/config.inc.php и удостоверьтесь, что у него выставлены права
на запись. НЕ СТИТ КОПИРовать config.inc.tpl, создайте пустой файл.
4. Создайте тему на форуме с вашей проблемой, указав настройки вашего сервера и данные об
установке и вам непременно помогут.
Отчет после завершения установки
MODx сообщит вам в случае если появились какие нибудь ошибки под час установки и даст вам
право переустановки, что бы исправить данные ошибки. После успешной установки, нажимайте.
Далее и вам нужно будет произвести заключительную настройку.
MODx советует удостовериться, что папка setup удалена для защиты вашего интернет-сайт от пробы
запуска установщика сторонними вы можете проделать это поставив галочку в чекбоксе.
Теперь же вам осталось нажать на Вход и будет открыто окошко входа в систему админа. Установка
благополучно закончена!
Установка расширенного пакета
Из этой инструкции вы узнаете несколько деталей касающихся установки дистрибутива MODx
Advanced. Мы советуем ставить этот дистрибутив, в случае если:
Вы намереваетесь переименовать папки manager/ или же connectors/ или же переместить папку core/;
У Вас имеется доступ к серверу по SSH или же вы просто можете переместить и сформировать папки
на вашем сервере с правами на запись.
Накануне установки прочитайте Советы к серверу.
Подготовка установки
После скачивания дистрибутива MODx Revolution Advanced, вам необходимо закачать его на сервер
и распаковать. У вас есть две папки core/ и setup/. Теперь, в случае если вы намереваетесь
переместить папку core/, проделайте это сейчас. В случае если вы не намереваетесь этого делать,
откройте браузер и введите в адресной строчке 'http://ваш_сайт/setup/' далее перейдите в раздел
Установка контекста, данной инструкции.
Переименование и перемещение core
MODx Revolution предоставляет вам право переименовать или же переместить папку core/ для более
высокого уровня защиты вашей системы.
Если вы хотите переименовать или переместить папки core/, MODx советует проделать это до
установки. Попросту переименуйте или же переместите core и setup сначала вам будет предложено
ввести новое размещение папки core
Впишите в текстовое поле полный адрес новейшего расположения папки core. В случае если MODx
может отыскать core, вы продолжите стандартную установку. В случае если MODx не сумеете
отыскать директорию, проверьте что вы ввели адрес верно и что определили права на чтение и
файлы папки core/cache доступными для записи.
MODx имеет возможность спросить вас сделать файл setup/includes/core.config.php доступным для
записи. Это необходимо для изменения месторасположения core, и вы сможете это сделать до
установки.
Конфигурационный ключ вебсайта
Сейчас MODx спросит у вас избрать язык. После того как вы это сделаете, покажется окошко
приветствия MODx, а ниже вопрос желаете ли вы изменить конфигурационный ключ MODx. Это
даст возможность вам запускать несколько веб- сайтов с общим ядром, для любого сайта нужно
будет определить его уникальный конфигурационный ключ.
Что бы изменить его, элементарно кликните мышкой на ссылку нажмите здесь в предложении
изменить конфигурационный ключ, и вам будет предложено окошко для ввода.
Укажите собственный уникальный конфигурационный ключ и нажимайте Далее.
Расширенные опции
Сейчас вам будут презентованы настройки как при Базовой установке, однако появятся 2
дополнительных пункта. Станет доступен пункт Новая установка, а это именно то, что нам и
необходимо.
Далее будут текстовые поля в которые нужно ввести прав доступа для новых файлов и папок
которые будет создавать MODx во время установке. Права по умолчанию отлично работают, однако
в случае если имеются лимитирования сервера, вы можете изменить права 0775/0664
соответственно.
Далее вы уведите 2 опции избираемые чекбоксом:
Они выделяются серым цветом во время новой установке. (Если начнете обновление, советуем не
отмечать их). Жмите Далее.
Подключение к базе данных
В этом месте вы заполняете необходимую информацию о вашей базе данных.
Добавляете имя вашей базы данных и URL где находится ваша база. Для основной массы
пользователей это localhost.
В свою очередь, у вас есть возможность изменить префикс таблиц. Данный префикс таблиц,
использует MODX для собственных переменных. Это понадобится в случае если вы желаете в
одной базе данных сохранять информацию многих сайтов на MODx.
Когда завершите жмите на ссылочку Проверить соединение с сервером баз данных. Если появятся
какие нибудь ошибки, вы заметите их ниже. В случае если возникнут ошибки, удостоверьтесь, что
вы верно ввели имя пользователя базы данных и пароль.
В свою очередь в случае если пользователь определенный вами не располагает правами создавать
базу данных, то сделайте ее вручную.
MySQL Notes
В случае если у вас MySQL сервер обладает не стандартным порт, вы можете назначить его
"my.database.com;port=3307", прибавляя к IP адресу либо имени хоста ;port= .
В случае если MySql сервер не поддерживает сеть, то вы можете применять имя соккета
";unix_socket=MySQL"
Microsoft SQL Server Notes
Поддержка Microsoft SQL Server предусмотрена с версии MODx Revolution 2.1
В зависимости от конфигурации сети вашего SQL сервера, нужно определить следующие опции:
Named pipe: (local)/SQLEXPRESS
Tcp/ip: 127.0.0.1,2301 (IP, port)
Вследствие этого PDO драйвер вашего сервера будет работать и не будет ошибки когда нажмете
Проверить соединение с сервером баз данных. В случае если это все таки приключалось это говорит
о том, что у вас имеются осложнения соединения с базой данных, аутентификацией или же выбором
базы данных. Когда исправите все ошибки жмите Назад, для того чтобы возвратиться на
предшествующую страничку и затем Далее, для того, что бы вернуться на страничку опций
подключения к базе данных.
Характеристики кодировки и сравнения
После данного внизу покажется следующее окошко выбора кодировки и сравнения базы данных.
В основной массе ситуаций вы сможете оставить значения по умолчанию. Но, в случае если вам
нужно изменить их удостоверьтесь, что параметр сопоставления полностью совпадает с кодировкой.
Что бы продолжить установку жмите Создание и испытание выборки из базы данных.
Создаем администратора
Заполняйте в данной форме данные, нужные для создания администратора системы. MODx не
советует применять имя администратора 'admin'. Это слишком распространенное имя
администратора и применяется для взлома системы.
После ввода имени вводите e-mail админа и пароль. Что бы продолжить установку жмите Далее.
Устанавливаем контекст
Дальше нужно ввести новые имена для папок connectors/, manager/ и корневой директории.
Изменяйте лишь те параметры которые вам нужно.
Нужно менять оба параметра - путь к контексту и URL контекста
В случае если вы поменяли параметры контекста которые относятся к административной части, то
для входа в панель управления MODx вам нужно будет вводить адрес вида
'http://вашсайт/новый_URL_административной_части'
Проверяем систему перед установкой
Традиционно MODx выведет окошко с итогами проверки вашей системы перед установкой. В случае
если проверка не пройдет, удостоверьтесь, что ваша система отвечает всем требованиям
Рекомендаций к серверу и нужные директории располагают правом на запись.
Далее когда все будет уже готово и вы благополучно пройдете проверку, нажмите Установить.
В случае если у вас появится пустой экран или же процесс установки не пойдет после нажатия на
Установить, проконтролируйте следующее:
1. Удостоверьтесь что директории /core/peckeges, /core/import и /core/export располагают правом на
запись
2. Удостоверьтесь что в файле опций PHP php.ini выставлены параметры memory_limit 128M и
max_execution_time 120
3. Создайте пустой файл /core/config/config.inc.php и удостоверьтесь, что у него выставлены права на
запись. НЕ копируйте config.inc.tpl! Создайте пустой файл
4. Создайте на форуме тему с вашей проблемой прикрепив опции вашего сервера и данные об
установке и вам несомненно помогут..
MODx проинформирует вам в случае если появились какие нибудь погрешности под час установки и
даст вам право переустановки, что бы поправить данные ошибки.
Когда установка благополучно закончится, нажмите далее и вам нужно будет произвести
заключительную настройку.
MODx советует удостовериться, что папка setup удалена что бы защитить ваш сайт от пробы запуска
установщика сторонними, вы можете это проделать, поставив галочку в чекбоксе.
Далее вам осталось нажать на Вход и перед вам будет открыто окошко входа в систему
администратора. Установка благополучно и полностью закончена!
Что такое MODX Revolution
MODX это название системы управления контентом. Что же это означает? Ну, это находится в
зависимости от того, конкретно кто Вы:
Конечный пользователь
MODX это система, благодаря которой имеется возможность публикации вашей информацию на
сайте в удобной для вас форме, и когда пожелаете. Он в свою очередь предлагает вполне
дружественный интерфейс, у вас есть возможность сделать все элементарно (или же сложно), как
вам угодно).
У вас есть возможность сделать все, от обычного интернет-сайта, блога, и до большого портала с
MODx, и затем управлять этим в понятном и комфортном административном интерфейсе. У вас есть
возможность перетаскивать странички по древу (Drag and drop), для того чтобы внести изменения в
порядок и переместить их. Оставить ресурсы неизданными до окончания работы над ними.
Планировать публикацию в конкретное время.
MODX несомненно поможет правильно и наглядно организовать Ваш контент, как вы желаете, и
просто получить отличные результаты в SEO. MODX абсолютно, на 100 процентов совместим с
дружественными URL. Получить ссылку типа mysite.ru/news/url.html очень просто, так же просто,
как структуризация вашего веб-сайта.
Верстальщик
Вы давно желали абсолютной свободы с HTML и CSS? Утомились от взлома имеющихся систем, для
того чтобы заставить ваш дизайн функционировать так, как вы сего желаете? MODX не производит
генерацию строки HTML - он представляет наружный дизайн так как Вы его настроите.
Вы можете применять MODX как систему управления контентом (CMS), MODX предусматривает
систему гибких шаблонов, дает возможность легко использовать AJAX. Храните CSS и изображения,
там где пожелаете. ВЫ можете ставить расширения напрямик из менеджера. Все элементарно!
Developers (Badass Billy)
Вы пробовали различные CMS, однако увидели в них только неразбериху чересчур огромной
численности несвязанных частей кода, либо попросту они не дают необходимого перечня
возможностей и не в достаточной мере элегантны. Вы смотрели на фреймворков, и нашли, что они
располагают функционалом, однако не производят управления контентом, не располагают сносным
интерфейсом для ваших посетителей. Вы желаете силу и гибкость, пользовательский интерфейс от
системы управления контентом.
MODx Revolution абсолютно гибкий и массивный, располагает надежным API, сформированный на
принципах объектно-нацеленного программирования и применения PDO объектно-реляционной
модели (ОРМ) под именем xPDO . В придачу к данному,Sencha мощнейший интерфейс пользователя
(UI). Удобно настраиваемые характеристики и множества. Предусмотрена поддержка
интернационализации. Система управлениями пакетами разработана таким образом, что вы сможете
упаковать ваш код и поставить его на ином сайте. Добавка пользовательских страничек в менеджер
для пуска собственных приложений в MODx.
MODX, по сути, располагает массой терминов. Однако ключевые следующие:
Ресурсы
Ресурсом может быть практически HTML содержание, либо файл, ссылка либо символическая
ссылка, либо что-то еще.
Шаблоны (Template)
Шаблоны являются домом, в котором проживают ресурсы. Шаблон традиционно имеет footer и
header странички
Переменные (Template Variables)
Template Variables (TV) подразумевает пользовательские поля для шаблона, что дает возможность
пользователю определить динамические роли для ресурсов. Неплохим образчиком будет "tags" TV,
который дает возможность определить теги для ресурса. Вы сможете располагать абсолютной
численностью TV на одной страничке.
Чанки (Chunk)
Чанки это обыкновенные блоки контента, в них имеется возможность вложить текст который вам
нужен. В них комфортно сохранять циклический контент и таким вот образом избежать
дублирования. Чанки могут включать Сниппеты, либо иные элементы (Snippet, Chunk, TV, etc).
Сниппеты (Snippets)
Сниппетами называются динамичные части кода PHP, которые активируются при загрузке
странички. Они могут делать все, в частности организацию пользовательских меню, получение
пользовательской информации, обработка форм и прочее.
Плагины (Plugins)
Плагинами называются части кода PHP, которые активируются, под определенное событие. Они
традиционно применяются для расширения перечня возможностей ядра что-то выполнить под час
процесса загрузки - к примеру, удаление скверных слов в контенте, управление направлениями
старых страничек и прочее.
Так что же случается под час запроса?
MODX загружает необходимый ресурс, избирает для него шаблон, а потом размещает содержание
ресурса в данный шаблон. MODX впоследствии производит обработку полученных комбинаций
материалов, сменяю любые теги, которые имеют все шансы быть в нем, в режиме их следования.
Затем он дает ответ в браузере пользователя.
Термины
Add-on (Дополнение)
Компонент MODx, который не производит замену ядра и не расширяет классы MODx, однако все же
гарантирует добавочную функциональность.
Asset (Актив, Собственность)
Всякий тип файлов ресурсов, которые традиционно расположены в папке /assets, которая
установлена константой MODX_ASSETS_PATH; имеет возможность содержать сторонние
составляющие, библиотеки, иллюстрации, css файлы, JavaScript, файлы классов и прочее.
Back-end (Админка)
Синоним интерфейса управления MODx.
Category (Категория)
Добавочное имя систематизации, которое может добавляться к каждому элементу или же набору
параметров (и иных объектов в поздних версиях Revolution) и которое изолирует объект от иных
таких же.
Chunk Tags (Тег Чанка)
Теги в том виде которые мы можем применять как чанки.
Component (Компонент)
Так же именуемый "Third-party Component", или же 3PC, Компонент традиционно дает
дополнительные функциональные возможности для MODx, традиционно в виде опций, расширений
ядра или же шаблонов.
Content Type (Тип Содержимого)
Определяет расширение, mime-тип и двоичные опции для всякого ресурса.
Context (Контекст)
Контейнер ресурсов и опций, которые используются по целому ряду обстоятельств; традиционно
применяется для создания много контекстных веб- сайтов, таких как поддомены, веб-сайты на
различных языках и прочее.
Context Setting (Настройки Контекста)
Одиночный параметр для данного контекста который имеет новое значение или же переопределяет
значение системных опций.
Core Workspace (Рабочее пространство ядра)
Любое ядро MODx представляется именованным рабочим пространством. В то время когда вы
изначально ставите MODx, ядро применяемое приложением установки записывается в базу данных
как Default MODx Workspace. В будущих релизах MODx появится возможность управлять многими
рабочими пространствами с единой базой данных непосредственно из менеджера. Это даст
возможность отделить обновление ядра MODx вследствие добавления рабочего пространства ядра
и выбрав пункт меню у вас появится возможность применить полностью новую установку ядра
после испытания на переходном сервере или же быстро возвратиться к предшествующему рабочему
пространству, которое функционирует как надо. Это будет в особенности выгодно для
многосайтовых конфигураций, функционирующих на одном ядре MODx.
Document (Документ)
Установленный тип ресурсов, который относится, традиционно, к обыкновенной страничке сайта.
Document Identifier (Идентификатор Документа)
Смотреть Resource Identifier (Идентификатор Ресурса).
Element (Элемент)
Так же именуемый "Content Elements", попросту частный Шаблон, Переменная Шаблона, Чанк,
Снипет, Плагин, Категория или же пакет параметров видимых в дереве Элементов Менеджера.
Extension (Расширение)
В свою очередь именуемое "Core Extension". Компонент для MODx, который трансформирует ядро
MODx, такой как особый класс User либо класс авторизации, инструмент кеширования либо класс
для управления контекстами.
File Resolver (Файловый Резольвер - Решатель)
Вид xPDOVehicle решателя копирующий файлы из нынешнего месторасположения в предписанное
место в Transport Package.
Language Tags (Теги Языка)
Теги типа LanguageStringKey ссылающиеся на записи MODx Lexicon.
Lexicon (Словарь)
Lexicon - словарь в котором собраны слова или фразы любой культуры (определеннее нежели язык, к
примеру en-UK) который применяется для интернационализации приложений в менеджере и может
применятся разработчиками дополнений и расширений ядра, для того чтобы гарантировать
локализацию для личных компонентов. Он замещает языковые файлы MODx и дает возможность
налаживать записи напрямик из менеджера.
Lexicon Topic (прежде Foci) (Тема Словаря)
Собрание записей словаря сконцентрированных на конкретной теме. Revolution подгружает записи
словаря когда необходимо и лишь по собственной теме, что сокращает время загрузки.
Link Tags (Теги ссылок)
Теги типа которые ссылаются на URL определенного ресурса.
Manager (Менеджер)
Управленческий интерфейс, админка.
Namespace (Пространство имен)
Координационный тег для частей, который применяется для идентификации записей словаря, опций
и иных сопряженных с частей объектов на веб-сайте. Так же ориентирует полный путь, по коему
компонент может быть отыскан.
Placeholder Tags (Теги плейсхолдеров)
Теги типа которые ссылаются на плейсхолдеры (заполнители) MODx, традиционно ставятся при
помощи $modx->setPlaceholder('placeholderName','value') в снипете или же плагине.
Resource Field (Поле ресурса)
Любое из полей таблицы site_content, такие как pagetitle, longtitle, introtext, alias, menuindex и прочие.
Отдельные поля легкодоступны на экране добавления/редактирования документа и через теги
ресурсов; Остальные можно получить лишь посредством document Object.
Property (Свойство)
Единичная переменная элемента; применяется для установки конкретного параметра элемента.
Property Set (Пакет свойств)
Пакет переменных, применяемых для конкретных целей с составляющей. Пакет параметров
прикрепляется к составляющим, и располагают особенностями, которые они передают как
параметры в элементах. К примеру, пользовательский набор свойств для снипета передающий
специфичные параметры в элемент, определяя значения по умолчанию.
Resource (Ресурс)
Вид контейнера, который интерпретирован парсером для извлечения содержимого. Может
располагать любой численностью производных классов; преимущественно применяется Document.
Resource Identifier (Идентификатор ресурса)
В свою очередь именуется Document ID, Resource ID, или же Document Identifier; количество в
скобках в дереве ресурсов MODx в административной панели которое обозначает уникальный
личный номер конкретного ресурса.
Resource Tags (Теги ресурсов)
Теги вида, которые могут быть применены для получения полей ресурса или же переменных в
шаблоне.
Resolver (for xPDOVehicles)
Пост-процессором именуется скрипт или же определенное действие, которое рассчитывается после
того, как средство установлено или же удалено. Решатели практически постоянно запускаются после
того, как объект средства исполняет метод save() и способен исполнять действия над MODx, перед
тем как, что то произойдет в процессе установки/удаления.
Пример PHP решателя - тот, который присоединяет события плагинов к заново поставленному
плагину.
Пример файлового решателя - это тот, который воспроизводит папку assets/ditto в xPDOVehicle в
новейшую папку /modx/assets/ditto.
Setting Tags (Теги опций)
Теги вида ссылающиеся на системные опции MODx, опции контекста и опции пользователя.
Snippet Tags (Теги сниппетов)
Теги вида , в свою очередь известны как вызов сниппета.
Static Resource (Статический ресурс)
Установленный тип ресурса, который считается непосредственный ссылкой на определенный файл
на MODx сайте. Содержимое сменяется содержимым данного файла.
Symlink (Символическая ссылка)
Тип ресурса, ссылающегося на единый, ограниченный ресурс MODx; Содержимое ресурса будет
заменено содержимым символической ссылки.
System Setting (Системные настройки)
Переменная интернет-сайта. Может быть переопределена посредством опций контекста и опций
пользователя.
Template Variables (Переменные шаблонов)
Пользовательские поля ресурсов, формируемые пользователем во время добавлении или же
редактировании документа и получаемые с применением тегов содержимого.
Transport Package (Транспортный пакет)
Упакованный и сжатый zip-ом пакет транспортных средств, которые могут быть просто
распространены (транспортированы) от одного рабочего пространства к иному.
Transport Provider (прежде Provisioner) (Провайдер)
Web-сервис, который дает возможность удаленную установку пакетов напрямик из
административной панели MODx.
Transport Vehicles (Средство транспортировки)
Конструктивный контейнер, который может инкапсулировать артефакт, который может быть
расположен в транспортном пакете. Транспортные средства сохраняют собственные полезные
содержимые в удобном формате.
User Setting (Опции пользователя)
Пользовательские опции. Формируются или переписываются такие же опции контекста или же
системные опции. Применяются для обеспечивания исключительных опций для данного
пользователя.
Weblink (web-ссылка)
Вид ресурса, который ссылается на определенный URL или же ресурс MODx, перенаправляет
посетителя на данный URL или же ресурс.
Validator (for xPDOVehicles) - (Валидатор)
Пре-процессор: скрипт или же определенное действие, которое исполняется до установки или же
удаления пакета. В случае если валидатор отдаёт true, установка/удаление пройдет в обыкновенном
режиме. В случае если валидатор возвращает false, MODx не станет удалять или же устанавливать
пакет.
Валидатор можно использовать для определения того, имеется ли каталог и доступен ли он для
записи, для того чтобы удостовериться, что иные компоненты уже установлены или для того чтобы
найти, та ли верcия MySQL и PHP применяется на сервере.
xPDOVehicle
Ключевой класс транспортного пакета, xPDOVehicle, сохраняет экземпляры xPDOObject (которые
являются записями в таблице) в его подходящем виде, а равным образом всевозможные атрибуты,
которые распоряжаются тем, как объект установился/удалился в рабочем пространстве ядра
(посмотрите xPDOVehicle Validators и xPDOVehicle Resolvers)
Структура каталогов
В MODX корневая директория поделена на ряд подкаталогов, любой из которых с собственным
набором функций и задач. Отдельные из данных каталогов могут быть переименованы или же
перемещены и их размещение можно настроить подчас установки.
o connectors/
o Файлы, которые необходимо отметить
o core/
o core/cache/
o core/cache/logs/
o core/cache/mgr/
o core/cache/rss/
o core/cache/web/
o core/components/
o core/config/
o core/docs/
o core/error/
o core/export/
o core/import/
o core/lexicon/
o core/model/
o core/model/modx/
o core/model/modx/mysql/
o core/model/modx/processors/
o core/model/schema/
o core/model/smarty/
o core/packages/
o core/xpdo/
o Файлы, которые стоит отметить
o manager/
o manager/assets/
o manager/assets/controllers/
o manager/assets/templates/
o Файлы, которые стоит отметить
o setup/
o _build/
o Файлы, которые стоит отметить
o assets/
o assets/components/
connectors/
Коннекторы (Connectors) по сути это точки входа для AJAX запросов в MODX, не делающие
никаких манипуляций с базой данных сами по себе; они попросту загружают фундаментальный
класс MODX, проводят проверку любых данных запроса и потом обрабатывают запрос посредством
соответствующего процессора.
К примеру, когда мы организуем ресурс, мы делаем запрос
connectors/resource/index.php?action=create. index.php будет включать файл базового коннектора
(connectors/index.php), создающий образец основного объекта MODX, обрабатывает все
пользовательские переключения Контекста и проводит проверку запросов GET и POST.
connectors/resource/index.php будет "подвергать обработке" запрос и инициировать необходимый
файл процессора, которые мы объясним далее.
Файлы, которые нужно отметить
connectors/index.php — Данный файл в особенности может быть полезен при разработке своих
коннекторов. Элементарно включите данный файл в собственные коннекторы и потом
обрабатывайте запрос применяя $modx->request->handleRequest();
core/ Ядро (Core) - это именно то, что делает MODX таковым MODX. Данный каталог база
абсолютно для всех библиотек для Revolution. Основная масса всего, что вам необходимо, за
исключением менеджера файлов и файлов директивы, располагается в данном каталоге.
core/cache/ Каталог cache содержит все файлы кеша, которые создал MODX. Словари, составляющие,
ресурсы, RSS и данные Smarty производятся по запросу MODX, что значит, что они кешируются
лишь после того, когда к ним адресовались в первый раз.
core/cache/logs/ Записи логов в MODX находятся здесь. Вы отыщете в этом месте файл error.log,
который заключает дату, время, файл и ошибки, которые были записаны MODX.
Для того чтобы записать в данный файл вы можете применять метод $modx->log().
core/cache/mgr/ Данный каталог заключает кешированные данные контекста mgr (Manager). Как и
хоть какой кеш контекста, он будет кешировать опции всякого контекста, которые были изменены с
системных опций по умолчанию.
core/cache/rss/ Кеш всех RSS-лент в MODX.
Создание сайта на MODx
Ресурсы
Ресурсом называется представление странички в MODx, имеются разные виды Ресурсов к примеру
Документ, Веб-ссылки символические Ссылки и Файлы или же другие вещи. Ресурсом по
умолчанию называется Документ - обычное представление страницы вашего интернет-сайта.
Имеется четыре варианта ресурсов Документ, ссылка, символическая ссылка или же ститичный
элемент.
Любой Ресурс располагает уникальным номером ID или же Идентификатором Ресурса. Вследствие
этого MODx располагает сведениями, какой именно ресурс нужно загружать, в то время когда вы его
применяете на собственном сайте. Если вы желаете поставить на ресурс вам нужно использовать для
этого ID. При помощи этого MODx создает ссылку и вам не доведется заботиться при смене
псевдонимов типа контента или же чего нибудь иного MODx заменит вашу ссылку. Просьба
прочитайте Ссылки на Ресурсы далее для того что бы получить большее информации.
Управление Ресурсами
Ресурсы представлены во вкладке Ресурсы в панели управления в дереве левого навигатора. Что бы
отредактировать ресурс, нужно кликнуть по страничке которую желаете редактировать. Либо
кликнуть по Ресурсу правой кнопочкой и избрать пункт Редактировать ресурс. Появится страничка
редактирования ресурса. Что бы изменить содержание ресурса нужно воспользоваться большим
текстовым полем внизу странички. Остальные поля Ресурса могут быть изменены посредством
вкладки вверху странички.
Поля Ресурса
У Ресурса имеются конкретные свойства.Например:
Название
id
template
published
pagetitle
longtitle
description
introtext
Обозначение
ID Ресурса
Это те шаблоны, которые ресурс будут использоваться
Был ли опубликован ресурс, появился ли он во Front-end е
Заголовок ресурса
Большой заглавие ресурса
Расширенное описание ресурса
Либо Резюме, выдержка из содержания ресурса. нужно для блогов или же поиска
Псевдоним который используется в случае если на вашем веб-сайте настроен
alias
дружественный URL. Ресурс с псевдоним home и тип контента html будет
отражаться как home.html в случае если это не контейнер
parent
ID Родительского элемента
Применяется со сниппетом организации меню, прибавляет атрибутссылке и тд.
link_attributes
Может быть много раз применен для различных нужд.
menutitle
Заголовок для Ресурса показываемый ресурсом
menuindex
The order index of the Resource in a menu. Higher order means later
В свою очередь именуется Скрыть от меню, в случае если отмечено то данный
hidemenu
Ресурс не демонстрируется в основной массе снипетах Меню и Навигации
content
Контент Ресурса
Главные поля Ресурса
Название
Описание
Отмечает Контеинер указывать или же нет при показе ресурса с дружеским URL взамен его
isfolder
суффикса
searchable В случае если ресурс можно искать
cacheable
createdby
editedby I
deleted
publishedby
createdon
publishedon
editedon
pub_date
unpub_date
В случае если ресурс Кешируется
ID пользователя который создал ресурс
ID пользователя который изменил ресурс последним
В случае если ресурс удален или отсутствует
ID пользователя который последним опубликовал ресурс
Дата организации ресурса
Дата публикации ресурса
Дата заключительного редактирования ресурса
Запланированная дата публикации
Дата Запланированная для не публикации ресурса
Применение Полей ресурса
Поля Ресурсов легкодоступны из каждого места, применяют синтаксис Переменных шаблона.
[[*pagetitle]] // указывает pagetitle.
[[*id]] // указывает на ID ресурса
[[*createdby]] // Указывает ID пользователя который создал ресурс.
В свою очередь можно применять исходящие фильтры:
// Renders a limited version of the introtext field.
// If it is longer than 100 chars, adds an ...
[[*introtext:ellipsis=`100`]]
// Grabs the user who last edited the Resource's username
[[*editedby:userinfo=`username`]]
// Grabs the user who published the Resource's email
[[*publishedby:userinfo=`email`]]
Доступ к полям ресурса из сниппетов
Выборка полей Ресурса в сниппет просто и свободно. MODx предусматривает обеспечение с
объектом Ресурса в каждом сниппете посредством $modx->resource->ссылка. Например в случае
сниппета которые возвращает pagetitle нынешной странички обратно.
/* выход текущего pagetitle ресурса*/
$output = $modx->resource->get('pagetitle');
return strrev($output);
Ссылки на ресурс
Ссылки на ресурс в MODx динамически управляются посредством Тега Ресурсов. Выглядит это
следующим образом:
[[~123]]
123 это ID ссылки на ресурс. Вы сможете вставить данный тег всюду и MODx динамически
реорганизует URL ресурса.
Вы в свою очередь сможете получить Тег ресурса перетянув ресурс из левой панели в панель
контента.
URL параметры для Тега Ресурсов
Если нужно добавить параметры URL в ваш Тег Ресурса, то быстро просто это можно сделать в
Revolution. Допустим Ресурс располагает ID 42 и URL store/items.html. Мы сможем прибавить таг
параметр URL c переменной Snacks и параметром сортировки 'Taste'. Делается это следующим
образом:
[[~42? &tag=`Snacks` &sort=`Taste`]]
На страничке это будет смотреться как
store/items.html?tag=Snacks&sort=Taste
Посмотрите что взамен апострофа применяются обратные кавычки.
Схема URL в Теге Ресурсов
Вы можете применять схемы для ресурса Тегов.
[[~123? &scheme=`https`]]
Будет представлен URL применяющий https взамен схемы индикации нынешних опций (к примеру
системных опций или же контекстных)
Заглавие Обозначение
-1 (по умолчанию) URL относительно site_url
0 смотрите http
1 смотрите https
full предназначен для возвращения абсолютного URL, начиная с site_url
abs предназначен для возвращения абсолютной ссылки URL, начиная с base_url
http предназначен для возвращения абсолютной ссылки URL, использую http
https предназначен для возвращения абсолютной ссылки URL, используя https
Типы контента
Что же такое типы содержимого?
Типы содержимого это некоторые типы файлов для ресурсов. Тип содержимого сопоставляет ресурс
с расширениями файлов и извещают парсер MODx с каким расширением должна выводиться данная
страничку. Например, ресурс с псевдонимом test и типом содержимого "CSS" будет означать
расширение ".css" и будет выведен как test.css взамен test.html. Это дает возможность вам
организовывать всевозможные файлы из ресурсов.
Применение
В то время когда вы редактируете ресурс, попросту изберите тип содержимого который вам больше
нужен: Сохраните ресур. Это автоматом сопоставит ресурс с избранным типом содержимого и
поставит нужное расширение для ресурса.
Создание нового типа содержимого
Жмите Система->Типы содержимого. Вам будет представлена таблицу заполненная текущими
видами содержимого. Жмите новый тип содержимого и в новом окошке увидите такие строки:
Имя - это имя вида содержимого. Оно предназначено для отражения в списке, и не
оказывает большое влияние на работу типа.
MIME типы- в данном поле вам необходимо ввести MIME тип для данного вида содержимого,
которые сориентирует браузер к какому типу относится ресурс.
Расширением файла называется расширение файла которое означает тип содержимого, в том
числе точку к примеру .doc.
Двоичный- это вид файла text/ascii или же бинарный
Описанием называется необязательное поле предназначенное для описания вашего типа
содержимого.
Жмите сохранить и в перечне будет представлен новый тип содержимого.
В тот момент вы создаете ресурс, то расширение файла, характеризуемое типом содержимого,
которое вы избрали, будет прибавляться к псевдониму ресурса (В случае если вы включили
дружественный URL)
Ссылка на якорь
Что же называется якорем?
Якорем называется ссылка на закладку в текущем документе. Традиционно имя якоря представлено
так
<a name="prohibitted"></a>
Загвоздка применения имени якоря в MODx во включенном дружественном URL, что тег, который
необходим для поддержки условных url смущает браузер, который полагает, что якорь показывает на
главную страницу, которая записана в base.
Но хорошо, что нет ничего не достижимого в MODx и для решения данной проблемы существует
два метода.
Вставляем ссылочку на якорь к URL вручную
Для того, что бы создать ссылки в документе, когда применяется имя якоря prohibited
<a href="documentation/creating-a-site-in-modx/the-structure-of-the-site/resources/alink-to-an-anchor/#prohibited">Архивы</a>
Для того, что бы создать ссылки на ресурс с ID 12, для применения имения якоря "prohibited"
<a href="users-of/polzovatel/#prohibited">Архивы</a>
Применение плагина для автоматического прибавления
ссылки к URL якоря
Как вариант, вы можете применять автоматическое прибавление ссылки к нынешнему ресурсу до
якоря. Вставляйте код в плагин и на вкладке Системные события обозначьте в OnWebPagePrerender
событие(базируясь на данном посте)
if($modx->resource->get('id') !=$modx->config['site_start']) { $modx>resource->_output =
str_replace('href="#','href="' .$modx->makeUrl($modx->resource->get('id'))
.'#',$modx->resource->_output);}
В коде поначалу обследуется на главной страничке или нет(в случае если мы на главной то не нужно
добавлять url на данной странице). В случае если мы не на главной то все ссылочки типа
href="# с href="link-to-page.html#
удостоверьтесь что якоря функционируют как надо. С этим решением, вы можете сослаться на якоря
на иных страницах.
Статический ресурс
Что представляет собой статический ресурс?
Статическими ресурсами называются ресурсы-абстракции файла на вашем сервере. Имеется
возможность вообразить статичный ресурс как условное представление отдельных файлов на вашем
сервере. Как прочие ресурсы в MODx статичный ресурс виден в дереве ресурсов в панели
управления MODx.
Статические ресурсы MODx представляют многочисленные файлы на вашем вэб сервере. Статичный
ресурс может располагать тагами, в содержимом для нахождения пути к файлу. У вас есть
возможность установить путь к файлу посредством опций ресурса, или же воспользоваться снипетом
для динамического нахождения пути.
Статические ресурсы ведут себя как и документ(обыкновенный ресурс). Содержимое в статическом
ресурсе обрабатывается и отражается равным образом, как в документе, однако нужно тип
содержимого определить в соответствии с видом файла, который вы представляете.
В то время когда вы создаете статический ресурс псевдоним не должен иметь расширение файла.
Расширение файла можно добавить типом содержимого. Например, в случае если вы создали
статический ресурс предназначенный для PDF файла на вашем вэб сервере, и дали имя страничке
test. Изберите PDF как вид содержимого и расширение .pdf приплюсовывается к псевдониму
(ожидается, что вы уже создали тип содержимого PDF с расширением .pdf)
Символическая ссылка
Что же такое символические ссылки
Символическая ссылка в MODx Revolution отражает содержимое одного ресурса в иной ресурсе. У
вас есть возможность добавить свежий шаблон или же все конфигурации которые вы желаете, и
разместить ссылку во всяком месте сайта, однако вы не можете прибавить новый контент.
Имеется возможность сделать смешанный ресурс который содержит много ресурсов, однако любая
ссылка располагает своим уникальным URL. Иной метод увидеть этот принцип вообразить, что вы
прибавляете обыкновенный ресурс MODx, однако вы прибавили снипет в контент, который извлек
лишь содержимое с иной странички.
Каким образом можно применять данную особенность:
1. Сделать символическую ссылочку с именем, псевдонимом и ссылкой на родительский документ.
2. В случае если не видите данного попытайтесь очистить кеш вебсайта / кеш документа.
Пример
Для моего интернет-сайта в предоставленном примере будет возвращать содержание моей странички
высшее образование в me.html
Для чего применять символическую ссылку?
• Документ необходимо для чего то поместить в структуре и гугл видит его в прежнем месте
• Документ имеет возможность фактически и логически располагаться более, чем в одном месте на
веб-сайте
• Вы без проблем и легко, желаете обеспечить короткий и несложный URL для документа,
находящегося в глубине структуры веб-сайта.
• Вы желаете чтобы у документа было много наименований: foursquare, 4square, forsquare они все
располагают одним и тем же контентом (любой из них будет отдельная ссылка)
• Большая часть панелей управления хостинга сайтов дают право для создания поддоменов. После
организации поддомена в панели управления, создать символическую ссылку в корень веб-сайта
содержание похоронено далее, вы можете сформировать страницу дорвей, или же скорое средство
добраться до группы сопряженных содержание.
Ссылка
Ссылка что это такое?
Ссылкой называется документ - ссылка. Она не пользует шаблон для отражения и формирования
странички, шаблон нужен только лишь как контейнер для переменных шаблона, которые имеется
возможность добавить к ссылке. Ссылку можно прибавить как пункт меню.
Содержимым ссылки является URL, парсер в том числе и не демонстрирует его, попросту
перенаправляет на URL. Смотрится как обыкновенная ссылка, и применяет содержание как довод
для sendRedirect($url).
Как содержимое ссылки можно применять внешний URL или же ID ресурса для ссылки на ресурс в в
дереве ресурсов MODx.
Пример
Например в вашем меню в футере имеются ссылки на "Политику конфиденциальности", "Условия
использования" и прочее. Однако мы желаем в данное меню прибавить пункт "Наши контакты".
"Наши контакты" одна из главных страничек и в нашем дереве ресурсов занимает высший уровень
для отражения в главном меню. Для отражения в двух меню данного пункта можно перевести ресурс
"Наши контакты" в папку и снять атрибут опубликовать. А в главном меню и меню в футере
организовать ссылку на ID ресурса "Наши контакты", после этого ресурс станет отражаться в меню,
однако размещен в иной папке.
Шаблоны
Что же представляет собой шаблон?
Шаблон заключает HTML-теги разметки, которые характеризуют размещение и наружный вид
вашего сайта и особые теги MODx которые обозначат размещение всевозможных блоков и
динамических объектов. В то время когда документ запрашивается, MODx грузит документ в
шаблон и все особые поля в шаблоне сменяет на соответствующие значения из документа, перед
отправкой странички браузеру пользователя.
Имеется возможность вообразить, что шаблон это строение, а ресурс это человек. У человека может
быть не один дом, однако в один момент времени он имеет возможность проживать лишь в одном
доме.
Ресурсу можно определить лишь один шаблон. Но, ресурсу может изменить шаблон, как человек
имеет возможность перебраться из дома в дом когда пожелает. Шаблон схож с домом, в свою
очередь модифицирует отражение страницы. Шаблон обычно располагает шапкой, подвалом или же
навигационным полем, сайдбар и т.д.
Применение
Для организации шаблона перейдите на вкладку элементы, нажмите правой кнопочкой на шаблоны.
Изберите новейший шаблон и введите ваш HTML код в поле "Код шаблона". Вы сможете
скопировать и вставить код расположенный далее, что бы начать с обычного шаблона.
<html>
<head>
<title>[[*pagetitle]]</title>
<meta name="description" content="
[[*description]]
"/>
</head>
<body>
<h1>
[[*longtitle]]
</h1>
Page ID:
[[*id]]
<br/>
IntroText (Summary):
[[*introtext]]
<br/>
MenuTitle:
[[*menutitle]]
<hr/>
[[*content]]
</body>
</html>
Непременно запишите тег
[[*content]]
данный тег извещает MODx выводить в него ресурс.
По умолчанию MODx сохраняет шаблон в базе данных, в случае если у вас MODx до 2.2.x это лишь
ваша опция. В версиях MODx от 2.2.x предусмотрена возможность избрать где хранить шаблоны: в
базе данных или же в статичных ресурсах применяя медиа источник.
Не забываете, что сделанный шаблон не применяется для ресурсов автоматом, вы обязаны поменять
каждый ресурс, показав какой шаблон применять. Данное отличие от многочисленных систем
управления веб-сайтом, где один шаблон применяется для многочисленных или же всех страниц.
Любая страничка MODx располагает одним шаблоном, который она применяет для вывода ресурсов.
Когда вы сформируете более одного шаблона, вы можете менять всякий ресурс и избирать шаблон
для него из перечня "Шаблон" в опциях ресурса.
Шаблон имеет возможность заключать любые таги, в том числе переменные шаблона, чанки,
сниппеты, и прочие.
Применение полей ресурса в шаблоне
Как вы увидели выше в нашем шаблоне, отдельные поля ресурса можно прибавить в шаблон,
применяя синтаксис [*Имя поля]]. Перечень различных полей ресурсов можно посмотреть здесь.
Например, в случае если нужно представить заголовок странички ресурса в теге
<title>
[[*pagetitle]]
</title>
У вас есть возможность разместить содержимое текущего ресурса используя тег content
<body>
[[*content]]
</body>
Данные теги смотрятся как обыкновенные теги MODx, однако к ним можно применить выходные
фильтры. Например, вы желаете продемонстрировать поле introtext справа в навигационной части,
однако убрать все html теги из него и представить лишь начальные 400 символов. Дальше данный тег
примет вот такой вид:
<div id="rightbar"><code>[[*introtext:stripTags:ellipsis=`400`]]</div>
Переменные шаблона в шаблоне
В случае если шаблон сравнить с домом, то все переменные шаблона(TV) представляются, как
комнаты в этом доме. Вы можете располагать бесконечной численностью TV в шаблоне, это как
прибавить дополнительную комнату к дому.
Переменные шаблона дают возможность вам прибавлять любые поля для любого ресурса в
шаблоне.
Допустим вы решили добавить поле 'photo' в ресурс в котором используется шаблон "Страничка
биографии". Элементарно - сделайте TV, дайте ему название 'bioPhoto', определите тип изображение
и дайте его вашему шаблону "Biography Pages". Вы сможете увидеть данный TV во всяком ресурсе, у
которого определен шаблон "Страничка биографии". В контенте укажите вашу переменную шаблона
'bioPhoto' с похожим синтаксисом к примеру как у полей ресурса.
<div class="photo">
[[*bioPhoto]]
</div>
Важно! Переменные шаблона обязаны быть назначены для шаблонов в которых применяются.
Определенное значение для шаблона, TV's для ресурса можно скорректировать там же где
редактируется ресурс. В случае если вы не видите снова созданный TV в вашем ресурсе,
удостоверьтесь что вы определили TV для этого шаблона
Чанки
Что же собой представляет чанк?
Чанки это кусочки некоторого статического текста, которые применяются на сайте, подобно
функции подключения файлов или же блоков в иных CMS. Примером чанка может быть ваша любая
контактная информация или же копирайты. Хоть чанки не могут располагать логикой
непосредственно, они имеют все шансы однако располагать вызовом сниппетов которые содержат в
себя кусочки PHP кода который дополняет динамику.
Создание чанков
Перед тем как использовать чанк вам нужно создать его, дать ему имя и заполнить содержимое в
менеджере MODx (Элементы -->Чанки --> Новый чанк)
Применение чанков
Что бы активировать чанк, вызовите его по имени в шаблоне или же в контенте на страничке.
[[$chunkName]]
Данный тег будет заменен содержимым чанка. у вас есть возможность добавления свойств для чанка.
Вы можете сформировать чанк intro в котором есть следующая строка
Hello, [[+name]].You have [[+messageCount]] messages.
Задаем значения:
[[$intro? &name=`George` &messageCount=`12`]]
В итоге на странице мы получим
Hello, George. You have 12 messages.
Вызываем чанк применяя взамен значений Переменные шаблона, которые прибавляются к ресурсу.
[[!$intro? &name=`[[*usersName]]` &messageCount=`[[*messageCount]]`]]
или вызывать их непосредственно из чанка
Hello, [[*usersName]]. You have [[*messageCount]] messages.<br /><br /><br />
Обработка чанка через API
Чанки зачастую применяются для формирования выходных результатов Снипета. Чанк можно
обработать из снипета применяя функцию process. Например дадим чанку имя 'rowTpl'
<tr class="
[[+rowCls]]
" id="row
[[+id]]
"><br /><td>
[[+pagetitle]]
</td><br /><td>
[[+introtext]]
</td><br /></tr>
Снипет, код которого находится ниже извлекает его и потом обрабатывает с массивом свойств
которые нужны для публикации в ресурсе, а потом возвращает форматированные результаты как
таблицу с классом 'alt' для каждой строки
$resources = $modx->getCollection('modResource',array('published' => true));
$i = 0;
$output = '';
foreach ($resources as $resource) {
$properties = $resource->toArray();
$properties['rowCls'] = $i % 2 ? '' : 'alt';
$output .= $modx->getChunk('rowTpl',$properties);
$i++;
}
return ''.$output.'';
Изменение чанка через API
<?php
/* create a new chunk, give it some content and save it to the database */
$chunk = $modx->newObject('modChunk');
$chunk->set('name','NewChunkName');
$chunk->setContent('<p>This is my new chunk!</p>');
$chunk->save();
/* get an existing chunk, modify the content and save changes to the database */
$chunk = $modx->getObject('modChunk', array('name' => 'MyExistingChunk'));
if ($chunk) {
$chunk->setContent('<p>This is my existing chunks new content!</p>');
$chunk->save();
}
/* get an existing chunk and delete it from the database */
$chunk = $modx->getObject('modChunk', array('name' => 'MyObsoleteChunk'));
if ($chunk) $chunk->remove();
?>
Сниппеты
Что же такое сниппеты
Согласно определения сниппеты (Snippets) - это "небольшие кусочки много раз применяемого
исходного кода" ("a short reusable piece of computer source code"). Иными словами сниппеты являются
вставками PHP-кода в код основания выдаваемых сервером страничек. При помощи сниппетов
формируется динамический контент, к примеру, динамические меню, новостные сводки, выдача
итогов поиска и вообщем все, то, что нужно различной выдачи в зависимости от пожеланий и
запросов пользователя.
Применение сниппетов
После установки сниппета, вы может попросту внедрить тег вызова сниппета
[[MySnippet]]
в шаблон, чанк, добавочное поле (TV) либо конкретно в документ в том месте, где желателдьно
появление сниппета.
В случае если вы желаете, чтобы код сниппета был разным для различных пользователей, у вас есть
возможность вызова сниппета таким образом, чтобы он был некешируемым:
[[!MySnippet]]
Характеристики сниппета
Сниппеты располагают параметрами (Properties), которые могут быть переданы сниппету при
вызове, приблизительно так:
[[!Wayfinder? &startId=`0` &level=`1`]]
Вы можете сформировать пакет параметров, который является коллекцией параметров,
ассоциированных с этим сниппетом (и любым иным компонентом MODx). Это дает возможность
облегчить вызов параметров для сниппета, записав их все в одном месте.
Параметров для каждого элемента MODx (в том числе, и для сниппета) создаются на вкладке
"Параметры" соответствующего компонента:
В случае если вы сформировали набор параметров, который решили назвать 'Menu', и в котором
параметру `startId` задаётся значение 0, а параметру `level` - 1, то у вас есть возможность вызов
сниппета записать таким образом:
[[!Wayfinder@Menu]]
При данном отмеченные значения параметров передадутся сниппету автоматом. При этом в строчке
вызова данные значения будут переопределены:
[[!Wayfinder@Menu? &level=`2`]]
В данном случае значение параметра `level`, которое заданно в наборе в 1, установится 2.
Дополнительные поля
Дополнительные поля (Template Variable, коротко TV) употребляются для расширения атрибутов
ресурса, которые доступны по умолчанию (к примеру, странички либо веб-ссылки). Обыкновенные
ресурсы MODx располагают некоторой численностью установленных по умолчанию полей: заглавие
(pagetitle), содержание (content), описание (description) и т.д. В случае если вам необходимо, вы
можете прибавить определенные собственные поля к вашей страничке, к примеру, 2-ое поле
содержания либо выпадающий список месяцев, либо другие иные пользовательские данные.
Осуществляется данное путем прибавления добавочных полей к вашему шаблону. MODx дает
возможность располагать фактически безграничной численностью дополнительных полей (TV).
Для организации новейшего добавочного поля необходимо перейти по строчке "Дополнительные" на
вкладке "Элементы" в окошке "Просмотр деревьев" (колонка с лева) и в выпадающем меню избрать
пункт "Новое добавочное поле":
Дополнительные поля в панели управления отмечаются рисунком телевизора, попросту согласно
аббревиатуры TV.
Откуда появилось данное TV?
В английской версии MODx Revolution добавочные поля называются Template Variable, или же
переменные шаблонов. Отчего при переводе интерфейса приняли решение именовать данный
элемент дополнительным полем, я ответить не могу. Однако, сейчас вы знаете, откуда появилась
аббревиатура TV - от Template Variable.
В то время ресурс отражается в виде веб-странички, теги TV заменяются тем содержимым, каковое
пользователь ввел в данное поле. Дополнительные поля считаются специфическими деталями для
шаблонов , то есть имеют все шансы применяться лишь в шаблонах, в коих они определены.
Применение
Допустим, что мы организовали дополнительное поле с именем 'bio', которое представляет собой
попросту кусочек текста. Мы связали его с шаблоном "Странички биографии" и желаем, чтобы
данный кусок текста отражался на нашей страничке. Для того чтобы достичь данного, довольно
расположить на нашей страничке тег:
[[*bio]]
Для того чтобы располагать возможностью применять дополнительное поле (TV) на вашей
страничке, вы обязаны выбрать шаблоны, для которых доступно данное дополнительное поле, на
вкладке "Доступно для шаблонов" (смотрите рис.):
Дополнительные поля могут располагать параметрами. К примеру создётся дополнительное поле с
названием 'intromsg' с таким содержанием:
Hello , you have
messages
У вас есть возможность задать определенные значения параметрам таким вызовом:
[[*intromsg?name=`George` &messageCount=`123`]]
В итоге вывод примет такой вид:
Hello George, you have 123 messages.
Фильтры вывода являются отличным инструментом, который может использоваться и к
дополнительным полям. К примеру, вы хотите обусловить вывод дополнительного поля 100-ей
символов. У вас есть возможность попросту применить фильтр вывода 'limit' :
[[*bioMessage:limit=`100`]]
Дополнения
Analytics
Что такое Analytics?
Analytics – это дополнение к MODx Revolution для вставки оптимизированного и уменьшенного
асинхронного JS отслеживающего кода Google Analytics на свои страницы. При этом трафик от
пользователей, подключенных к менеджеру, не принимается во внимание.
Требования
• MODx Revolution 2.1.5 или более новая версия • PHP5 или более новая версия
История
Analytics впервые был выпущен 5 февраля 2012 года yogooo. Идея создания этого дополнения
возникла после публикации сообщения в блоге Марка Хамстра (Mark Hamstra): Hiding Google
Analytics code for MODX Manager users (Скрытие кода Google Analytics для пользователей MODX
Manager).
Скачивание
Приложение можно получить, воспользовавшись Package Manager, или скачать вручную из
Repository.
Использование
Минимальный тег выглядит следующим образом:
[[!Analytics? &setAccount=`UA-XXXXX-X`]]
Всегда запрашивайте сниппет некэшированным.
Свойства Analytics
Имя
Описание
debug
Простой режим отладки для
вывода сообщений об отладке в
виде html-комментариев
Параметр _setAccount Google
Analytics
Параметр _trackPageview
Google Analytics
Параметр _setDomainName
Google Analytics
setAccount
trackPageview
setDomainName
По
умолчанию
0
setCookiePath
Параметр _setCookiePath Google
Analytics
Более подробную информацию о параметрах Google Analytics можно найти в Google Analytics
Tracking Code documentation.
Свойства могут быть установлены в запросе сниппета, установках свойств или с помощью настроек
пользовательской системы.
Чтобы установить их через настройки системы: создайте собственные настройки системы и назовите
ключи, такие как gaq_analyticsParameter. Ex.: gaq_setAccount, gaq_setDomainName, и т.д.
Если Вы зададите настройки сайта в ресурсе, можете использовать getResourceField, чтобы получить
значения и передать их через запрос сниппета.
Поиск и устранение неисправностей
• Включите режим отладки. • Убедитесь, что Вы снабдили setAccount ID отслеживания. • Убедитесь,
что Вы вылогировались из менеджера. Помните, что приложение не отслеживает трафик от
пользователей, подключенных к менеджеру.
AdvSearch
Что такое AdvSearch?
AdvSearch – это усовершенствованный поисковый компонент для MODx Revolution. Он позволяет
проводить поиск в динамическом содержимом (с помощью поискового класса Zend Lucene),
настраивать фасетный поиск и поиск в настраиваемых пакетах.
На данный момет он не поддерживает функционал ajax.
Требования
• MODx Revolution 2.0.8 или более новая версия
• PHP5 или более новая версия
• UTF-8 кодировка
• включенные php мульти-байты
• класс Zend Search из библиотеки Zend (см. главу Установка)
• Jquery 1.5.1 (поставляется с AdvSearch)
История
Компонент AdvSearch был написан Coroico и впервые выпущен 14 августа 2011 года. Создавался
мотивам AjaxSearch для MODx эволюции путем KyleJ / Coroico, минус динамический поиск
контента на основе библиотеки Zend поиска.
Скачать
Загружаетс яAdvSearch в рамках MODx Revolution с помощью Package Management или с MODx
Extras Repository по ссылке: http://modx.com/extras/package/advsearch
! Прежде чем запустить первый поиск с AdvSearch, Вам необходимо установить библиотеку Zend
Search. См. главу об установке ниже.
Демонстрация
С основными возможностями advsearch можно ознакомиться на демо сайте AdvSearch:
http://www.revo.wangba.fr
Разработка и сообщения об ошибках
AdvSearch хранится и разрабатывается в GitHub, история доступна по ссылке:
http://github.com/coroico/AdvSearch
Ошибки хранятся в файле: http://github.com/coroico/AdvSearch/issues
Установка класса ZendSearch
Хотя аддон AdvSearch полностью устанавливается с помощью пакета управления, при первой
установке AdvSearch необходимо также установить класс Zend Search.
Установка этого приложения производится только один раз и сохраняет актуальность для всех
последующих повторных установок аддона.
- перейдите на страницу загрузки Zend Framework на http://framework.zend.com/download/latest/
- зарегистрируйтесь и скачайте бесплатно Zend Framework. Минимального выпуска достаточно.
- если у Вас нет папки для библиотек under assets/, создайте папку libraries/ under assets/
- распакуйте пакет Zend как папку assets/libraries/. Таким образом создается субкаталог с именем
«Zend» (assets/libraries/Zend)
- в этом каталоге должен находиться только каталог «search» и запрашиваемые файлы
«Exception.php». Можете удалить все остальные файлы и каталоги.
- В конце у Вас должна остаться только папка «Search» и файл «Exception.php».
Использование
AdvSearch включает два главных сниппета – один для отображения формы («AdvSearchForm»), а
второй для отображения результатов поиска («AdvSearch»).
Третий сниппет («AdvSearchHelp») используется для отображения окна справки для представления
синтаксиса запросов.
- AdvSearchForm
- AdvSearchHelp
- AdvSearch
Все темплейты используются по умолчанию для настройки формы и отображения результатов,
представленных в виде чанков. Эти чанки устанавливаются с помощью пакета управления.
Примеры
Отобразить форму поиска, а под ней, результаты:
[[!AdvSearchForm]]
<h2>Results</h2>
[[!AdvSearch]]
Показать форму Search, которая отправляет Вас к странице результатов в Resource 82 (в котором есть
запрос AdvSearch):
[[!AdvSearchForm? &landing=`82`]]
Archivist
Что такое Archivist?
Archivist – это навигационное архивное дополнение для MODx Revolution. Поддерживает навигацию
ресурсов стиля WordPress, а также создание архивного списка в формате месяц /год/день и
автоматическую генерацию FURL.
Требования
• MODx Revolution 2.0.0-RC-2 или более новая версия
• PHP5 или более новая версия
История
Архивирующий компонент Archivist в стиле WordPress написал Шон Маккормик (Shaun McCormick),
первый выпуск состоялся 3 июня 2010 года.
Скачать
Компонент можно скачать с помощью менеджера в MODx Revolution через Package Management, или
через MODx Extras Repository по ссылке:
http://modx.com/extras/package/archivist
Разработка и отчет об ошибках
Archivist хранится и разрабатывается в GitHub, историю можно посмотреть здесь:
http://github.com/splittingred/Archivist
Ошибки (баги) заносятся в файл: http://github.com/splittingred/Archivist/issues
Использование
Archivist включает 2 сниппета – один для отображения списка в формате месяц/год/день
("Archivist"), а другой для отображения результатов архива ("getArchives").
Archivist.Archivist - Отображение навигационных архивных ссылок.
Archivist.getArchives - Отображение результатов архивов.
Примеры
Отобразите архивы Вашего сайта в списке за месячный период с родительскими ID 54 и 55, а затем
ресурса с ID123.
Вывод Месячного архива:
[[!Archivist? &parents=`54,55` &target=`123`]]
А затем на Вашей странице архивов:
[[!getArchives?
&parents=`54,55`
&toPlaceholder=`archives`
]]
Archives
[[+archives]]
Archivist snippet
Этот сниппет (snippet) отображает архивные ссылки за месяц или год.
Использование
Просто поместите сниппет туда, где бы Вы хотели видеть архивные списки, родительские ID, с
которых будут загружаться архивы, и целевой ресурс для загрузки архивов с помощью сниппета
getArchives.
[[!Archivist? &target=`123` &parents=`4,12,33`]]
Доступные свойства
Имя
tpl
target
parents
depth
sortBy
sortDir
limit
start
useMonth
Описание
По умолчанию
Чанк (сhunk), который будет row
использоваться для
отображения результатов за
каждый месяц/год
Ресурс, к которому обращается
сниппет getArchives,
отображающий результаты
фильтра архива.
Разделенный запятыми список
ids, которые служат как
родительские
Целое значение,
10
показывающее глубину поиска
для ресурсов от каждого
родителя
Поле (field) для сортировки и publishedon
группировки результатов by.
Порядок сортировки. По
DESC
умолчанию DESC.
Ограничивает количество
10
возвращенных ресурсов.
Опция. Оffset ресурсов,
0
которые согласно критерию
должны быть пропущены.
Если 1, за единицу измерения 1
useDay
dateFormat
useFurls
extraParams
cls
altCls
firstCls
lastCls
filterPrefix
toPlaceholder
setLocale
в архивном списке берется
месяц.
Если 1, за единицу измерения 0
в архивном списке берется
день.
Опция. Формат даты согласно
синтаксису MySQL
DATE_FORMAT () для каждой
строки. Если пустая, Archivist
вычисляет автоматически.
Если true, будет генерировать 1
ссылки в довольно удобном
URL-формате.
Опция. Если указана, будет
добавляться в адрес каждой
строки.
CSS-класс, добавляемый к
arc-row
каждой строке.
CSS-класс, добавляемый к
arc-row-alt
каждой альтернативной
строке.
Опция. CSS-класс,
добавляемый к первой строке.
Если пустая, игнорирует.
Опция. CSS-класс,
добавляемый к последней
строке. Если пустая,
игнорирует.
Префикс, используемый для arc_
GET-параметров с ссылками
Archivist. Убедитесь, что
значение одинаковое с
параметром filterPrefix запроса
сниппета getArchives
Если установлен,
предпочтение отдается выводу
сниппетав в placeholder.
Если true, Archivist запускает true
функцию setlocale с
настройкой cultureKey, если
Ваш cultureKey не"en".
Чанки Archivist
Archivist обрабатывает 1 чанк, у которого Archivist соответствует параметр:
tpl – сhunk, который используется для каждого отображенного результата.
Примеры
Отображение списка месяцев для архивов ресурсов под ID 2, 4 и 6, при нажатии – переход на
страницу 123:
[[!Archivist? &target=`123` &parents=`2,4,6`]]
Chunk tpl в Archivist
Это сhunk, который отображается с &tpl свойством в сниппете Archivist.
Доступные Плейсхолдеры
Имя
url
cls
Описание
URL, которые обращаются в соответствующий архив.
CSS-класс к использованию, указанный как свойство в обращении снипетта
Archivist
date
Отформатированный time span, который архивируется.
count
Количество ресурсов в 'date'.
month
Число месяца (01,07,11 и т.д.)ю
month_name
Название месяца.
month_name_abbr Сокращенное названия месяца.
year
Год, в виде четырехзначного числа.
day
Порядковое числительное, обозначающее день месяца (01, 24, 31 и т.д.)
day_formatted
День, с постфиксом 'th', 'rd' or 'nd'. (1st, 2nd, 3rd)
weekday
Название дня недели.
weekday_idx
Индекс дня недели.
ArchivistGrouper
ArchivistGrouper
Встроенная программа 1.6.1 для Articles появилась вместе с дополнением 1.2.3 к Archivist, так что
получается, что сниппет ArchivistGrouper является частью Archivist. Пока нет инструкций от его
создателя, но я обнаружил доступные свойства в сниппете.
Описания, представленные в таблице, являются всего лишь предположением! Требуется
подтверждение или изменение от более опытного пользователя или создателя!
Использование
Просто поместите сниппет туда, где бы Вы хотели видеть отображение архивного списка, и
родительские ID, из которых будут загружаться архивы.
Доступные свойства
Имя
mode
itemTpl
parents
target
depth
where
hideContainers
sortBy
sortDir
dateFormat
limitGroups
limitItems
Описание
Выбор между месяцем (month) и годом (year)
Сhunk, который используется для отображения
каждой единицы из группы
Разделенный запятыми список ids, которые служат в
качестве родительских.
Ресурс, к которому обращается сниппет getArchives,
отображающий результаты фильтрования архива.
Целое число, которое означает глубину поиска для
ресурсов в каждом родительском источнике.
Поле для сортировки и группировки результатов by.
Порядок сортирования. По умолчанию в DESC.
Формат даты, в соответствии с MySQL
DATE_FORMAT () синтаксисом – для каждой строки.
Если пустой, ArchivistGrouper рассчитывает
автоматически.
Ограничение количества возвращенных групп.
Ограничение количества возвращенных единиц. 0
значит нет ограничений??
resourceSeparator
groupSeparator
filterPrefix
Префикс, используемый для GET-параметров с
ссылками Archivist. Убедитесь, что значение
одинаково с параметром filterPrefix, к которому
обращается с запросом сниппет getArchives.
useFurls
Если true, будут сгенерированы ссылки в довольно
удобном url-формате.
persistGetParams
extraParams
cls
CSS-класс для добавления в каждую строку.
altCls
CSS-класс для добавления в каждую альтернативную
строку.
setLocale
Если true, Archivist запустит функцию setlocale с
Вашими настройками cultureKey, если Ваш cultureKey
не "en".
groupTpl
Чанк, который будет использован для отображения
результата за каждый месяц/год.
По умолчанию
month
10
true
publishedon
DESC
12
0
\n
\n
arc_
true
false
arc-resource-row
arc-resource-row-alt
true
yearContainer (когда
property mode=`year`)
monthContainer (когда
property
mode=`month`)
Почти все описания представляют те же свойства, которые упоминались на странице Archivist.
Чанки
Если нет заданных шаблонов (templates), используются таковые по умолчанию. Так как я был
озадачен тем, как создать свой собственный шаблон для групп, я изучил источник и нашел этот
шаблон, который используется в качестве monthContainer:
Обратите внимание на placeholder +resources, который переводит результаты на itemTpl.
<li><a href="
[[+url]]
">
[[+month_name]] [[+year]]
</a>
<ul>
[[+resources]]
</ul>
Результат
Результат выглядит так:
Сниппет getArchives
Этот сниппет выводит результаты из ссылки архива, сгенерированной сниппетом Archivist.
Использование
Просто поместите сниппет туда, где бы Вы хотели видеть отображение архивов. getArchives будет
автоматически обрабатывать FURLs и информацию на входе от запроса сниппета Archivist.
[[!getArchives? &parents=`4,12,33`]]
Используя с getPage, убедитесь, что установлен set &cache=`0` на getPage.
Доступные свойства
getArchives – это вариант getResources, поэтому все свойства в getResources также доступны для
getArchives, а также следующие:
Имя
Описание
По
умолчанию
Имя chunk, выступающий в качестве шаблона ресурса.
Список ids, разделенных запятыми, которые служат как
родительские.
filterField
Поле, по которому происходит фильтрация при фильтровании по publishedon
архивам. Убедитесь, что совпадает с параметром sortBy в запросе
сниппета Archivist.
filterPrefix Префикс, используемый для GET-параметров с ссылками Archivist. arc_
Убедитесь, что совпадает с параметром filterPrefix запроса сниппета
getArchives.
tagsIndex
Если установлен, и var REQUEST этого индекса найден, будет
tags
автоматически фильтровать результаты по значению.
toPlaceholder Если установлен, отдает предпочтение выводу этого сниппета в
этот placeholder.
tpl
parents
Если в результате Вашего запроса getArchives не отображается никаких результатов, и Ваши ресурсы
скрыты от меню, убедитесь, что Вы задали параметр &showHidden=`1` (наследуется от GetResource
параметра)!
Chunkи getArchives
Существует один чанк, который обрабатывается в getArchives. Его соответствующий getArchives
параметр:
tpl- сhunk, который используется для каждого отображения результата.
Примеры
Отображение архивов для родительских 4, 12 и 33, помещение результатов в placeholder под
названием 'results':
[[!getArchives? &parents=`4,12,33` &toPlaceholder=`results`]]
Search Results
[[!+results]]
getArchives tpl Chunk
Это сhunk, который отображается с &tpl свойством сниппета Archivist.
Значение по умолчанию
<div class="post">
<h2 class="title"><a href="
[[~[[+id]]]]
">
[[+pagetitle]]
</a></h2>
<p class="post-info">Posted by
[[+createdby:userinfo=`fullname`]]
</p>
<div class="entry">
<p>
[[+introtext:default=`[[+content:ellipsis=`100`]]`]]
</p>
</div>
<p class="postmeta">
<span class="links">
<a href="
[[~[[+id]]]]
" class="readmore">Read more</a>
| <span class="date">
[[+publishedon:strtotime:date=`%b %d, %Y`]]
</span>
</span>
</p>
</div>
Доступные placeholderы
Любое поле ресурса, доступное для использования в качестве свойства. Chunk подобен тому, как
работает tpl property в getResources.
Создание блога с помощью Articles
Допустим у вас уже установлена MODx Revolution 2.2, дополнение Articles (особенностью которого
является автоматически установка getPage, tagLister, Archivist и прочего.) Далее приступаем к
работе над блогом...
Создаем блог
Сделать блог достаточно просто – нажимаем правой кнопочкой мышки на документе в дереве
ресурсов слева в менеджере и выбираем "Create". Жмем "Create Articles Here" Создать статьи
здесь.
Покажется окошко создания контейнера Articles Container, который и есть по сути блог,
способный располагать любым количеством статей (записей блога), а это нам и необходимо.
Закладка Статьи
Таким образом перед нами появляется новое окошко редактора, как изображено на фото: Вы
можете ставить такие поля на начальной вкладке.
1. Container Title – подзаголовок вашего контейнера или же блога.
2. Container Alias – наш ЧПУ (имя) контейнера. В случае если этот контейнер располагается в
корне сайта и определено имя как "blog", то адрес блога будет отображен как
www.mysite.com/blog/
3. Description – краткое описание блога.
4. Menu Title – заглавие вашего блога, представленное пунктом меню. По-умолчанию, в случае если
вы ничего не отметили, то он будет равен названию странички - pagetitle.
5. Link Attributes - всевозможные HTML атрибуты ссылки для демонстрации в ссылке меню, когда
блог отражается в меню.
6. Hide from Menus – в случае если поставлена галочка, то ваш блог не будет представлен в любом
меню вашего вебсайта.
7. Published – если установить эту опцию, ваш блог будет сразу же опубликован.
Продолжаем и даём нашему контейнеру статей название к примеру "My Blog" или же псевдоним
"blog". Далее жмем вкладку "Template".
Вкладка Template
Эта вкладка складывается из характеристик шаблонизации вашего блога, к примеру: выбор
применяемого шаблона и остальные функции вывода.
Поля этой вкладки:
1. Uses Template – является шаблоном блога. Дополнение Articles гарантирует обычный шаблон,
однако вы в силах его поменять на собственный.
2. Content – содержание или же контент блога – тут вы можете изменить как поле будет
рендерится в шаблоне контейнера статей.
3. Article Template является шаблоном по-умолчанию ваших статей (может под каждую статью
переназначен).
4. Article Row Chunk это чанк с помощью которого выводятся посты на фронтальную страницу или
страничку архива. В дополнении Articles имеется собственный чанк.
5. Articles Per Page – число отображаемых записей блога, десять по-умолчанию.
Далее, у вас есть возможность установки поля "Template" в "sample.ArticlesContainerTemplate" или
же в "sample.ArticleTemplate".
В случае если вы желаете изменить содержимое данных шаблонов, исключительно рекомендовано,
чтобы вы сначала сохранили копию и переименовали их. Всевозможные перемены в шаблонахобразчиках будут перезаписаны, после любого обновления дополнения Articles.
Взгляните на поле "Content". В этот момент оно выглядит таким образом:
[[+articles]]
[[+paging]]
У вас есть возможность изменить его для реструктуризации размещения и разметки записей блога
как в зависимости от пагинации (разбиения на странички). У вас есть возможность вставлять
HTML разметку и теги MODX.
Далее жмём вкладку "Advanced Settings".
Advanced Settings
Тут ряд полей в единичных вертикальных вкладках:
1. Настройки архивов
Archive Listing Chunk – чанк для отражаемого месяца/года.
Archive Listings to Show – численность отображаемых месяц/годов.
Archive By Month – помесячная или же по годовая архивация. Yes – архивировать ежемесячно.
Archive CSS Class - CSS класс, который применяется для вывода каждого архива.
Archive Alternate CSS Class - CSS класс, используемый к любому парному ряду архива.
2. Настройки тегов
Tag Listing Chunk – чанк предназначенный для вывода тегов на страничках вывода.
Tag Listings to Show – численность тегов для вывода популярных тегов.
Tag CSS Class - CSS класс списка тегов.
Tag Alternate CSS Class - CSS класс парного ряда в списке тегов.
3. RSS опции
RSS Alias (Permalink) – псевдоним для фида RSS, который прикрепляется к ссылке на блог. Может
быть как списком, разбитым запятыми. К примеру, в случае если вы поставите его в "rssfeed.rss",
то ссылка вашего блога mysite.com/blog/rssfeed.rss продемонстрирует RSS фид.
Number of RSS Items – численность заключительных выводимых RSS объектов в RSS ленте.
RSS Feed Chunk – чанк предназначенный для шаблонизации RSS ленты.
RSS Item Chunk – чанк каждого объекта в RSS ленте.
Для более доскональной информации по опциям комментирования посмотрите документацию Quip.
Опять, в случае если вы собираетесь изменить предоставляемые чанков, то не забывайте, что
нужно сделать сначала их копию и избрать иной чанк, чем попросту отредактировать чанкобразец, так как они перезапишутся при обновлении.
Выводы
Далее жмите "Save" и у вас готов свой функционирующий блог! Потом "View" для просмотра блога.
Далее вы увидите таблицу, в которой есть возможность редакции и создания новых статей блога
Babel
Что такое Babel?
Babel – это дополнение для MODx Revolution, которое призвано помочь в управлении Вашими
мультиязычными веб-сайтами с использованием различных контекстов. Babel поддерживает даже
управление несколькими мультиязычными веб-сайтами в одном образце MODx с помощью так
называемых контекстных групп.
Babel сохраняет ссылки между переведенными ресурсами. В менеджере Вы можете использовать
Babel Box, чтобы легко переключаться между различными языковыми версиями Ваших ресурсов.
Переведенные версии Babel могут создаваться автоматически или задаваться вручную.
Кроме того, Babel может использоваться для синхронизации определенных шаблонных переменных
(template variables, TV) переведенных ресурсов, которые должны быть аналогичными в любом
контексте (языке).
Более подробную информацию о Babel можно найти на Offical Babel project website: Multilingual
websites with MODX.
История
Babel разработал Якоб Класс (Jakob Class) на основе идей Sylvain Aerni, впервые приложение было
выпущено 16 декабря 2010 года.
Разработка и отчет об ошибках
Babel хранится и разрабатывается в GitHub, историю можно посмотреть здесь:
https://github.com/mikrobi/babel
Данные об ошибках хранятся здесь: https://github.com/mikrobi/babel/issues
Установка
Подготовка
Создайте контекст под каждый из языков и задайте настройки cultureKey и site_url в соответствии со
своими потребностями. Вы можете посмотреть учебное пособие по настройке мультиязычного сайта
(сайтов) tutorial to setup your multilingual site(s).
Убедитесь, что переключения контекстов происходят корректно.
Скачивание
Babel можно скачать с помощью менеджера в MODx Revolution через Package Management, или через
MODx Extras Repository здесь: http://modxcms.com/extras/package/781
Установка
Установите Babel с помощью пакет-менеджера и задайте системные настройки Babel, используя
форму, которая отображается во время установки:
• ContextKeys (babel.contextKeys): список контекстных клавиш через запятую, которые
применяются для связки мультиязычных ресурсов.
В расширенной конфигурации Вы можете определить несколько групп контекстных клавиш с
помощью точки с запятой (;) в качестве разделителя. Это пригодится для администрирования
нескольких многоязычных сайтов в одном образце MODx.
Пример:
site1: en, de, fr. c контекстами web, site1de, site1fr
site2: en, de. с контекстами site2en, site2de
Вы выбираете babel.contextKeys для "web,site1de,site1fr;site2en,site2de".
• Имя Babel TV (babel.babelTvName): Имя шаблонной переменной (TV), в которой Babel будет
хранить ссылки между мультиязычными ресурсами. Эту TV будет поддерживать Babel. Пожалуйста,
не изменяйте TV в ручном режиме, иначе Ваши ссылки между переведенными версиями могут быть
утрачены.
• ID шаблонных переменных должны быть синхронизированы (babel. syncTvs): разделенный
запятыми список идентификаторов шаблонных переменных (TV), которые Babel должен
синхронизировать.
Как пользоваться
При открытии ресурса для редактирования Babel Box будет отображаться в верхней части формы
ресурса. Там же находятся ссылки в виде кнопок для каждого из языков (контекстов), заданных в
настройках системы babel.contextKeys.
Три различных цвета, в которых могут отображаться кнопки, означают:
• Черный: язык ресурса, отображающегося в данный момент.
• Зеленый: язык, для которого определена переведенная версия ресурса.
• Светло-серый: язык, для которого переведенная версия пока не была создана или определена.
Нажимая на (зеленые) кнопки языков, Вы можете легко переключаться между различными
языковыми версиями Ваших ресурсов.
Если перевод не определен для данного языка (серая кнопка), наведите курсор мыши на языковую
кнопку – появляется окно, в котором можно задать Babel создать перевод текущего ресурса, или
вставить ссылку перевода на существующий ресурс вручную, для чего требуется ввести ID
переведенного ресурса.
Кликая на "Create Translation", Вы задаете Babel создать новый ресурс в контексте языка и
скопировать все содержимое текущего ресурса для вновь созданного. Далее Вы можете перевести
вест контент, TV и опубликовать переведенный ресурс.
Если Вы хотите удалить ссылку на переведенную версию, просто наведите курсор мыши на зеленую
кнопку языка: появляется окно с опцией "Unlink translation" для ее удаления.
Сниппеты
В настоящее время два сниппета доступны для Babel: BabelLinks и BabelTranslation.
Изменение настроек Babel после установки
Вы можете изменить настройки Babel после установки. Например, если Вы хотите определить новую
TV, которая должна быть синхронизирована, или добавить новый контекст. Для этого перейдите в
System/Settings в менеджере MODx и выберите местоположение babel. Теперь Вы можете
редактировать все параметры Babel:
BabelLinks
BabelLinks – это snippet, который отображает ссылки на другие языки (контексты) для конечного
пользователя.
Доступные параметры
Имя
resourceId
Описание
(опция) ID ресурса, в котором должны отображаться ссылки на
переводы.
tpl
(опция) Чанк для отображения языка ссылки.
activeCls
(опция) имя класса CSS для языка, активного в данный момент.
showUnpublished (опция) закладка, где отображаются неопубликованные
переводы.
По умолчанию
ID текущего
ресурса
babelLink
active
0
BabelLink Chunk
Если параметр &tpl не установлен, по умолчанию Chunk будет использоваться со следующим кодом:
<li><a href="
[[+url]]
" class="
[[+cultureKey]][[+active:notempty=` [[+active]]`]]
">
[[%babel.language_[[+cultureKey]]?&topic=`default` &namespace=`babel`]]
</a></li>
Используя собственный блок для отображения языковых ссылок, Вы можете использовать
следующие идентификаторы (placeholders):
Имя
url
Описание
Url связанного перевода (или url сайта определенного языка, если нет доступного
переведенного ресурса)
cultureKey Culture key перевода (e.g en, de, fr oder es). Можно использовать словарь babel для
отображения названия языка: babel.language_
active
Если активная ссылка указывает на текущий активный язык (контекст), этот плейсхолдер
id
устанавливается на активное имя CSS-класса, указанное в параметре & activeCls (по
умолчанию =active). В противном случае идентификатор пуст.
ID переведенного ресурса. Если нет доступного перевода, идентификатор пуст.
Пример
<ul>
[[BabelLinks]]
</ul>
BabelTranslation
Snippet BabelTranslation возвращают ID переведенных ресурсов в данном контексте.
Доступные параметры
Имя
resourceId
Описание
(опция) ID ресурса, на основе которого должен быть определен
переведенный ресурс.
contextKey
Ключ контекста, в котором переведенный ресурс должен быть
определен.
showUnpublished (опция) Флажок, для просмотра неопубликованных переводов
По умолчанию
ID текущего
ресурса
0
Пример
Чтобы вернуть ID переведенного ресурса, который находится в "de" контексте текущего ресурса
BannerX
Версия
0.2.0 beta, выпущена 10 мая 2012
Использование
[[BannerX? &position=`1` &sortby=`RAND()` &limit=`1`]]
Вызывается случайным образом один баннер, заданный активным для позиции 1
Доступные свойства
Имя
Описание
tpl
Имя чанка , служащего
рекурсивным шаблоном
Порядок сортировки
ASC
результатов
Возврат результатов в
RAND()
случайном порядке
Если задано ненулевое 5
значение, отображается X
элементов
Если задано ненулевое 0
значение, извлекаются
изображения, только
соответствующие
заданной позиции.
sortdir
sortby
limit
position
Значение “по
умолчанию”
bxAd
Доступные плейсхолдеры
Имя
adposition
image
name
url
BannerY
Описание
Изображение, заданное для
данного баннера.
Имя, заданное для данного
баннера.
url, заданный для данного
баннера
Отображает изображения с гиперссылками на заданной позиции на странице. Вариант BannerX
Jeroen Kenters ( удален автором из хранилища MODX).
Использование
[[BannerY? &position=`1` &sortby=`RAND()` &limit=`1`]]
Вызывается случайным образом один баннер, заданный активным для позиции 1
Доступные свойства
Имя
tpl
sortdir
sortby
limit
position
Описание
Имя чанка , служащего
рекурсивным шаблоном
Порядок сортировки результатов
Возврат результатов в случайном
порядке
Если задано ненулевое значение,
отображается X элементов
Если задано ненулевое значение,
извлекаются изображения,
только соответствующие
заданной позиции..
Доступные плейсхолдеры
Имя
Описание
adposition
idx
Индекс баннера в данной позиции
image
Изображение, заданное для данного баннера
name
Имя, заданное для данного баннера.
url
url, заданный для данного баннера
description Любое текстовое сообщение для данного баннера
Значение “по умолчанию”
byAd
ASC
RAND()
5
0
Batcher
Что такое Batcher?
Batcher представляет собой компонент пакетного редактирования для MODx Revolution, который
позволяет работать одновременно с несколькими ресурсами.
Требования:
• MODx Revolution 2.0.0-RC-2 или более новая версия
• PHP5 или более новая версия
История
Шон Маккормик (Shaun McCormick) создал Batcher в качестве простого поискового компонента,
первый релиз которого состоялся 2 июня 2010 года.
Скачивание
Компонент доступен для загрузки в рамках менеджера MODx Revolution с помощью Package
Management (Управление Пакетами), или с MODx Extras Repository по ссылке:
http://modxcms.com/extras/package/684
Разработка и отчет об ошибках
Batcher хранится и разрабатывается в GitHub, историю можно просмотреть здесь:
http://github.com/splittingred/Batcher
Данные об ошибках хранятся здесь: http://github.com/splittingred/Batcher/issues
Использование
После установки, просто перезагрузите страницу, после чего должен появиться доступ к опции меню
"Batcher " через главное меню Компоненты.
BreadCrumbs
Что такое Breadcrumbs?
Breadcrumbs – это простой навигационный сниппет для MODx Revolution. С его помощью Вы
можете легко добавить простую навигационную цепочку в любом месте Вашей страницы.
Требования
• MODx Revolution 2.0.0-beta5 или более новая версия
• PHP5 или более новая версия
История
Breadcrums появился примерно в одно время с MODx 0.9.1, или MODx Evolution, первый релиз
состоялся 30 июня 2006 года. С момента создания сниппета уже много разных авторов приложили
руку к его усовершенствованию.
Официальные релизы
Версия
1.1-beta3
1.1-beta2
Дата
23 ноября 2009 года
5 ноября 2009 года
Автор
splittingred
splittingred
Продукт
Revolution
Revolution
1.1-beta1
1.0-alpha4
1.0-alpha3
1.0.1
1.0.0
0.9g
0.9f
0.9e
0.9d
0.91
0.9c
21 мая 2009 года
21 апреля 2009 года
24 марта 2009 года
25 апреля 2008 года
22 апреля 2008 года
26 марта 2008 года
17 января 2008 года
11 января 2008 года
12 июля 2006 года
10 июля 2006 года
30 июня 2006 года
splittingred
splittingred
splittingred
jaredc
jaredc
webe
Jaredc
Jaredc
Jaredc
tillda
jaredc
Revolution
Revolution
Revolution
Evolution
Evolution
Evolution
Evolution
Evolution
Evolution
Evolution
Evolution
Скачивание
Сниппет можно загрузить в рамках менеджера MODx Revolution с помощью Package Management,
или с MODx Extras Repository по ссылке: http://modxcms.com/extras/package/54
Использование
Сниппет Breadcrumbs вызывается через теги:
[[Breadcrumbs]]
Свойства Breadcrumbs
Имя
Описание
По
умолчанию
crumbSeparator
Определяет то, что Вам нужно, между «крошками» (crumbs).
»
currentAsLink
Если Вы хотите, чтобы crumb текущей страницы был ссылкой (на true
себя) – "1" для true, "0" для false (без кавычек)
descField
Чтобы изменить по умолчанию использование поля страницы в description
качестве описания навигационной цепочки, по умолчанию –
description. Если description пуст, возвращается к pagetitle.
homeCrumbDescription В случае, если Вы хотите иметь настраиваемый description
Home
домашней ссылки. По умолчанию – тайтл домашней ссылки.
homeCrumbTitle
В случае, если Вы хотите иметь домашнюю ссылку, вызывающую Home
что-то другое.
maxCrumbs
Максимальное количество элементов в цепочке. 100 –
100
произвольно большое количество. Если Вы выберете меньшее
значение, скажем 2 (при этом есть 5 уровней глубины), она будет
выглядеть так: Home> ... > Уровень 4> Level 5. Следует отметить,
что " Home" и текущая страница не принимаются в рассчет.
Каждая из них настраивается отдельно.
maxDelimiter
pathThruUnPub
respectHidemenu
showCrumbsAtHome
showCurrentCrumb
showHomeCrumb
titleField
Строка, которая будет выводится, если максимальное количество
элементов цепочки было показано.
Когда Ваш путь включает в себя неопубликованную папку,
установка true покажет все ресурсы пути, кроме
неопубликованных. Пример пути (неопубликованные
заглавными): home > news > CURRENT > SPORTS > skiiing >
article $pathThruUnPub = true. Отсюда: home > news > skiiing >
article $pathThruUnPub = false. Отсюда: home > skiiing > article
(если Ваш home crumb включен)
Если true, будут скрываться элементы в навигационной цепочке,
которые, согласно установок, скрываются в и меню.
Можно использовать для переключения breadcrumb-ов на главной
странице.
Показывает текущую страницу в виде пути.
Хотите, чтобы Ваша crumb-строка начиналась ссылкой на home?
Некоторые не будут, потому что домашняя ссылка обычно
находится в лого сайта или другом месте схемы навигации.
Чтобы изменить поля страницы по умолчанию, используется в
качестве тайтла breadcrumb. По умолчанию pagetitle.
...
true
true
false
true
true
pagetitle
Классы breadcrumb-ов
Выводится неупорядоченный список с микроданными (см. http://diveintohtml5.info/extensibility.html
для получения дополнительной информации), которые можно стилизировать, используя следующие
имена классов.
Classname (имя
класса)
B_crumbBox
B_hideCrumb
B_currentCrumb
B_firstCrumb
B_lastCrumb
B_crumb
B_homeCrumb
Описание
Span, который окружает все выводимые crumb-ы
Span, который окружает "...", если crumb-ов больше, чем будет показано
Span или A-тег, окружающий текущий crumb
Span, который всегда окружает первый crumb, "home" это или нет
Span, окружающий последний crumb, будь он на текущей странице или нет.
Класс, который присваивается каждому A-тегу, окружающему промежуточные
crumb-ы (не домашние или скрытые)
Класс, который присваивается домашнему crumb-у
Примеры
Показать навигационную цепочку с символом| для разделения.
[[Breadcrumbs? &crumbSeparator=`|`]]
CamperManagement
Скачать: http://modx.com/extras/package/campermanagement (или установить через Package Manager)
Источник & ошибки: https://github.com/Mark-H/CamperManagement
CamperManagement – это дополнение (аддон) для управления парком транспортных средств для
MODX Revolution, разработано и протестировано в 2.1.0-rc3 Марком Хамстра (Mark Hamstra).
Представляет бекэнд менеджмент-модуль, а также универсальные сниппеты для настраиваемого,
интегрированного опыта взаимодействия во фронтэнде сайта, как и следовало ожидать в рамках
MODX.
Доступная документация:
Грид полностью настраиваемый для использования чанков сниппетов и чанков, вплоть до способа
вывода изображений. Доступно столько вариантов настройки, что, если бы Вы захотели, могли бы
создать carousel из миниатюр в grid view (элемент пользовательского графического интерфейса,
представляющий данные в табличном виде). Или просто вывести горизонтальные строки со всеми
подробностями. Что угодно!
Как и грид, страница деталей предоставит Вам все, что Вам только может потребоваться. Просто
установите один ресурс с определенным темплейтом (specific template) и вызовите на нем сниппет
cmCamperDetails, чтобы заполнить данным placeholder-ы. Да, и если id кемпера не существует, Вы
можете выбрать или показывать пустые поля, или перенаправить на определенный ресурс (как
насчет Вашего запасного ресурса?).
Настройка компонентов
CamperManagement был создан для конкретного сайта, что обуславливает специфическую
терминологии и аспекты, которые могут использоваться. К счастью, сочетая гибкость MODX и
некоторые настройки, встроенные в аддон, Вы можете много что изменить своими силами, даже не
имея опыта разработчика. Эта страница даст вам представление о том, как это сделать.
Изменение компонентной терминологии и полей
Аддон использует такие термины, как "Campers", "Brands" и т.д. Все они стали переводимыми в
процессе разработки, и Вы можете воспользоваться преимуществами Lexicon Management (в главном
меню системы), чтобы изменить термины в компоненте. В версии 1.0 изменять можно 82 строки, от
"CamperManagement" до " Car " и сообщений об ошибках.
В этом примере мы изменим название компонента ("CamperManagement") и ярлыки нескольких
полей, чтобы привести его в соответствие с контекстом Earth Moving Equipment (землеройной
техники).
Первый взгляд на использование LexiconManagement
Сначала мы должны перейти к пространству имени (namespace)"campermanagement". Когда Вы
зайдете в Lexicon Management, Вы увидите выпадающий список, в котором по умолчанию выбрано
"core ". Откройте и выберите campermanagement один.
У каждой строки есть имя (также называемое ключом - key), которое вызывается из кода для
отображения определенного текста. Эти имена обычно узнаваемы и содержат смысл. Кнопка "Back
to Overview " (на странице кемпер-списка в правом верхнем углу) имеет ключ
"campermgmt.button.backtooverview", а "Options" имеет ключ "campermgmt.tab.options". Если Вы не
можете найти то, что Вам нужно, просто введите искомый текст в окне поиска, в правой части
экрана.
Изменение некоторых строк (Strings)
Мы изменим название аддона на "Used Equipment Management ". Этот тайтл отображается в строке
"campermgmt". Просто сделайте два клика под “value” и введите свое значение.
Если Вы захотите обновить грид (кнопка обновления находится внизу), Вы увидите, что теперь текст
отображается зеленым цветом, и появилась дата " Last modifed on " (дата последних изменений).
В Lexicon Management хорошо то, что Ваши корректировки сохраняются в базе данных. Это значит,
что даже если вы обновите аддон или сам MODX, словарь новых определений должен сохранятся и
не утериваться в процессе. Изменение лексических файлов, которые поставляются вместе с
компонентом, отбрасываются при обновлении.
Теперь Вы можете обрадоваться и проверить результат, но сначала необходимо очистить кэш.
Словари кэшируется по умолчанию, поэтому необходимо обновление кэша, чтобы что-то появилось.
Таким образом, выполните действие “Site > Clear Cache”, а затем обновите страницу Вашего
компонента. Если вы что-либо изменить в меню (ключ campermgmt или campermgmt.description), Вам
также придется произвести обновление и там – похоже, что обычное обновление кэша не
обязательно приводит к обновлению ключей. Просто удалите файл в core/cache/menu/mgr/menus/,
который будет обновлен при следующем запуске обновления страницы.
Теперь Вы можете пойти дальше и изменить другие строки. Если у Вас нет поля "Plate", но доступно
поле "Capacity", Вы можете заменить словарь "Place" на " Capacity", чтобы изменить это в
компоненте. Фактическое имя поля для настройки фронт-энда не изменится (останется ), но все
равно никто не обращает на это внимания после разработки.
Имена статусов
Вы также можете использовать разные имена для различных статусов через изменение лексикона
строк – от campermgmt.status0 до campermgmt.status5.
Настраиваемые кнопки в верхней части грида Campers
Вы можете добавить одну кнопку в верхней части кемперс-грида с помощью системных настроек, а
через Lexicon management можно изменить значение кнопки.
Создайте новую настройку с помощью системной настройки ключа campermanagement.overview. Для
целей организации, установите его в пространство имен campermanagement. Его значение должно
быть валидным ID ресурса (как и фронт-энд ресурса).
Теперь войдите в управление словарем и измените строку campermgmt.overview на то значение,
которое Вы бы хотели, чтобы отображалось на кнопке.
Когда пользователь нажмет кнопку, будет совершаться перенаправление на указанный ресурс, так
что Вы, вероятно, захотите сделать этот ресурс интересным для пользователя. Оригинальная идея
этой кнопки – создание печатаемого обзора имеющихся в наличии транспортных средств, поэтому
для того, чтобы создать таблицу с подробной информацией, используется сниппет cmCampers в этом
сниппете. Как только пользователь зарегистрируется при просмотре страницы, Вы можете сохранить
ее неопубликованной, чтобы предотвратить попадание на нее посетителей сайта.
Пример, который Вы могли бы использовать:
[[!cmCampers? &limit=`0` &sort=`keynr` &dir=`asc`
&includeImages=`false` &status=`1,2,3,4` &tplOuter=`cmVoorraadOuter`
&tplItem=`cmVoorraadItem` &optionsSeparator=` / `]]
cmVoorradOuter chunk:1
<table id="voorraadPrint">
[[+items]]
</table>
cmVoorraadItem chunk:1
<tr>
<td rowspan="2">
<strong>
[[+keynr:notempty=`Nr. [[+keynr]]`]]
[[+plate:notempty=`<br />[[+plate]]`]]
</strong>
</td>
<td rowspan="2">
[[+brand]] / [[+type]] / [[+car:notempty=`[[+car]] /`]]
[[+engine:notempty=`[[+engine]] /`]] Bouwjaar
[[+manufactured:eq=`0`:then=`onbekend`:else=`[[+manufactured]]`]] / Gewicht
[[+weight:eq=`0`:then=`onbekend`:else=`[[+weight]]`]] /
[[+beds]] Slaapplaatsen / Kilometerstand
[[+mileage:eq=`0`:then=`onbekend`:else=`[[+mileage]]`]] / APK tot
[[+periodiccheck:eq=`0`:then=`onbekend`:else=`[[+periodiccheck]]`]] /
[[+options]]
[[+remarks]]
</td rowspan="2">
<td>
[[+status:eq=`2`:then=`
<img src="assets/templates/lighthouse/cmimg/banner_topper_sm.png" alt="Topper" />`]]
[[+status:eq=`3`:then=`<img src="assets/templates/lighthouse/cmimg/banner_optie_sm.png"
alt="In optie" />
`]]
[[+status:eq=`4`:then=`
<img src="assets/templates/lighthouse/cmimg/banner_verkocht_sm.png" alt="Verkocht" />
`]]
</td></tr><tr><td>
<strong>€
[[+price]]
</strong>
</td>
</tr>
В результате получается (прилагаются css):
Настраиваемые элементы контекстного меню
Для 2-х настраиваемых элементов контекстного меню доступна встроенная поддержка. Функция
первого – предложить помощь в создании печатной страницы с детальной информацией, которая
вкладывалась бы в автомобиль, когда клиенты приходят в магазин. Еще один был включен для
генерирования контракта с указанием подробной информации о владельце и автомобиле.
Это работает так же, как настраиваемые кнопки, с использованием системных настроек
campermanagement.ctxmenu1 and campermanagement.ctxmenu2 с ID ресурса в качестве значения. В
словаре нужно изменить кнопки campermgmt.ctxmenu1 и campermgmt.ctxmenu2. Они будут
отправлять пользователя к URL сайта + index.php?id = + id в настройках системы + &cid= + ID
транспортного средства. Рекомендуется использование со сниппетом cmCamperDetails, который
выискивает параметр cid. Если ваш сайт использует различные настройки шлюза (не index.php, или
другой параметр для ID), Вам нужно будет внести изменения в файл
assets/components/campermanagement/js/mgr/widgets/grids/grid.campers.js – меню составляет около
половины страницы.
Просто вызовите в ресурсе
[[!cmCamperDetails]]
и используйте
[[!+cm.<fieldname>]]
placeholder-ы в контенте. Вы сами задаете границы
азработка front-end
Front-end CamperManagement поддерживается двумя сниппетами: cmCampers и cmCamperDetails.
cmCampers похож на getResources и используется для ведения списков различных кемперов в
системе.
cmCamperDetails представляет собой сниппет, который можно использовать для отображения
дополнительной информации о транспортном средстве, основанной на GET –параметре "cid".
Сниппет cmCamperDetails
Сниппет CmCamperDetails используется для обеспечения страницы " Vehicle Details " (детальная
информация о транспортном средстве). На самом деле, сам по себе сниппет не возвращает никакой
информации, но вместо этого он установит пакет placeholder-ов для использования в Вашем
темплейте. Для получения информации о плейхолдерах, смотрите страницу [Placeholders.
display/ADDON/CamperManagement.Placeholders+you+can+use]
Сниппет CmCamperDetails требует "cid" url или доступный post параметр, которые используются для
идентификации транспортного средства для отображения. Если доступного нет, он может отправить
пользователя на определенный ресурс, или же сниппет выведет сообщение об ошибке. Так как Ваш
шаблон будет выглядеть пустым без него, я предлагаю создание страницы вроде "Camper does not
exist" (кемпер не существует). Также см. свойства cid*Action.
Свойства сниппета
&property
cidEmptyAction
cidInvalidAction
Описание
Значение по умолчанию
0 | валидный ID ресурса.
1
Если не 0, то будет 301
редирект пользователя на
ID ресурса, указанного
Вами. Срабатывает, когда
не был найден "cid" url/post
параметр.
0 | валидный ID ресурса.
1
Если не 0, то будет 301
редирект пользователя на
ID ресурса, указанного
Вами. Срабатывает, когда
найденный "cid" параметр
hideInactive
cidInactiveAction
includeBrand
includeOwner
includeImages
includeOptions
tplImageOuter
tplImageItem
не является действительным
кемпер- объектом (не
найдено).
0 | 1. Если установлена 1,
0
будет анализироваться
cidInactiveAction, и либо
отображается сообщение об
ошибке, либо пользователь
перенаправляется, если
транспортное средство
имеет статус 0 (не
подтверждено) или 5
(неактивно).
0 | валидный ID ресурса.
1
Если не 0, то будет 301
редирект пользователя на
ID ресурса, указанного
Вами. Срабатывает, когда
кемпер был найден, а
ресурс – нет.
1 | 0. Определяет, должен ли 1
связанный бренд-объект
быть восстановлен. Когда
нет необходимости, можно
сэкономить время
обработки.
1 | 0. Определяет, должен ли 0
связанный владелец объекта
быть восстановлен. Когда
нет необходимости, можно
сэкономить время
обработки.
1 | 0. Определяет, должны 1
ли быть восстановлены
связанные изображения.
Когда нет необходимости,
можно сэкономить время
обработки.
1 | 0. Определяет, должны 1
ли быть восстановлены
связанные параметры.
Когда нет необходимости,
можно сэкономить время
обработки.
Chunkname. Внешний
cmDefaultTplImageOuter
темплейт, охватывающий
свод результатов по
изображениям, вызывается
для каждой единицы
транспортного средства.
Chunkname. Темплейт для cmDefaultTplImageItem
одного элемента
изображений.
tplOptionsOuter
tplOptionsItem
tplOwner
locale
Chunkname. Внешний
темплейт, охватывающий
свод результатов по
опциям, вызывается для
каждой единицы
транспортного средства.
Chunkname. Темплейт для
одной опции.
Chunkname. Темплейт,
используемый для
отображения информации о
владельце.
Локаль (Locale),
используемая для функции
money_format,
форматирующей цену.
cmDefaultTplOptionsOuter
cmDefaultTplOptionsItem
cmDefaultTplOwner
it_IT
Как использовать этот фрагмент
Этот сниппет устанавливает placeholder-ы с префиксом см., и которые устанавливаются в
зависимости от Вашей секции include*.
Убедитесь перед использованием, что placeholder-ы сниппета актуальны, так как потом их нельзя
установить заново. И сниппет, и placeholder-ы, должны быть некэшированным, так как зависят от
запроса.
Вот пример вызова сниппета:
[[!cmCamperDetails? &tplImageItem=`cmDetailImage` &includeImages=`1`
&includeOwner=`0`]]
где cmDetailImage имеет следующий контент, который используется для скрипта слайд-шоу и
использует phpthumbof сниппет:
<li>
<h3>
[[+brand]] [[+type]]
</h3>
<span>
[[+image:phpthumbof=`w=620&h=360&far=c`]]
</span>
<img src="
[[+image:phpthumbof=`w=45&h=33&zc=1`]]
" alt="thumb" />
</li>
В самом темплейте Вы просто используете placeholder-ы вроде этих:
<ul>
<li><span>Brand</span>
[[!+cm.brand:default=` `]]
</li>
<li><span>Type</span>
[[!+cm.type:default=` `]]
</li>
<li><span>Price</span>€
[[!+cm.price:default=` `]]
</li>
<li><span>Car</span>
[[!+cm.car:default=` `]]
</li>
<li><span>Engine</span>
[[!+cm.engine:default=` `]]
</li>
</ul>
Модификатор вывода по умолчанию можно использовать для значений по умолчанию (в данном
случае – неразрывный пробел в качестве требуемого темплейта, если нет значения).
cmCampers Snippet
cmCampers можно использовать для агрегации данных на различных транспортных средствах в базе
данных.
Свойства сниппета
Вы можете использовать следующие свойства в cmCampers для регулирования поведения и
настроить так, как нужно Вам. Некоторые из них пересекаются со сниппетом cmCamperDetails.
&property
Описание
Возможность задать offset, чтобы игнорировать первых N
автомобилей.
limit
Количество результатов, возвращающихся от сниппета.
Установите 0 или реальное количество до бесконечности.
sort
Поле для сортировки. Принимаются любые поля в объекте
cmCamper, но не все из них имеют смысл. Обратите внимание,
что при сортировке по связанным единицам (марка, владелец),
сортировка проводится по их ID и *not* имени. Когда
searchFromRequest установлен на 1, сортировка может
определяться url-параметром.
dir
asc | desc. Область сортировки. Когда searchFromRequest
установлен на 1, сортировка может определяться sortdir urlпараметром.
includeBrand 1 | 0. Определяет, должен ли связанный бренд-объект быть
восстановлен. Когда нет необходимости, можно сэкономить
время обработки.
includeOwner 1 | 0. Определяет, должен ли связанный владелец объекта быть
восстановлен. Когда нет необходимости, можно сэкономить
время обработки.
includeImages 1 | 0. Определяет, должны ли быть восстановлены связанные
изображения. Когда нет необходимости, можно сэкономить
время обработки.
includeOptions 1 | 0. Определяет, должны ли быть восстановлены связанные
параметры. Когда нет необходимости, можно сэкономить
время обработки.
status
Разделенный запятыми список ID статуса, которые должны
быть включены в результаты. ID:
start
Значение по
умолчанию
0
4
added
desc
1
0
1
1
1,2,3,4
0. Неподтвержденный
1. Активный
2. Избранный
3. Условно продан
4. Продан
target
5. Неактивный
Целое число, показывающее, сколько изображений должно
1
быть восстановлено.
Целое число ID ресурса на странице детальной информации о 2
кемперах. Будет использоваться с makeUrl для создания ссылки
с дружественными url настройками, передающей "cid" в URL с
ID кемпера.
tplOuter
Chunkname. Внешний темплейт , охватывающий весь свод
результатов. Placeholders
numimages
cmDefaultTplOuter
tplItem
Chunkname. Темплейт единицы.
cmDefaultTplItem
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
tplImageOuter Chunkname. Внешний темплейт, охватывающий весь свод
cmDefaultTplImageO
результатов по изображениям, вызывается для каждой единицы
транспортного средства.
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
tplImageItem Chunkname. Темплейт для одного изображения.
cmDefaultTplImageIte
m
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
tplOptionsOuter Chunkname. Внешный темплейт, охватывающий весь свод
cmDefaultTplOptions
результатов по опциям, вызывается для каждой единицы
Outer
транспортного средства.
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
tplOptionsItem Chunkname. Темплейт для одной опции.
cmDefaultTplOptionsI
tem
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
tplOwner
Chunkname. Темплейт для отображения информации о
cmDefaultTplOwner
владельце.
[Placeholders|display/ADDON/CamperManagement.Placeholders+
you+can+use]
searchFromReq 1 | 0. Если 1, также будут проверяться запросы POST и GET для 0
uest
статуса, по которому совершается фильтрация, поля
сортировки и области сортировки. Поля, которые он выбирает
и замещает на свойства сниппета: status, sort, dir.Когда он
находит фильтр статуса, устанавливает placeholder "statusfilter",
который Вы можете использовать в своем темплейте.
locale
toPlaceholder
Локаль, используемый для функции money_format, которая
форматирует цену.
При установке будет установлен placeholder, ключ, который в
результате функции передается toPlaceholder.
it_IT
Пример использования
Пример 1: Простой обзор последних дополнений
Перезапишите чанк элемента и чанк элемента изображения, получив последние 4 добавленных
транспортных средства и ссылки на информационную страницу с ID 12.
1
[[! CmCampers? И tplItem = `` cmTplItem и tplImageItem = `` cmTplImage и предел = `4`
и целевых = `12`]]
чанк cmTplItem:
<li onclick="location.href='
[[+url]]
'">
<div class="status
[[+status]]
"></div>
[[+images:default=``]]
<h4><a href="
[[+url]]
" title="
[[+brand]] [[+type]]
">
[[+brand]] [[+type]]
</a></h4>
<ul>
<li><span>Manufactured:</span>
[[+manufactured]]
</li>
<li><span>Mileage:</span>
[[+mileage]]
</li>
<li><span>Engine:</span>
[[+engine]]
</li>
<li><span>Price:</span> €
[[+price]]
</li>
</ul>
</li>
С помощью дополнительной CSS-стилизации, вот результат (очевидно, кое-что можно было бы и
улучшить):
Пример 2: слайд-шоу транспортных средств, которые помечены как избранные
Создание такого слайд-шоу предполагает, что у Вас есть плагин, настроенный для обработки слайд-
шоу с инструкцией использования различных свойств tpl, чтобы на выходе получить то, что Вам
нужно.
Таким будет наш темплейт (он соответствует скрипту нашего слайд-шоу):
<div id="slideshow">
[[!cmCampers? &status=`2` &tplOuter=`cmHomeOuter` &tplItem=`cmHomeItem`
&tplImageItem=`cmHomeImage` &searchFromRequest=`0` &target=`12` ]]
</div>
Выбираем для фильтра статус 2 (избранное) и используем несколько чанков темплейтов (шаблонов):
cmHomeOuter, который выводит только внутренний stuff вместо неупорядоченного списка по
умолчанию. Мы могли бы также вставить контейнер div из темплейта (упомянутого выше) в наш
внешний темплейт.
[[+items]]
cmHomeItem, который выводит изображения и заголовок для одного транспортного средства. Опять
же, это специфика нашего слайд-шоу и Ваши скрипты могут отличаться.
<div class="slide">
<a href="
[[+url]]
" title="
[[+brand]] [[+type]]
" >
[[+images]]
</a>
<div class="slider-infobox">
<p><a href="
[[+url]]
" title="
[[+brand]] [[+type]]
" >
[[+brand]] [[+type]]
- €
[[+price]]
</a></p>
</div>
</div>
cmHomeImage, который просто вставляет тег изображения.
<img src="
[[+image]]
" alt="
[[+brand]] [[+type]]
" />
Из описанного выше получается, что во front-end одного элемента выводится:
<div class="cycle">
<a href="aanbod/details.html?cid=12" title="TEC Siena Saphir 510 TR" ><img
src="/assets/components/campermanagement/uploads/2011/12/cm25917-723.jpg" alt="TEC
Siena Saphir 510 TR" /></a>
<div class="slider-infobox">
<p><a href="aanbod/details.html?cid=12" title="TEC Siena Saphir 510 TR" >TEC Siena
Saphir 510 TR - € 5.999,00</a></p>
</div>
</div>
Скомбинировав с нашим скриптом слайд-шоу и CSS, мы получаем в результате:
Каждое изображение может состоять из нескольких, но если по умолчанию свойство numimages
установлено на 1, сразу Вы этого не увидите. Используя чанки tplImageOuter и tplImageItem, Вы
можете настроить мини слайд-шоу из изображений на странице обзора. Я думаю, что это интересная
концепция, и если кто-то так сделал, или хотел бы сделать, хотелось бы узнать об этом. Вы можете
связаться со мной через hello на markhamstra dot com.
Placeholders-ы, которые можно использовать
Оба сниппета, cmCampers и cmCamperDetail, работают с теми же данными и позволяют
включать/исключать определенные объекты со свойствами. Эта страница будет обзором различных
placeholder-ов, которые Вы можете использовать. В некоторых чанках (например, tplImageItem), Вы
может использовать также любой из родительских чанков, например, подробности о кемперах.
Употребляя cmCampers, используйте плейсхолдеры в своих чанках в кэшированном виде, чтобы
предотвратить непредсказуемое поведение. Пример:
[[+brand]]
Употребляя cmCamperDetails, используйте плейсхолдеры с префиксом cm. (не забудьте точку), и
убедитесь, что они вызываются некэшированными. Пример:
[[!+cm.brand]]
Специальный сниппет: cmCamper
Есть специальные плейсхолдеры для сниппета cmCamper. Кроме этих, обратите внимание на
плейсхолдеры объектов, которые упоминаются дальше, чтобы понять, что Вам может быть полезно
из каждого восстановленного объекта.
tplItem Chunk
Плейсхолдер Описание
url
Ресурс идентифицирует href-часть ссылки по свойству &target. Содержит url-параметр
"cid" с ID кемпера в качестве значения.
owner
Зависит от свойства includeOwner. Если 1, он выведет результат свойства чанка
tplOwner, если нет, вернет ID владельца.
images
В зависимости от свойства includeImages и numImages (> 0), будет заполнен
содержанием свойства чанка tplImageOuter, который взамен заполняется содержанием
свойства чанка tplImageItem для каждого элемента-изображения.
options
В зависимости от свойства includeOptions, вернет Ваши опции, как отформатированные
tplOptionsOuter, в рамках которых находится чанк tplOptionsItem.
Чанки tpl*Outer (а также плейсхолдеры, установленные
cmCamperDetails!)
tpl*Outer
Плейсхолдер Описание
tplOuter
элементы
Содержимое всех чанков tplItem, с разделителем – косая линия. (\n)
tplImageOuter изображения Содержимое всех чанков tplImageItem, с разделителем – косая линия.
(\n)
tplOptionsOuter опции
Содержимое всех чанков tplOptionsItem с разделителем, указанном в
свойстве &optionsSeparator сниппета cmCamper.
Кемперы (класс: cmCamper)
Плейсхолдер Примечания
brand
Если не введен объект бренда (&includeBrand=`0`), будет выводиться только ID
связанного объекта бренда. Остальное – это имя бренда.
type
place
car
engine
manufactured Будет отформатирован d/m/Y с использованием strftime.
beds
weight
mileage
periodiccheck Будет отформатирован d/m/Y с использованием strftime.
remarks
Хранятся чистыми, без HTML-тегов. Если использованная строка заканчивается в
текстовой области замечаний, Вы, возможно, захотите применить модификатор вывода
nl2br.
price
Форматируется с использованием money_format (включенных, если нет на Вашем
устройстве) с использованием опций %!.2n
status
Статус ID (0-5 включительно):
0. Неподтвержденный
1. Активный
2. Избранный
3. Условно продан
4. Продан
statusname
keynr
owner
id
added
archived
5. Неактивный
Переведенная строка, связаная с Вашим статусом ID.
Владелец объектно-реляционного ID, без дополнительной информации.
Уникальный ID кемпер-объекта
Форматированный d/m/Y timestamp объект был добавлен.
Форматированный d/m/Y timestamp объект был заархивирован.
Опции (класс: cmOption, класс many-to-many:
cmCamperOptions)
Плейсхолдер Примечания
id
name
Бренд (класс: cmBrand)
Обычно нет прямого доступа, но заменяет placeholder бренда кемпера на им я бренда из этого
объекта.
Владелец (класс: cmOwner)
Объект владельца может использоваться в качестве очень рудиментарной настраиваемой системы
взаимодействия. Пока Вы не построите некую классифицированную систему, Вам, вероятно, не
удастся показать эту информацию посетителям сайта.
Плейсхолдер
firstname
lastname
email
bank
phone1
phone2
address
postal
city
country
Примечания
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Советуется не использовать в местах с общим доступом.
Изображения (класс: cmImages)
Плейсхолдер Примечания
camper
Ссылка на ID кемпера
rank
image
Связанный URL, можно использовать с phpthumbof для изменения размера
Управление автомобилем
Не волнуйтесь, первый выпуск CamperManagement будет доступен на английском и голландском, а
далее выйдут и другие языковые версии.
Cliche
Cliche – это компонент Image Gallery для MODx Revolution 2.2.
Установка
• Установите компонент с помощью Package Manager.
• Обновите страницу
• Выберите Cliche в компонентах (Components) главного меню
• Создайте альбом (Album) и загрузите несколько изображений
• Используйте сниппет Cliche для отображения Ваших альбомов
Функциональные возможности
• Легкое управление изображениями: cmp фокусируется на простоте
• Множественная загрузка файлов: для Вашего удобства доступна пакетная и/или zip-загрузка
изображений
• Простота создания темплейта: если захотите, Вы можете применить HTML-разметку (как в tplфайле, так и в чанке через менеджер), а также любые стили CSS, которые Вам понадобятся
• Javascript эффект: используйте любые популярные эффекты изображений из библиотеки на Ваш
выбор
История изменений (Roadmap)
Копирование или перемещение изображений между альбомами
Водяной знак
Опции сортировки
Поддержка тегов
Настраиваемое поле
Мета-данные (EXIF, IPTC или XMP мета-данные)
Типы Cliche Custom Resource для управления альбомами по ресурсам, которые могут быть полезны
для управления портфолио
Еще примеры: скоро на специальном тематическом веб-сайте
Настраиваемый сниппет: для облегчения интеграции боковой панели
До официального релиза
• переменная Cliche Thumbnail Template: легкий способ управлять миниатюрой публикации Вашего
ресурса
• Gallerific Plugin
• Более полная инструкция
Использование
Используйте Cliche Snippet для показа Вашей галереи, если захотите
Просто вставьте следующую строку в документ:
[[Cliche]]
Чтобы показать все альбомы списка:
[[Cliche?
&view=`albums`
]]
Чтобы показать определенный альбом:
[[Cliche?
&id=`your_album_id`
&view=`album`]]
Чтобы показать конкретное изображение:
[[Cliche?
&id=`your_image_id`
&view=`image`
]]
Доступные параметры
Параметр Описание
thumbWidth Ширина изображения в пикселях
thumbHeight Высота миниатюр в пикселях
wrapperTpl Wrapper html чанк, общий для всего просмотра (view)
itemTpl
html чанк каждого элемента, общий для всего просмотра (view)
Плагин контроллер, PHP-файл, обрабатывающий параметры
отображения
columns
Количество отображаемых столбцов
columnBreak html-разметка, которая используется для разбивки столбцов с
помощью стандартной программы просмотра
browse
Используется для списка альбомов и просмотра.
plugin
По умолчанию
120
120
Albums :
albumwrapper
Albums :
albumcover
default
3
<br style="clear:
both;">
1
Указывает скрипту, должна ли thumbnail (уменьшенная копия)
связывать страницу или непосредственно изображение
Примечания
По умолчанию, все чанки являются файлами и находятся в:
"assets/components/cliche/plugins/[plugin]/[chunkName].tpl"
Тем не менее, если Вы хотите, можете использовать любой обычный чанк.
Cliche сначала будет искать чанк в БД, и если он не существует, - файл в папке плагинов (как *.tpl
файл).
Вы можете обойти поиск в БД и использовать только файловые чанки с помощью параметра
"use_filebased_chunks"
Удачи!
Ошибки и проблемы
Cliche разрабатывается в GitHub по этому адресу: https://github.com/lossendae/Cliche
CMPGenerator
Что такое CMPGenerator?
CMPGenerator предназначен для использования PHP-разработчиками, которые хотят создавать
настраиваемые табличные базы данных, которые будут использоваться через сниппет, плагин или
CMP. CMPGenerator представляет собой GUI (графический интерфейс), создает схемные xpdo-файлы
и xpdo-классы для пользовательских таблиц баз данных всего лишь одним нажатием кнопки. Это
позволяет быстро начать использовать xpdo в пользовательских проектах.
Необходимые знания разработчиков
• Базы данных - MySQL
• PHP
• И тогда вы можете начать использовать XPDO
• стандарты кодирования MODX
История
CMPGenerator был написан Джошем Галледжем (Josh Gulledge), чтобы предоставить возможность
простого создания и добавления пользовательских таблиц в CMP, сниппет или плагин. CMPGenerator
написан в июле 2011 года, а первый публичный релиз состоялся в начале 2012 года.
Установка
Установить CMPGenerator можно в рамках менеджера MODx Revolution с помощью Package
Management.
См. страницу дополнений: http://modx.com/extras/package/cmpgenerator.
Разработка и отчет об ошибках
CMPGenerator на GitHub: https://github.com/jgulledge19/CMPGenerator, сообщите о любых проблемах
или пожеланиях: https://github.com/jgulledge19/CMPGenerator/issues.
Как использовать
1. Создайте таблицы баз данных методом, которому Вы отдаете предпочтение - PhpMyAdmin,
SQLyog, и т.д.
Обратите внимание, Ваш автоматический инкрементный первичный ключ должен быть назван ID
2. Теперь создайте новый пакет
- Выберите уникальное имя, это пригодится для создания префикса для ваших пакетов.
Например, Вы можете использовать ваши инициалы по схеме First Middle Last: fmlMyCustomPackage
Также убедитесь, что вы используете только буквы и значения
- Объедините новосозданные таблицы в список, разделенный запятыми
- Укажите префикс для таблицы, если такой имеется. Рекомендуется использовать тот же префикс,
который указан для установки MODX.
- Выберите, если вы хотите построить схему. Если Вы не сделаете этого, не можете использовать
таблицы.
- Выберите создание пакета, где будут генерироваться все необходимые файлы.
3. После создания файлов, если Вы используете таблицы со связями, которые могут понадобиться,
вручную добавьте этот код в файл: core/components/YOUR-CMP/model/YOUR-CMP/YOURCMP.mysql.custom.schema.xml.
Чтобы получить более подробную информацию, смотрите документацию по Defining Relationships
(Определению связей):
http://rtfm.modx.com/display/xPDO20/Defining+Relationships.
После обновления этого файла, чтобы показать связи, Вы можете регенерировать пакет. Отметьте в
Build Scheme “No”, Build Package – “Yes” и сохраните.
BuildScheme – создает или воссоздает XML-файл. Убедитесь, что вы установили в этой опции “No”,
если Вы вносили какие-либо изменения в файл.
BuildPackage – создает или воссоздает файлы xpdo-класса, запрашиваемые пакетом.
При создании нового CMP, CMPGenerator создает все папки для CMP как в
assets/components/MYCMP, так и в core/components/MYCMP.
5-минутный пример
Выполните следующие действия после установки CMPGenerator.
1. Создайте таблицу modx_test с любимым SQL GUI или командной строкой:
CREATE TABLE `modx_test` (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`name` VARCHAR(64) NOT NULL,
`description` VARCHAR(64) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=INNODB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8
2. Далее откройте Manager CMPGenerator и нажмите на кнопку Create Package
Заполните информацию в таблице, которую мы только что создали и выберите имя пакета:
3. Вы нажимаете сохранить все файлы, созданные в /your MODX/core/components/mytest/
4. Теперь проверяете, получилось ли и создаете простой сниппет, чтобы проверить нашу вновь
созданную таблицу.
Называете сниппет mytest и вставляете следующий код:
mytest Snippet Code
<!--?php
/**
* mytest table
*/
= '';// это то, что возвращает сниппет
// добавьте пакет, чтобы можно было использовать xpdo:
= --->getOption('core_path').'components/mytest/model/';
// посмотрите на файл-схему и элемент xml модели и Вы увидите атрибутивный пакет,
который должен соответствовать:
$modx->addPackage('mytest', $package_path);
// давайте добавим данные!
// посмотрите на файл-схему и элемент объекта xml и Вы увидите атрибутивный класс,
который должен соответствовать:
$myRow = $modx->newObject('Test');
$data = array(
'name' => 'MODX Revolution',
'description' => 'A great CMS product...'
);
$myRow->fromArray($data);
if ( !$myRow->save() ) {
$output .= '
Could not create row
';
} else {
$output .= '
Created row successfully
';
}
// теперь давайте покажем данные в быстрой таблице:
$output .= '
';
// Запомните: для всех HTML нужно использовать чанки:
http://rtfm.modx.com/display/revolution20/Chunks#Chunks-ProcessingChunkviatheAPI
/* build query */
$query = $modx->newQuery('Test');
$rows = $modx->getIterator('Test', $query);
/* iterate */
$list = array();
foreach ($rows as $row) {
// для объекта к упорядочиванию можно сделать $row->get('name');
$row_array = $row->toArray();
$output .= '
';
}
$output .= '
ID
Name
Description
'.$row_array['id'].' '.$row_array['name'].' '.$row_array['description'].'
';
return $output;
5.Теперь вводите сниппет в ресурс и запускаете несколько раз.
[[!mytest]]
Вы должны увидеть что-то вроде этого (помните, на странице my test есть CSS, заданный к
таблицам)
Внешние базы данных
Использование внешних баз данных
Добавлено в 1.1
Внешняя база данных означает базу данных второй или третьей стороны. Пример, который должен
быть Вам знаком – база данных modx в качестве Вашей MODX db и, возможно, у Вас есть crm для
Вашей CRM db. crm в этом случае – внешняя база данных. Начиная с версии 1.1 для создания файла
Ваша внешняя база данных должна быть на той же машине, что и Ваша MODX DB и MySQL.
Пользователь базы данных, использующий MODX, также должен иметь разрешение на доступ к
внешней базе данных.
При запуске CMPGenerator заносит в базу данных имя и, при необходимости, префикс таблицы.
Теперь, когда Вы создаете сниппет, Вам нужно будет создать новый образец xPDO, а затем вы
можете вводить код как обычно (с помощью ссылки на Вашу $foreignDB вместо $MODx, конечно).
См. пример кода ниже.
Базовый пример фрагмента кода
<?php
require_once $modx->getOption('core_path').'config/foreigndb_config.php';
$output = '';// this is what the snippet will return
$foreignDB = new xPDO('mysql:host=' .
$foreign_database_host.';dbname='.$foreign_database_name/*.';charset='.$foreign_databas
e_charset*/,
$foreign_database_username,
$foreign_database_password );
$package_path = $modx->getOption('core_path').'components/foreigndb/model/';
// see the scheme file and the xml model element and you will see the attribute package
and that must match here
// make sure you set the prefix as empty if you don't use it
if ( !$foreignDB->addPackage('foreigndb', $package_path, '') ) {
return 'Can not load package';
}
// lets add some data!
// see the scheme file and the xml object element and you will see the attribute class
and that must match here
$myRow = $foreignDB->newObject('EventName');
$data = array(
'name' => 'MODX Revolution',
'description' => 'A great CMS product...'
);
$myRow->fromArray($data);
if ( !$myRow->save() ) {
$output .= '<p>Could not create row</p>';
} else {
$output .= '<p>Created row successfully</p>';
}
// now lets show the data in a quick and dirty table:
$output .= '
<table>
<tr>
<th>ID</th>
<th>Name</th>
<th>Description</th>
</tr>';
// Note for all HTML you should be using Chunks see:
http://rtfm.modx.com/display/revolution20/Chunks#Chunks-ProcessingChunkviatheAPI
/* build query */
$query = $foreignDB->newQuery('EventName');
$rows = $foreignDB->getIterator('EventName', $query);
/* iterate */
$list = array();
foreach ($rows as $row) {
// from object to array you can also do $row->get('name');
$row_array = $row->toArray();
$output .= '
<tr>
<td>'.$row_array['id'].'</td>
<td>'.$row_array['name'].'</td>
<td>'.$row_array['description'].'</td>
</tr>';
}
$output .= '
</table>';
return $output;
CookieList
CookieList – это обобщенный аддон, который может быть использован для хранения вишлистов,
избранных пользователем элементов и другого подобного контента. Он позволяет определить
значение для сохранения, которое означает, что он не ограничен ресурсами, а также может
использоваться для обеспечения функционала вишлиста для настраиваемых компонентов. Как
следует из названия, данные сохраняются в Cookie.
Разработчик, ссылки и другое
CookieList разработал Ромен Трипол (Romain Tripault) из Melting Media для Марка Хамстра (Mark
Hamstra), которому, в свою очередь, он понадобился для настраиваемого компонента BD Creative под
названием bdListings. Было решено, что вместо включения его в общий пакет, он будет поставляться
как отдельно – так им будет легче воспользоваться всем, кто нуждается подобном функционале.
Источник на Github: https://github.com/Mark-H/CookieList
На Github также хранятся файловые ошибки/пожелания внесения изменений: https://github.com/MarkH/CookieList/issues
Общая тема форума для этого аддона: http://forums.modx.com/thread/71914/cookielist---wishlistfavorites-addon-for-revolution-using-lovely-cookies
Не сдерживайте себя, создавая форки и добавляя дополнительные функции, если Вам это нужно –
pull request (запрос на слияние с оригиналом того кода, который написан внутри ветви некоторого
форка) высоко ценится, если он добавляет ценности пакету в целом.
CookieList был разработан для MODx Revolution и может устанавливаться с помощью Package
Manager или с сайта MODX. Хотя на более ранних версиях углубленное тестирование не
проводилось, он должен работать с 2.0 и выше.
Версия Выпущен
Примечание
1.0.0-pl 18 ноября 2011 года Первый публичный релиз
Использование
CookieList поставляется с двумя сниппетами.
Первый, addToCookieList, позволяет сгенерировать ссылку (или что-нибудь еще, можно легко
перезаписать темплейт), что дает возможность пользователю добавить или удалить элемент из
CookieList.
Второй, getCookieList, просто выбирает куки и возвращает разделенный запятыми список значений,
которые были сохранены. Он используется для генерирования обзора хранимых элементов
вишлиста/избранного и т.д.
addToCookieList
Минимальный запрос, приведенный ниже, создает ссылку или выдает "Add to your CookieList"
(Добавить в Ваш CookieList) или "Remove from your CookieList " (Удалить из Вашего CookieList).
Возможно, Вы захотите изменить эти метки, и это можно сделать (посмотрите на свойства AddText и
removeText ниже).
[[!addToCookieList]]
! Вам необходимо будет всегда запрашивать сниппеты addToCookieList и getCookieList
некэшированными, так как каждый запрос может исходить от другого пользователя, и лучше внести
изменения до того, как будет очищен кэш ресурса. При использовании с GetPage убедитесь, что
&cache=0, чтобы предотвратить также кэширование GetPage.
Свойства сниппета
Вы можете использовать следующие свойства:
Свойство Описание
Значение по
умолчанию
value
Что храниться в куки. Вы, вероятно, захотите сохранить уникальный ID Текущий ID
объекта, таким образом Вы сможете использовать сниппет getCookieList ресурса
для создания обзора этих объектов со сниппетом.
addText
Перезапись метки "add" по умолчанию для конкретного языка.
"Add to your
CookieList"
removeText Перезапись метки "remove" по умолчанию для конкретного языка.
"Remove from
your CookieList"
tpl
Позволяет совершить перезапись чанка темплейта по умолчанию. Вы
можете использовать ссылку, значение и метку в своем чанке tpl. По
умолчанию (filebased) чанк выглядит следующим образом:
<a href="" title=""></a>
Примеры
Минимальный запрос может быть использован для сохранения текущего ID ресурса в куки, который
затем можно использовать со сниппетом getResources для создания обзора ресурсов.
getCookieList
Этот сниппет либо возвращает пустую строку, либо разделенный запятыми список значений,
которые хранятся для пользователя. Это действительно простой сниппет, поскольку и выглядит он
соответственно:
[[!getCookieList]]
Нет свойств, которые Вы могли бы использовать для изменения поведения сниппета.
Настройки системы
Для CookieList требуются две настройки системы:
• cookielist.cookie.duration: устанавливает время, в течении которого куки действителен, по
умолчанию – месяц.
• cookielist.cookie.name: задает имя куки, по умолчанию cookieList.
CronManager
Что такое CronManager
Cron-менеджер для MODx позволяет выполнять сниппеты с помощью crontab-а сервера. С помощью
менеджера MODx Revolution Вы можете просто добавить новые сниппеты в cron-список.
Использование сниппетов для cron-управления также требует свойств, и Вы можете добавить
свойства вручную, путем занесения пар ключевых значений, но и с propertyset (имя).
Установка
Сначала установите пакет с помощью Package Management в MODx Revolution.
Далее Вам нужно настроить cron-скрипт в crontab-списке серверов. На большинстве хостингов
доступна панель управления вроде Direct Admin, и, как правило, у Вас есть возможность изменять
конфигурацию сronjobs с помощью этой панели управления. Те, у кого есть доступ к серверу SSH,
могут добавить cronjob с командой "crontab -e ". Добавьте следующую строку в cronjob. (Обратите
внимание: в некоторых случаях эта команда нуждается в некоторых изменениях, Вам стоит обсудить
это со своим провайдером).
cd /path/to/your/modx/installation/assets/components/cronmanager/ && php cron.php
Мы рекомендуем Вам выполнить cronjob каждую минуту, каждый день в каждом месяце (*то есть: m
h dom mon dow). Но если Вы уверены, что нет необходимости в ежеминутном cronjob, Вы можете
изменить интервал crontab исходя из собственных нужд.
Примеры использования
Чтобы использовать компонент, перейдите к своему менеджеру и нажмите "Components > Cron
Manager".
Создать новый cronjob
Так Вы можете создать новый cronjob, нажав на кнопку "new".
Вы видите поля "Snippet", "Minutes" и "Snippet properties".
Snippet: Вы можете начать вводить имя сниппета вручную или открыть автоматический поиск,
нажав на стрелку, направленную вниз
Minutes: Введите количество минут, обозначающих период времени, через который будет
запускаться сниппет. Например, если вы введете 15, сниппет будет запускаться каждых 15 минут
(если crontab на сервере настроен правильно)
Snippetproperties: Здесь вы можете задать свойства сниппета. Вы можете ввести их в парах ключзначение (каждая с новой строки) или же как объект JSON. Может быть, лучше всего будет
использовать propertysets, в этом случае Вы можете добавить имя PropertySet.
Примечание: после добавления cronjob не происходит прямая активация. Вы должны выбрать
активное состояние “yes” в последней колонке обзора.
Что собой являет обзор
В обзоре cronjobs Вы можете увидеть, какие сниппеты составляют cronjob и каков минутный
интервал. Также есть две колонки с названиями "Last run" и "Next run" (“Последний запуск” и
”Следующий запуск"). Эти колонки отображают дату и время, когда будет cronjob запускался в
последний раз, и когда запланирован следующий запуск. В последней колонке содержится
информация о том, активный cronjob или нет. Это полезно для тех, кто хочет временно отключить
cronjob.
Файл регистрации (лог) для каждого cronjob
Каждый сниппет в cronjob может возвращать несколько значений – в целях тестирования или что-то
вроде этого. Каждое возвращенное значением сниппета будет записываться вноситься в файл
регистрации cronjob в рамках MODx. Вы можете просмотреть этот журнал, нажав правой кнопкой
мыши на записи, начиная с которой Вы хотите просмотреть лог.
Лог – это простой обзор всех возвращенных сообщений, а также там отображается timestamp
(временная метка).
CustomUrls
Что такое пользовательские URL-адреса?
Данные адреса позволяют определить пользовательские псевдонимы или структуру универсальных
индикаторов ресурсов (URI) для своих собственных ресурсов. Они поддерживают транслитерацию
и сетевые пакеты.
Вы можете создать собственную структуру из полей ресурса, ТВ, фрагментов или выходных
фильтров и задать желаемые определенные ограничения, которые бы применялись в
пользовательских формах.
К примеру, при помощи пользовательского URL-адреса можно добавить идентификатор ресурса или
опубликовать месяц в псевдонимах всех ресурсов или только в тех ресурсах, чей родительский или
шаблонный класс равен 1.
Требования


MODX Revolution 2.2 или выше
PHP5 или выше
Открытый доступ
Версия
1.0.0-rc2
1.0.0-rc1
Дата
9 сентября 2012
23 августа 2012
Автор
ben_omycode
ben_omycode
Продукт
Revolution
Revolution
Загрузка
Загрузить можно из MODx Revolution manager через Package Management, или из MODx Extras
Repository по адресу http://modx.com/extras/package/customurls
Поддержка, комментарии, разработка и отчет об ошибках
Github : https://github.com/benjamin-vauchel/customurls
Поддержка/комментарии: http://forums.modx.com/thread/78843/support-comments-for-customurls
Использование
Чтобы начать работу с пользовательскими URL-адресами, перейдите в Components > Custom URLs и
добавьте правило.
Свойства правил
Название
Структура
Описание
Пример
Сборка пользовательской структуры URL состоит из -[[+alias]]
текста, полей ресурса, ТВ, фрагмента и выходных
фильтров. Так же можно использовать поле для
заполнения cu.parent для получения полного
родительского пути псевдонима.
Поле ограничения Поле ограничения может быть любым: идентификатор, шаблон
родитель, шаблон…
Значение
2
ограничения
Пользовательская Группа пользователей, для которой действует правило Администраторы
группа
URI
Псевдоним создается по умолчанию, но вместо этого false
можно выбрать URI
Коррекция
Ручная коррекция псевдонима или URI при
true
обновлении ресурса
Активный
Является ли правило активным?
true
Примеры структуры:
Простой текст:
1simple-text
Псевдонимы MODx по умолчанию
1[[+alias]]
Инструкции по заполнению:
1-[[+alias]]
ТВ:
1[[+tv.mytv]]-[[+id]]
Фрагменты :
1[[MySnippet? &id=`[[+id]]`]]
Выходные фильтры :
1/-[[+alias]]
URL-адреса MODx по умолчанию:
1/[[+alias]]
Более сложный URL-адрес
1[[+cu.parent_uri]]/some-text/[[getResourceField? &id=``]]/-[[+alias]]
Databackup
Что такое DataBackup?
DataBackup – это сниппет для MODX Revolution, предназначенный для создания резервной копии
базы данных MODX MySQL в виде одного sql-дампа и/или каждой таблицы в качестве резервной
sql-копии, а также других баз данных MySQL. Приложение использует PDO, поэтому можео
создавать и другие базы данных, такие как MSSQL, но пока я не протестировал этот функционал.
История
Дополнение DataBackup было написано Джошем Галледжем (Josh Gulledge), идея создания разработать простой способ сохранения резервных копий данных, впервые выпущено 12 августа
2011 года.
Скачивание
Приложение доступно для загрузки в рамках менеджера MODx Revolution с помощью Package
Management (Управление Пакетами), или с MODx Extras Repository по ссылке:
http://modx.com/extras/package/databackup
Разработка и отчет об ошибках
DataBackup хранится и разрабатывается в GitHub, история доступна по ссылке:
here:https://github.com/jgulledge19/DataBackup
Отчет об ошибках (багах) хранится здесь: https://github.com/jgulledge19/DataBackup/issues
Использование:
1. Установите с помощью пакет-менеджера
2. Задайте настройки databackup.folder на местоположение вне Вашего корня веб-сайта. По
умолчанию: core/components/databackup/dumps/
3. Установите период очистки (databackup.pruge), если хотите другой вариант, то по умолчанию
1814400, что составляет 21 день.
4. Настройте Cron Manager: http://rtfm.modx.com/display/ADDON/CronManager, а затем создайте
новое задание.
5. Определите бэкап-сниппет и выберите в минутах, как часто Вы хотели бы делать копии. Каждые
24 часа – это 1440 минут.
Как использовать сниппет с GetCache
См.: getcache для примеров GetCache.
Это простое резервное копирование вашего сайта каждые 24 часа (при условии посещения страницы)
или чаще, если Вы очистите кэш. Также очистятся резервные копии старше 21 дней.
[[!getCache?
&element=`backup`
&excludeTables=`my_custom_table,my_other_custom_table`
&cacheExpires=`86400`
]]
Настройки системы
Если их нет – они должны быть созданы.
Имя Ключ
Тип поля Пространства Описание Значение по умолчанию
имен
Folder databackup.folder Текстовое databackup Это путь к {core_path}components/databackup/dumps/
поле
папке, в
которой
Pruge databackup.pruge Текстовое databackup
Files
поле
сохранятся
Ваши .sql
файлы. PHP
должен
иметь
разрешение
на доступ в
эту папку.
Очистка
1814400
старых
файлов,
которые
были
созданы
некоторое
время от
настоящего
момента – в
секундах.
По
умолчанию
– 1814400
(21 день)
Доступные свойства
Существует также образец сниппета backupMany. Вы можете изменить этот примерный сниппет для
резервного копирования других баз данных.
Версия 1.1
Имя
Описание
1 database
База данных, которую Вы хотите скопировать.
2 includeTables Разделенный запятыми список таблиц, которые необходимо
включить. Все другие таблицы будут исключены, если этот
параметр не используется.
3 excludeTables Разделенный запятыми список таблиц к исключению. Все другие
таблицы будут включены.
4 writeFile
Boolean. Записывается один большой sql-дамп файл. Варианты:
true/false.
5 writeTableFiles Boolean. Записывается каждая таблица как отдельный sql-дамп
файл Варианты: true/false.
6 commentPrefix Это префикс комментария SQL.
7 commentSuffix Если комментарию для SQL нужен суффикс. По умолчанию
пустой.
8 newLine
Значение для печати новой строки в SQL-файлах
9 useDrop
Boolean true/false, чтобы использовать DROP TABLE в SQLфайлах
10 createDatabase Boolean true/false, чтобы использовать команду CREATE
Значение по
умолчанию
modx
NULL
NULL
true
true
–
\n
true
false
DATABASE в SQL-файлах
DitsNews
Что такое DitsNews?
DitsNews - это компонент для управления информационными письмами с помощью MODX
Revolution.
Свойства:







информационные бюллетени/группы/управление подписчиками
импорт/экспорт подписчиков (CSV) (в 0.2.1)
очередь сообщений (50 сообщений на группу)
подписка через контакт-форму
подтверждение подписки (ссылка в письме на электронную почту)
отписаться по ссылке в информационном бюллетене
публичные/закрытые группы (Вы можете подписаться только на публичные группы)
История:
Разрабатывается Ditsmedia с декабря 2010 года.
Версия
Дата выхода
Разработчики Примечания
0.1.0 альфа 24 декабря 2010 Ditsmedia
Первый выпуск
0.1.0 альфа 2 11 января 2011 Ditsmedia
Исправлены некоторые пункты
0.2.0
Скоро!
Ditsmedia
Новая база исходных текстов
Требования:



MODX Revolution (проверенно версией 2.1.1)
Дополнение FormIt (для контакт-формы)
Cronjobs - команда к операционной системе или серверу для работы, которая должна быть
выполнена в требуемое время (или любой другой метод для периодического выполнения
сценария)
Разработка и отчет об ошибке:
Сейчас DitsNews разрабатывается на Github. Так же туда можно отослать отчет об ошибке и запросы
об особенностях и улучшениях. Так же Вы можете узнать о новостях из отдела разработки.
Github: https://github.com/ditsmedia/DitsNews
Установка:
Версия 0.2.0 полностью не совместима с версией 0.1.0! В ней присутствуют функциональные
изменения, а так же некоторые поправки базы данных. Как обычно, сохраняйтесь перед
обновлением!
В этой версии отсутствует функция импорта/экспорта CSV. Мы восстановим ее в версии 0.2.1.
1. Установите при помощи установочного пакета.
2. Добавьте команду к операционной системе или серверу для работы, которая должна быть
выполнена в требуемое время (измените путь): */5 * * * * /path/to/php
/path/to/core/components/ditsnews/cron/cron.php
3. Создайте шаблон информационного бюллетеня (обычный образец; в нем должен быть CSS
(вложенные таблицы стилей) с указанием полного URL-пути к рисункам. Никаких внешних
CSS!)
4. Создайте страницу подписки (блок «ditsnewssignup»; изменить по мере надобности)
5. Создайте страницу «Благодарность» (установите ее как redirectTo («перенаправить») в блоке
«ditsnewssignup»)
6. Создайте страницу подтверждения/участия (добавьте фрагмент «ditsnewsconfirm») и
установите ее ID в блоке «ditsnewssignup».
7. Создайте страницу отписки (добавьте фрагмент «ditsnewsunsubscribe») и вставьте ссылку на
эту страницу в Вашем шаблоне информационного бюллетеня.
8. Перейдите в Components (Компоненты) -> DitsNews и измените настройки (Меню ->
Настройки).
Использование:
DitsNews состоит из двух составляющих. Первая из них – это серверное приложение, которое
позволяет Вам управлять информационными бюллетенями, подписчиками, группами и настройками.
Вторая часть – это контакт-форма, в которой пользователи могут подписаться на информационные
бюллетени.
!В разработке!
Эта составляющая требует доработки (присваивание имён и технические настройки).
Краткое руководство:
1. Добавьте тестовую группу.
2. Добавьте себя как подписчика (так же добавьте себя в тестовую группу).
3. Создайте новый информационный бюллетень и выберите документ, который Вы хотите
отослать. Отправьте его ТОЛЬКО в тестовую группу!
4. Когда запустится Cronjobs (команда к операционной системе для работы, которая должна
быть выполнена в требуемое время), Вы получите свой информационный бюллетень.
5. Протестируйте свой информационный бюллетень в различных клиентах (Apple Mail, Outlook,
Gmail, и т.д.)
6. Для каждого клиента: проверьте бюллетень в различных браузерах!
Серверное приложение - Настройки:
Вы можете перейти в настройки DitsNews при помощи выпадающего списка меню справа. В нем
доступны следующие базовые настройки:



имя
e-mail
возврат писем - e-mail – адрес
Серверное приложение – Группы:
Чтобы отправить информационный бюллетень, Вам нужна группа, поэтому создайте базовую группу
с общедоступными настройками. Если Вы не хотите, чтобы пользователи могли подписываться с
помощью контакт-формы, создайте группу без открытых настроек.
Серверное приложение – Подписчики:
В этом разделе Вы можете добавлять новых подписчиков вручную или же использовать CSV –
импорт и CSV- экспорт подписчиков. Вы можете добавлять/редактировать некоторые данные
пользователя:






Имя
Фамилия
Организация
Электронный адрес (требуется)
Статус (активен/неактивен)
Подписаться на группы
Серверное приложение – Создание информационного
бюллетеня:
Информационный бюллетень создается полностью при помощи образцов и ресурсов MODX. Итак,
первый шаг – создание ресурса (со всем содержимым Вашего информационного бюллетеня),
основанного на шаблоне Вашего информационного бюллетеня. После создания ресурсов перейдите в
Components (Компоненты) -> DitsNews и нажмите «Новый информационный бюллетень». Теперь
Вам нужно заполнить поле «Тема» (это и будет темой письма) и выбрать нужный документ из
выпадающего списка меню. В нем показываются ресурсы, прописанные для правильного шаблоне
(смотреть Серверное приложение – Настройки).
Доступные «заполнители»:
[[+firstname]]
[[+lastname]]
[[+fullname]]
[[+company]]
[[+email]]
Примеры:
Пример шаблона информационного бюллетеня
[[!ditsnewsPlaceholders? &firstnameDefault=`Subscriber`]]
<!—Устанавливает поле «Имя» электронного информационного бюллетеня для поля
«Подписчик», если не заполенно-->
<html>
<head>
<meta http-equiv="content-type" content="text/html; набор символов=utf-8" />
<title>My newsletter</title>
<base href="
[[++site_url]]
" /><!—Важно! Это нужно для создания правильных URL адресов! -->
<style type="text/css">
a {
плотность шрифта: жирный;
цвет: #ff0000
}
</style>
</head>
<body>
<p>Hello
[[!+firstname:default=`Subscriber`]]
,</p>
[[*content]]
<p><a href="
[[~10]]
">Unsubscribe</a></p><!—Ссылка на страницу отписки: данные пользователя будут добавлены
во время отправки -->
</body>
</html>
В планах:
• В следующих версиях будут добавлены следующие функции:
• Настройки будут перенесены в Системные Настройки MODX
• Очередь сообщений для группы будет настраиваемой (сейчас фиксированная – 50)
• Статистика (просмотры, возвраты и т.д.)
• Обработка возвращенных писем
• Удаление неподтвержденных подписок
• Больше языков (сейчас доступны: Английский и Немецкий; Немецкий доступен в последнем
установочном пакете GitHub)
EventsX
Внимание! Вы используете данную документацию полностью под свою ответственность, так как она
не была проверена автором приложения.
Что такое EventsX?
EventsX – это приложение-календарь для MODx Revolution. EventsX показывает предстоящие (и
прошедшие) события в календаре (jQuery) и/или показывает список предстоящих событий.
Свойства:




Управление событиями (создать/обновить/удалить/(де)активировать)
Для каждого события есть дата начала и окончания (возможна одинаковая дата для
однодневного события)
Календарь jQuery включительно
Языки: 1. Английский 2. Немецкий 3. Русский
Требования:


MODx Revolution (протестировано с 2.1.3pl)
jQuery для календаря (вы можете создать свой календарь на базе JSON)
История:
Приложение EventX было написано Джероном Кентерсом (Jeroen Kenters). Пилотная версия вышла 1
декабря 2011 года.
Загрузка:
Это приложение можно загрузить из MODx Revolution manager или из MODx Extras Repository
(http://modx.com/extras/package/eventsx).
Разработка и отчет об ошибке:
EventX на GitHub: https://github.com/jkenters/EventsX, сообщайте об ошибках или оставляйте запросы
об особенностях по адресу: https://github.com/jkenters/EventsX/issues.
В планах:
Все выпуски и описания EventX есть на GitHub: https://github.com/jkenters/EventsX/issues. Тем не
менее, нашими планами на будущее являются:


Регистрация событий
Исправление ошибок
Установка:
Установите с помощью менеджера установки.
Использование:
Как создать календарь на Вашей странице?
Перейдите в Components >EventsX и создайте события (убедитесь, что они активны)
1. Добавьте jQuery в шаблон вашего вебсайта, если требуется (требуется только на страницах,
где будет использоваться календарь)
2. Copy & add /assets/components/calendar.js (копировать и
добавить/активы/компоненты/календарь ) в шаблон вашего вебсайта (требуется только на
страницах, где будет использоваться календарь)
3. Copy & add /assets/components/jquery.calendar-widget.js (копировать и
добавить/активы/компоненты/jquery.пиктограма календаря.js) в шаблон Вашего вебсайта
(требуется только на страницах, где будет использоваться календарь)
4. Создайте ресурс календаря событий (или добавьте в свой шаблон)
5. Создайте ресурс для списка предстоящих событий (смотреть пример ниже)
6. Ниже создайте ресурс для единичного события (смотреть пример ниже)
7. Создайте контекстные настройки «evxEventsPage» и установите id страницы «предстоящих
событий» как значение
8. Создайте контекстные настройки «evxEventsPage» и установите id страницы «единичное
событие» как значение
9. Не забудьте сохранить контекст и очистить кэш-память (контекстные настройки
кэшированны)
Шаблоны:
Шаблон календаря событий
<html>
<head>
<title>
[[++site_name]] - [[*pagetitle]]
</title>
<base href="
[[++site_url]]
" />
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript" src="assets/components/eventsx/js/web/jquery.calendarwidget.js"></script (сценарий)>
<script type="text/javascript"
src="assets/components/eventsx/js/web/calendar.js"></script (сценарий)>
<link rel="stylesheet" type="text/css"
href="assets/components/eventsx/css/calendar.css" />
</head>
<body>
<a href="" id="prevMonth">previous month (предыдущий месяц) </a> <a href=""
id="nextMonth">next month (следующий месяц) </a>
<div id="calendar"></div>
[[*content]]
</body>
</html>
Шаблон календаря предстоящего события
<html>
<head>
<title>
[[++site_name]] - [[*pagetitle]]
</title>
<base href="
[[++site_url]]
" />
</head>
<body>
[[*content]]
</body>
</html>
Шаблон календаря единичного события
[[!evxEvent?]]
<html>
<head>
<title>
[[++site_name]] - [[*pagetitle]]
</title>
<base href="
[[++site_url]]
" />
</head>
<body>
<p>Name:
[[+event.name]]
</p>
<p>Start date:
[[+event.startdate:strtotime:date=`%d-%m-%Y`]]
</p>
<p>End date:
[[+event.enddate:strtotime:date=`%d-%m-%Y`]]
</p>
[[+description]]
<!-- Description is a TinyMCE field by default, so no <p> here -->
<h2>Location</h2>
<p>
[[+event.location]]<br /> [[+event.street]]<br /> [[+event.pc]]<br />
[[+event.city]]<br /> [[+event.region]]<br /> [[+event.country]]
</p>
<p><a href="
[[+event.website]]
">Visit website</a></p>
</body>
</html>
Примеры
Показывает список предстоящих событий
Перейдите в «Компоненты» - > «EventsX» и создайте события (убедитесь, что они активны)
Создайте блок «предстоящие события»:
<li>
[[+location:htmlentities]]
: <a href="
[[+url]]
" title="
[[+name:htmlentities]]
">
[[+name:htmlentities]]
1</a>
<time datetime="
[[+startdate:strtotime:date=`%Y-%m-%d`]]
" title="event is scheduled on
[[+startdate:strtotime:date=`%d.%m.%Y`]]
">
[[+startdate:strtotime:date=%d.%m.%Y`]]
</time></li>
Создайте вызов фрагмента
Добавьте вызов фрагмента на шаблон или ресурс на котором Вы бы хотели видеть список событий.
1
<h2>next events:</h2>
2<ol id="eventcal">
3[[!EventsX? &tpl=`upcomingEvents` &limit=`10`]]
</ol>
4
Скриншот:
Скриншот может выглядеть вот так:
Учтите, что временной элемент я устанавливал индивидуально.
FileDownload R
FileDownload R – это сниппет, в котором будет отражаться список файлов из каталога пользователя.
Этот сниппет – полная перезапись FileDownload Кайла Джаббера (Kyle Jabber) для MODX Evolution.
Версия для Revolution была создана Goldsky.
Загрузка: http://modx.com/extras/package/filedownloadr
Все ошибки можно указать здесь: https://github.com/goldsky/FileDownload-R/issues
Этот сниппет не показывает реальный путь к ссылке, вместо этого используется хешированная
ссылка.
Самое главное, что Вы можете сохранить файлы/каталоги вне корневого каталога документов, а
сценарий сделает все остальное.
Счетчик загрузки хранится в пользовательской базе данных.
Начиная с версии 1.0.0-pl, этот пакет так же содержит плагин для добавления разработчиком
дополнительных функций для процесса загрузки.
FileDownload
Параметры полностью заимствованы из версии для Evolution с некоторыми изменениями, поэтому
пользователь Evolution с легкостью сможет понять особенности использования.
Основные положения использования
[[!FileDownload?]]
Главное
Имя
Описание
getDir
getFile
userGroups
Сделает
ссылку
активной
для
пользовател
ей,
принадлежа
щих к
указанным
группам.
Множество
групп
можно
указать при
помощи
списка,
Пример
Значени Опц
е по
ии
умолчан
ию
&getDir=`downloads,assets/downloads, assets/files`
пусто стро
ка
&getFile=`assets/files/readme.txt,downloads/readyou.doc,assets/d Пусто стро
ownloads/book1.xlsx`
ка
&userGroups=`Administrator, Registered Member`
Пусто стро
ка
extShown
extHidden
toArray
разделенно
го
запятыми.
Разделенны &extShown=`zip,php,txt`
е запятыми
расширения
файлов для
отображени
я файлов в
данном
расширени
и.
Разделенны &extHidden=`zip,php,txt`
е запятыми
расширения
файлов для
файлов,
котрые
должны
быть
скрытыми.
Это
действие
заменит
значения
extShown
&toArray=`1`
downloadBy Прекратите &downloadByOther=`1`
Other
загрузку
при
помощи
этого
сниппета,
чтобы
выбрать
другой
способ
Пусто
стро
ка
Пусто
стро
ка
0
bool:
0/1
bool:
0/1
0
Загрузка (другим способом)
Доступна с версии 1.0.0-pl.
Примечание
Например:
Вам нужно воспользоваться всплывающим окном javascript, чтобы принудить программу загрузки
заполнить форму перед началом загрузки.
Затем, при помощи AJAX подтвердите форму и примите результаты.
Если результаты верны, AJAX вызывает API загрузки и начинает ее.
Чанк файла
Вам необходимо создать чанк для строки файла.
Например: jsDownload chunk
<tr
[[+fd.class]]
>
<td style="width:16px;"><img src="
[[+fd.image]]
" alt="
[[+fd.image]]
" /></td>
<td>
<a href="javascript:void(0);"
rel="#formLink"
id="
[[+fd.hash]]
"
>
[[+fd.filename]]
</a>
<span style="font-size:80%">(
[[+fd.count]]
downloads)</span>
</td>
<td>
[[+fd.sizeText]]
</td>
<td>
[[+fd.date]]
</td>
</tr>
[[-- This is the description row if the &chkDesc=`chunkName` is provided --]]
[[+fd.description:notempty=`
[[+fd.description]]
`:default=``]]
HTML
#downloaderForm – это базовая HTML форма с полями.
В этом примере я так же использую оверлей и контрольное устройство из jQuerytools (расположены
прямо под вызовом сниппета).
Итак, вызов сниппета будет выглядеть так:
[[!FileDownload?
&getDir=`assets/downloads`
&tplFile=`jsDownload`
&downloadByOther=`1`
]]
<div class="form_overlay" id="formLink">
<h2>Contact Form</h2>
<form action="
[[~[[*id]]]]
" method="post" class="form" id="downloaderForm">
<input type="hidden" name="nospam:blank" value="" />
<input type="hidden" name="link" value="" />
<label for="name">Name:</label>
<input type="text" name="name" id="name" value="" required="required" />
<br />
<label for="email">Email:</label>
<input type="email" name="email" id="email" value="" required="required" />
<br />
<label for="phone">Phone:</label>
<input type="number" name="phone" id="phone" value="" required="required" />
<br />
<label for="country">Country:</label>
<input type="text" name="country" id="country" value="" required="required" />
<br />
<div class="form-buttons">
<button type="submit">Send Contact Inquiry</button>
<button type="reset">Reset</button>
</div>
</form>
</div>
javascript
$(function(){
var c = 'assets/components/yourpackage/c.php?';
createForm();
function createForm() {
$(".fd-file a[rel]").each(function(i) {
var self = $(this);
self.overlay({
effect: 'apple',
onLoad: function() {
var id = self.attr('id');
$("#downloaderForm input[name=link]").val(id);
},
onBeforeClose: function(){
$(".error").hide();
$("#downloaderForm input").each(function(){
$(this).removeClass('invalid');
});
$("#downloaderForm input[name=link]").val('');
clearForm($("#downloaderForm"));
}
});
});
$("#downloaderForm").validator().submit(function(e){
var form = $(this);
if (!e.isDefaultPrevented()) {
$.post(c + 'action=web/form/add&ctx=web&' + form.serialize(),
function(data) {
if (data && data.success === true) {
clearForm(form);
$(".fd-file a[rel]").each(function(i) {
$(this).overlay().close();
});
fileDownload(c + 'action=web/file/get&ctx=web&link=' +
data.link);
$(".fd-file a[rel]").each(function(i) {
var self = $(this);
self.off();
var link = self.attr('id');
self.attr('onclick', 'fileDownload("' + c +
'action=web/file/get&ctx=web&link=' + link+'")');
});
} else {
form.data("validator").invalidate(data);
}
}, "json");
e.preventDefault();
}
});
}
function clearForm(form) {
form.find(':input').each(function() {
switch(this.type) {
case 'password':
case 'select-multiple':
case 'select-one':
case 'text':
case 'email':
case 'number':
case 'textarea':
$(this).val('');
break;
case 'checkbox':
case 'radio':
this.checked = false;
}
});
}
});
function fileDownload(link) {
$('<iframe/>',{
src: link
}).hide().appendTo($('body'));
}
Соединитель
А соединитель будет выглядеть так:
Невозможно найти форматер исходного кода для языка: php. Доступные языки: actionscript,
html, java, javascript, none, sql, xhtml, xml
<?php
/**
* FileDownload R's AJAX connector file
*/
$validActions = array(
'web/file/get',
'web/form/add'
);
if (!empty($_REQUEST['action']) && in_array($_REQUEST['action'], $validActions)) {
@session_cache_limiter('public');
define('MODX_REQP', false);
}
require_once dirname(dirname(dirname(dirname(__FILE__)))) . '/config.core.php';
require_once MODX_CORE_PATH . 'config/' . MODX_CONFIG_KEY . '.inc.php';
require_once MODX_CONNECTORS_PATH . 'index.php';
$corePath = $modx->getOption('filedownload.core_path', null, $modx>getOption('core_path') . 'components/filedownload/');
require_once $corePath . 'models/filedownload/filedownload.class.php';
$modx->filedownload = new FileDownload($modx);
$modx->lexicon->load('filedownload:default');
if (in_array($_REQUEST['action'], $validActions)) {
$version = $modx->getVersionData();
if (version_compare($version['full_version'], '2.1.1-pl') >= 0) {
if ($modx->user->hasSessionContext($modx->context->get('key'))) {
$_SERVER['HTTP_MODAUTH'] = $_SESSION["modx.{$modx->context>get('key')}.user.token"];
} else {
$_SESSION["modx.{$modx->context->get('key')}.user.token"] = 0;
$_SERVER['HTTP_MODAUTH'] = 0;
}
} else {
$_SERVER['HTTP_MODAUTH'] = $modx->site_id;
}
$_REQUEST['HTTP_MODAUTH'] = $_SERVER['HTTP_MODAUTH'];
}
/* handle request */
$path = $modx->getOption('core_path') . 'components/yourpackage/processors/';
$modx->request->handleRequest(array(
'processors_path' => $path,
'location' => '',
));
Процессор
core/components/yourpackage/processors/web/file/get/
Невозможно найти форматер исходного кода для языка: php. Доступные языки: actionscript,
html, java, javascript, none, sql, xhtml, xml
<?php
if (!$modx->loadClass('FileDownload', $modx->getOption('core_path') .
'components/filedownload/models/', true, true)) {
$modx->log(modX::LOG_LEVEL_ERROR, '[FileDownload] Could not load FileDownload
class.');
return '';
}
$fdl = $modx->getService('fdl'
, 'FileDownload'
, $modx->getOption('core_path') .
'components/filedownload/models/filedownload/'
);
$configs = array();
$configs['countDownloads'] = true;
$fdl->setConfigs($configs);
$downloadFile = $fdl->downloadFile($scriptProperties['link']);
YOU DOWNLOAD THE FILE
if (!$downloadFile) {
$output = array('success' => FALSE);
} else {
$output = array('success' => TRUE);
}
return json_encode($output);
// <== THIS IS WHERE
Соль для хеша
Имя
Описание
Значение по
умолчанию
saltText Этот текст будет добавлен к хешированной ссылке файла, чтобы FileDownload
скрыть прямой путь.
Опции
строка
Ссылка – это хешированный текст текста соли, контекста и имени файла. Поэтому если через
некоторое время Вы измените значение saltText, это действие не заблокирует появление контекста на
странице, но база данных начнет отсчет с нуля, так как не будет найдено начальное хешированное
значение.
Дополнительно
Имя
noDownload
Описание
Пример
Значение по умолчанию
Показывает &noDownload=`1`
0
список файлов
без ссылок
загрузки.
Примечание:
отличается от
версии
Evolution.
browseDirector Позволяет
&browseDirectories=`1` 0
ies
пользователю
просматриват
ь подкаталоги
указанного
каталога с
параметрами
Опции
bool: 0/1
bool:0/1
&getDir
Позволяет
&chkDesc=`fileDesc`
fileDescription
Имя
добавлять
чанка
описания к
(описание файла)
списку
файлов,
включенных в
чанк.
dateFormat
Форматирован &dateFormat=`m/d/Y` Y-m-d
строка
ие PHP
данных для
списка
countDownloa Трекинг
&countDownloads=`1` 0
bool: 0/1
ds
загрузки
imgTypes
Имя чанка для &imgTypes=`fdImages` fdImages
Имя
определения
чанка
взаимосвязи
расширения
файла и
картинки
imgLocat
Путь к
&imgLocat=`assets/filety assets/components/filedownload/img/fi Доступн
картинке для pes`
letype
ый путь
установления
связи с
каждым из
расширений
файлов.
chkDesc
Сортировка
Имя
Описание
Упорядочение сортировки. Опции:
имя
файла|расширение|размер|размер
текста|тип|дата|описание|единица
счёта
sortByCaseSensitive Чувствительная к регистру опция
для сортировки
sortOrder
Сортировка файлов в восходящем
или нисходящем порядке
sortOrderNatural
Сортировка файлов в естественном
порядке
groupByDirectory Если в параметрах getDir указаны
множественные каталоги, эта опция
сгруппируют файлы для каждого
каталога
sortBy
Пример
&sortBy=`path`
Значение Опции
по
умолчанию
Filename
строка
(имя
файла)
&sortByCaseSensitive=`1` 0
&sortOrder=`desc`
asc
&sortOrderNatural=`1`
1
&groupByDirectory=`1`
0
bool:
0/1
asc/desc
bool:
0/1
bool:
0/1
Множественное упорядочение сортировки используется при следующих сортировках:
Сортировка файлов: имя файла
Каталоги загрузки: направление, имя файла
Группировка по каталогу: путь, направление, имя файла
Пример
[[!FileDownload?
&getDir=`[[++core_path]]downloads-from-core/land rover, assets/downloads`
&browseDirectories=`1`
&groupByDirectory=`1`
]]
Шаблон
Имя
tplDir
Описание Пример
Шаблон
&tplDir=`tpl-dir`
строки
катаога
Значение по умолчанию
tpl-dir
Опции
chunk's
name/
@Bindi
tplFile
Шаблон
строки
файла
&tplFile=`tpl-file`
tpl-file
tplGroup Так
&tplGroupDir=`tpl- tpl-group-dirchunk's name
Dir
выглядит group`
шаблон
пути
каталга,
если
&groupBy
Directory
(группиров
ка по
каталогу)
включена
tplWrap Это
&tplWrapper=`tplWr tpl-wrapper
per
шаблон
apper`
контейнера
для всех
результато
в сниппета
tplWrap Это
&tplWrapperDir=`tpl
perDir шаблон
WrapperDir`
контейнера
для папок
(дополните
льно)
tplWrap Это
&tplWrapperFile=`tp
perFile шаблон
lWrapperFile`
контейнера
для файлов
(дополните
льно)
tplIndex Сгенериро &tplIndex=`tplванный
index`
индекс.
Html-файл,
чтобы
tpl-index
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
чанка/
@прив
язки)
chunk's
name/
@Bindi
ngs
(Имя
скрыть
доступ к
каталогу от
прямого
доступа по
сети
tplNotAl Шаблон
&tplNotAllowed=`tp
lowed для
l-notAllowed`
запрещенн
ого
доступа.
Может
быть
использова
н
чанка/
@прив
язки)
@FILE:
chunk's
/home/v/vincitci/modx.cc/public_html/core/components name/
/filedownload/elements/chunks/tpl@Bindi
notallowed.chunk.tpl
ngs
(Имя
чанка/
@прив
язки)
Вход Имя
пользовател
я
Пароль
tplWrapperDir и tplWrapperFile (1.0.0-rc.5) – различные упаковщики для папок и файлов. В них могут
быть различные заголовки. В упаковщиках установлены чанки по умолчанию
{core_path}components/filedownload/elements/chunks/, где tpl-wrapper-dir.chunk.tpl и tplwrapperfile.chunk.tpl, соответственно.
Чтобы использовать эти упаковщики, tplWrapperтак же должен быть изменен.
FileDownload R имеет директиву @BINDING для шаблна:



@CODE|@INLINE
@FILE
@CHUNK (или отсутсвует) – по умолчанию
<tr[[+fd.class]]>
[ [!FileDownload?
&getDir=`assets/downloads`
&tplFile=`@CODE:
<tr[[+fd.class]]>
<td>
<span class="fd-icon">
<img src="[[+fd.image]]" alt="" />
</span>
<a href="[[+fd.url]]">[[+fd.filename]]</a>
<span style="font-size:80%">([[+fd.count]] downloads)</span>
</td>
<td>[[+fd.sizeText]]</td>
<td>[[+fd.date]]</td>
</tr>`
]]
<:ZyX>PHN0cm9uZz7Qn9GA0LjQvNC10YA8L3N0cm9uZz4=<:ZyX/
>
[[!FileDownload?
&getDir=`assets/downloads`
&browseDirectories=`1`
&tplWrapper=``
&tplWrapperDir=`tpl-wrapper-dir`
&tplWrapperFile=`tpl-wrapper-file`
]]
Заголовки
Имя Описание
Значение по умолчанию
Опции
fileCss Каскадный стиль заголовка
assets/components/filedownload/css/fd.css web path (каналы
страницы
службы web)
fileJs Javascript файл для заголовка assets/components/filedownload/js/fd.js web path (каналы
страницы
службы web)
Стили
Имя
Описание
Пример
Значение
по
умолчанию
fd-altRow Имя CSS
класса
Указывает класс, который будет применен
к каждому файлу/каталогу, чтобы
применить стиль к
cssDir
Имя класса для всех каталогов
fd-dir
cssExtension
Если установить это значение на «1», то
&cssExtension=`1` 0
класс будет применяться к каждому файлу,
согласно его расширению
cssExtensionPrefix Перфикс для имени класса
fdcssExtensionSuffix Суффикс для имени класса
null
cssFile
Имя класса для всех файлов
&cssFile=`files` fd-file
cssAltRow
Опции
bool: 0/1
строка
строка
Имя
класса
cssFirstDir
Имя класса для первого каталога
cssFirstFile
Имя класса для первого файла
cssGroupDir
cssLastDir
Имя класса каталога для мультикаталоговой группировки
Имя класса для последнего каталога
cssLastFile
Имя класса для последнего файла
cssPath
Указывает имя класса, который будет
применен к пути во время использования
каталога загрузки
Имя CSS
класса
fd-firstFile Имя CSS
класса
fd-group-dir Имя CSS
класса
fd-lastDir Имя CSS
класса
fd-lastFile Имя CSS
класса
fd-path
Имя CSS
класса
fd-firstDir
FileDownloadLink
FileDownloadLink – это сниппет для единичного доступного для скачивания файла.
Он обеспечивает ссылку на файл прямого доступа.
Но в этом случае FileDownloadLink скрывает реальный путь файла хешированной ссылкой,
отслеживает операции во время загрузки.
Основные положения использования:
[[!FileDownloadLink?]]
Главное
Имя
Описание
Пример
Значение по Опции
умолчанию
&getFile=`assets/files/readme.txt` пусто
строка
Можно указать только один
путь файла для этого параметра
userGroups Сделает ссылку для скачивания &userGroups=`Administrator,
активной только для
Registered Member`
пользователей, принадлежащих
к указанным группам.
Множество групп можно
указать списком, разделенным
запятыми.
toArray
Возвращает результаты
&toArray=`1`
предыдущего массива.
getFile
пусто
строка
0
bool:
0/1
Соль для хеша
Имя
Описание
Значение по
умолчанию
saltText Этот текст будет добавлен к хешированной ссылке файла, чтобы FileDownload
скрыть прямой путь.
Опции
строка
Ссылка – это хешированный текст текста соли, контекста и имени файла. Поэтому если через
некоторое время Вы измените значение saltText, это действие не заблокирует появление контекста на
странице, но база данных начнет отсчет с нуля, так как не будет найдено начальное хешированное
значение.
Дополнительно
Имя
Описание
Пример
noDownload Показывает
&noDownload=`1`
список файлов
без ссылок
загрузки.
Примечание:
отличается от
версии
Evolution.
chkDesc
Позволяет
&chkDesc=`fileDesc`
добавлять
описания к
списку
файлов,
включенных в
чанк.
dateFormat
Форматирован &dateFormat=`m/d/Y`
ие PHP
данных для
списка
countDownloa Трекинг
&countDownloads=`1`
ds
загрузки
imgTypes
Имя чанка для &imgTypes=`fdImages`
определения
взаимосвязи
расширения
файла и
картинки
imgLocat
Путь к
&imgLocat=`assets/filety
картинке для pes`
установления
Значение по умолчанию
0
Опции
bool: 0/1
fileDescription
Имя
чанка
Y-m-d
строка
0
bool: 0/1
fdImages
Имя
чанка
assets/components/filedownload/img/fi Доступн
letype
ый путь
связи с
каждым из
расширений
файлов.
Шаблон
Шаблон для этого сниппета – это обычная гипер-ссылка с подстановщиками FileDownloadLink. Это
не чанк и не шаблон файла.
Если Вы хотите просмотреть доступные подстановщики, просто запустите параметр &toArray=`1`.
Имя Описание Пример
tplCode Шабон
&tplCode=`<a
файла
href="[[+link]]">[[+filename]]</a>`
Значение по умолчанию
Опции
<a
HTML
href="[[+link]]">[[+filename]]</a> код
Заголовки
Имя Описание
Значение по умолчанию
Опции
fileCss Каскадный стиль заголовка
assets/components/filedownload/css/fd.css web path (каналы
страницы
службы web)
fileJs Javascript файл для заголовка assets/components/filedownload/js/fd.js web path (каналы
страницы
службы web)
Пример
[[!FileDownloadLink?
&getFile=`
[[++core_path]]
downloads/Document1.doc`
&tplCode=`
<a href="
[[+link]]
" title="
[[+filename]]
">
<span class="gradient curve-four" style="display: block; text-align: center;">
<img src="
[[+image]]
" alt="" />Download this Document1.doc<hr />
[[+date]]
<br />(
[[+count]]
downloads)
</span>
</a>`
&dateFormat=`d-m-Y`
&toArray=`0`
]]
Плагины
События
Так как это небольшой сценарий, в нем довольно мало событий. Но все же иногда некоторые из них
бываю очень полезны:

OnLoad
Как только загружается сценарий, триггер этого события вызывает все плагины, между которыми
нужно установить зависимость

BeforeDirOpen
Перед сканированием/открытием папки

AfterDirOpen
После сканирования/открытия папки

BeforeFileDownload
Перед загрузкой файла

AfterFileDownload
После загрузки файла
Полное руководство, включая доступные свойства и ожидаемые результаты, описаны в файле
core/components/filedownload/plugins/filedownloadplugin.events.php
Невозможно найти форматер исходного кода для языка: php. Доступные языки: actionscript, html,
java, javascript, none, sql, xhtml, xml
<!--?php
= array(
'OnLoad' =--> array(
'properties' => array(),
'returnType' => array(
NULL
)
),
'BeforeDirOpen' => array(
'properties' => array(
'dirPath'
),
'returnType' => array(
NULL,
FALSE,
'continue'
)
),
'AfterDirOpen' => array(
'properties' => array(
'dirPath',
'contents'
),
'returnType' => array(
NULL,
FALSE,
'continue'
)
),
'BeforeFileDownload' => array(
'properties' => array(
'hash',
'ctx',
'filePath',
'count'
),
'returnType' => array(
NULL,
FALSE
)
),
'AfterFileDownload' => array(
'properties' => array(
'hash',
'ctx',
'filePath',
'count'
),
'returnType' => array(
NULL
)
),
);
return $events;
Свойства
&plugins
Для запуска плагина Вам нужно запустить его внутри сниппета в формате JSON:
[ [!FileDownload? &getDir=`assets/files`
&plugins=`[{"name":"[[++core_path]]components/filedownload/plugins/formit.formsave.plug
in.php","event":"OnLoad","strict":true},{"name":"[[++core_path]]components/filedownload
/plugins/formit.formsave.plugin.php","event":"AfterFileDownload"},{"name":"FileDownload
EmailPlugin","event":"AfterFileDownload"}]` &emailProps=`{
"emailTpl":"FileDownloadEmailChunk", "emailSubject":"New Downloader",
"emailTo":"your@email.com", "emailCC":"your@other.email.com",
"emailBCC":"your@secret.email.com", "emailBCCName":"secret" }` ] ]
В этом примере я использую 2 плагина по умолчанию - FormSave и Email (как сниппет), которые оба
зависят от дополнения FormIt.
Эти плагины выполнят следующие действия:
OnLoad
Проверяет, доступны ли FormSave и Formit. Если они не доступны, останавливает операцию.
AfterFileDownload
После загрузки файла сохраняет информацию в FormSave и отсылает письмо с предоставленным
чанком на заданный адрес.
Свойства письма используют свойства Formit, так как оно привязано к нему.
Структура JSON:
Имя
Имя сниппета или пути файла для плагина
Событие
Имя события, к которому нужно применить действие
Строгость (дополнительно)
Булевский тип (Верно/Неверно) устанавливает плагины в строгий режим – если результат
НЕВЕРНО, сценарий останавливает процесс. Подобная остановка процесса доступна только в
некоторых событиях, поэтому, пожалуйста, прочтите о триггерах событий выше.
Множественные плагины и события нужно запускать неоднократно, так как у них различные статусы
строгости.
APIs
Список APIs, которые можно использовать внутри сценария плагина:
Имя
Метод
Описание
$modx
all modx's methods Например, MODX по умолчанию
$fileDownload getConfig($key) Для просмотра свойств сценария (&emailProps)
$plugin
getConfigs()
getProperties()
Показывает пользовательские свойства плагина
Показывает все триггеры события
getAllEvents()
getAppliedEvents()
Показывает события, примененные к указанному плагину во время
выполнения процесса
Теперь можете использовать всю свою фантазию, чтобы добавить новые свойства этому сниппету.
FileLister
Что такое FileLister?
FileLister – это динамичное приложение для построения списка файлов в MODx Revolution. Оно
позволяет создавать списки файлов как внутри директории, так и безопасно загружать их через
подкаталоги.
Требования


MODx Revolution 2.0.0-rc-2 или более поздняя версия
PHP5 или более поздняя версия
История и информация
Приложение FileLister было написано Шоном МакКормиком (Shaun McCormick) как динамичный
компонент для построения списков файлов. Впервые вышло 30 июня 2010 года.
С дальнейшими планами по разработке приложения можно ознакомиться здесь roadmap here.
Загрузка
Приложение можно загрузить через установочный пакет MODx Revolution или из базы приложений
MODx (MODx Extras Repository). Доступно здесь: http://modxcms.com/extras/package/694.
Разработка и отчет об ошибке
FileLister хранится и разрабатывается на GitHub. Его можно найти здесь:
http://github.com/splittingred/FileLister.
Использование
Запустите приложение при помощи тега сниппета и укажите путь.
Сниппеты
В приложении есть один сниппет:

FileLister
Настройки системы
Имя
Описание
filelister.salt Соль для навигации
Примеры
Создает список файлов и каталогов для ресурсов/загрузок
[[!FileLister? &path=`assets/downloads/`]]
Создает список файлов только в директории «ресурсы/pdfs» ('assets/pdfs')
[[!FileLister? &path=`assets/pdfs/`]]
Создает список файлов и подкаталогов в '/docs/marketing', но не разрешает просмотр и загрузку для
пользователей, не зарегистрированных в группах 'Marketing' («Маркетинг») или 'CEO' («Главный
Исполнительный Директор»).
[[!FileLister? &path=`/docs/marketing/` &allowDownloadGroups=`Marketing,CEO`]]
Сокращает списки файлов в 'assets/pdfs' до файлов в формате PDF
[[!FileLister? &path=`assets/pdfs/` &hideDirectories=`1` &showExt=`pdf`]]
Шаблон ресурса контента
Это шаблон HTML, который Вам нужно поместить в «Ресурсы», чтобы вывести нужный контент.
Для “toPlaceholder” (Подстановщик) нужно установить значение 'files' и сделать FileLister сниппет
некэшированным перед использованием HTML.
Files
<p>Current Path: <span><table>
<thead>
<tr>
<th>Name</th>
<th>Filesize</th>
<th>Last Modified</th>
</tr>
</thead>
<tfoot>
<tr>
<th colspan="3">
Files:
| Directories:
[[+filelister.total.directories]]
</th>
</tr>
<tbody>
[[+files]]
</tbody>
</table>
Сниппет FileLister
Этот сниппет показывает список файлов и/или каталогов внутри указанного пути.
Использование
Разместите этот сниппет в любом месте и укажите его в пути:
[[FileLister? &path=`assets/downloads/`]]
Свойства
Имя
path
fileTpl
directoryTpl
fileLinkTpl
dateFormat
outputSeparator
skipDirs
placeholderPrefix
pathSeparator
pathTpl
Описание
Путь, с которого нужно начинать просмотр
Чанк для каждого из списка файлов
Чанк для каждого из списка каталогов
Чанк для ссылок для каждого из списков
Формат представления дат (PHP) для последнего
измененного поля
Разделитель, который добавляется к каждому из списков
Разделенный запятыми список каталогов, которые всегда
нужно пропускать
Префикс, который добавляется ко всем глобальным
подстановщикам, установленным сниппетом
Разделитель между сгенерированными пунктами в
подстановщике пути
Чанк для каждого из пунктов + подстановщик пути
Значение по
умолчанию
feoFile
feoDirectory
feoFileLink
%b %d, %Y
\n
.svn, .git,
.metadata, .tmp,
.DS_Store,
_notes
filelister
/
feoPathLink
В случае ошибки скрывает файлы для построения списка
В случае ошибки скрывает каталоги для построения списка
Разделенный запятыми список расширений для ограничения
вывода файлов с указанным расширением. Если оставить
пустым, будут показаны все файлы. Если указаны некоторые
расширения, будут показаны только файлы с этими
расширениями
sortBy
Параметр (метрика) для сортировки файлов
sortDir
Направление для сортировки файлов
allowDownload
В случае ошибки запрещает просмотр и загрузку файлов
requireAuthDownload Если значение верное, предложит пользователю
зарегистрироваться для просмотра и загрузки файлов
allowDownloadGroups Разделенный запятыми список, который, если указан,
ограничит просмотр/загрузку файлов для пользователей в
указанных группах
toPlaceholder
Если заданно значение, установит вывод данных в
подстановщик с указанным именем, вместо прямого вывода
navKey
Клавиша управления, используемая перед просмотром
homePathName
Если Вы хотите указать имя корневого каталога перед
просмотром, сделайте это здесь
limit
По желанию. Ограничивает количество отображаемых
записей. При значении «0» отображает все записи
cls
CSS класс для неперемежающихся рядов
altCls
CSS класс для перемежающихся рядов
firstCls
CSS класс для первого ряда
lastCls
CSS класс для последнего ряда
useGeolocation
Если значение верное, для загрузки будет использован
геолокационный сервис ipinfodb. В настройках Вашего API
должно быть: filelister.ipinfodb_api_key
showFiles
showDirectories
showExt
Чанки FileLister
В FileLister обрабатываются 4 чанка. Их соответствующие параметры таковы:




fileTpl – чанк для каждого файла в списке
directoryTpl – чанк для каждого файла в списке
fileLinkTpl – чанк для каждой ссылки, созданной для каждого пункта
pathTpl – чанк для каждого пункта в подстановщике пути
Примеры
Показывает только файлы с путем 'assets/downloads/'
[[!FileLister? &path=`assets/downloads` &showDirectories=`0`]]
<br /><br /><br />
1
1
filename
ASC
1
0
fd
0
feo-row
feo-alt-row
feo-first-row
feo-last-row
1
Чанк FileLister «directoryTpl»
Этот чанк отображается в свойствах &directoryTpl на сниппете FileLister. Используется для
каталогов из списка.
Значение по умолчанию
<tr class="[[+cls]]">
<td colspan="3" class="feo-dirname">[[+link]]</td>
</tr>
Доступные подстановщики
Имя
Link (ссылка)
Filename (имя файла)
Path (путь)
relativePath (относительный путь)
navKey (клавиша управления)
Описание
Ссылка для просмотра каталога
Базовое имя каталога
Абсолютный путь к каталогу
Относительный путь к свойствам «пути»,
введенные в сниппет FileLister
Клавиша управления для генерирования
ссылки
Чанк FileLister «fileLinkTpl»
Этот чанк отображается в свойствах &fileLinkTpl на сниппете FileLister. Используется для ссылок
для всех результатов.
Значение по умолчанию
<a href="
[[+url]]
">
[[+filename]]
</a><br /><br /><br />
Доступные подстановщики
Имя
Описание
url
Сгенерированный для просмотра url
Filename (имя файла) Базовое имя файла или каталога
Чанк FileLister «fileTpl»
Этот чанк отображается в свойствах &fileTpl на сниппете FileLister
Значение по умолчанию
<tr class="
[[+cls]]
">
<td class="feo-filename">
[[+link]]
</td>
<td class="feo-filesize">
[[+filesize]]
</td>
<td class="feo-lastmod">
[[+lastmod:date=`[[+dateFormat]]`]]
</td>
</tr>
Доступные подстановщики
Имя
Описание
Link (ссылка)
Ссылка для просмотра или загрузки файла
Filename (имя файла)
Базовое имя файла
Filesize (размер файла)
Форматированный размер файла
Bytesize (размер файла в байтах) Размер файла в байтах
Extension (расширение)
Расширение файла
Lastmod (последнее
Дата последнего редактирования файла в формате
редактирование)
временной метки
dateFormat (формат отображения Формат отображения даты, введенный в сниппет FileLister
даты)
Path (путь)
Абсолютный путь к файлу
relativePath (относительный путь) Относительный путь к свойствам «пути», введенные в
сниппет FileLister
navKey (клавиша управления)
Клавиша управления для генерирования ссылки
Чанк FileLister «pathTpl»<br /><br /><br />
Этот чанк отображается в свойствах &pathTpl на сниппете FileLister
Значение по умолчанию
<a href="
[[~[[*id]]]]?[[+navKey]]
=
[[+key]]
">
[[+dir]]
</a>
[[+separator]]
Доступные подстановщики
Имя
Описание
Dir (каталог)
Имя каталога
Key (ключ)
Сгенерированный кешированный ключ для навигации
navKey (клавиша управления) Клавиша управления для генерирования ссылки
Separator (разделитель)
Разделитель, введенный между каталогами
FirstChildRedirect
(первая дочерняя переадресация)
FirstChildRedirect – это сниппет, который перенаправит указанный ресурс к первому дочернему
ресурсу. Он подходит как для версии Revolution, так и для Evolution. В версии Revolution настройка
происходит легче.
Установка и ошибки
FirstChildRedirect можно загрузить при помощи менеджера задач MODx Revolution или установить
вручную, загрузив пакет с сайта MODX Extras. После этого нужно загрузить его в core/packages
(оперативная память/пакеты) путем добавления нового пакета через менеджер задач.
FirstChildRedirect так же доступен для версии MODX Evolution, однако в ней не поддерживаются
дополнительные параметры, описанные ниже.
Использование сниппета
Он довольно прост в использовании. Просто вызовите некэшированный сниппет в контенте или
шаблоне ресурса-контейнера, который Вы хотите переадресовать к его первому дочернему
документу.
1[[!FirstChildRedirect]]
Или же, Вы можете указать один или более параметров для вызова сниппета, которые будут влиять
на процесс переадресации.
Параметр
&docid
&default
&sortBy
&sortDir
Evo/Revo
Детали
Да/Да
Присвоение ID документа как ID другого ресурса
заставит сниппет использовать этот ресурс как
контейнер, к которому нужно обращаться для первого
дочернего документа.
Нет*/Да Ресурс для переадресации, если не найден дочерний
ресурс. Это может быть либо ID ресурса, либо одна из
следующих настроек: site_start, site_unavailable_page,
error_page or unauthorized_page. * В версии Evolution,
так же, настройка по умолчанию - site_start. При
необходимости, ее можно изменить в действительном
коде сниппета. Просто найдите: $modx>config['site_start'] и замените на ID или одну из
упомянутых настроек.
Нет/Да Любое имя поля действительного ресурса для
сортировки найденных дочерних документов.
Нет/Да
&responseCode Нет/Да
По умолчанию
current resource ID (ie
475 – идентификатор
текущего ресурса (ie
475
site_start setting
menuindex setting –
настройка индекса
меню
'desc' – нисходящий (переадресовывает к наивысшему "asc"
индексу меню или полю &sortBy); 'asc' – восходящий
(переадресовывает к наименьшему индексу меню или
полю &sortBy).
Код отклика (код состояния) для отправки
301
переадресации. По умолчанию установлен 301
Редирект - "HTTP/1.1 301 Moved Permanently"
(HTTP/1.1 301 Перемещено перманентно), но так же
содержит ярлыки 302 Редирект (временное
перемещение) – Вы так же можете указать полный код
отклика (включая HTTP и имя) для других. Добавлено
в версии 2.3.1.
ForcedPasswdChange
(принудительная смена пароля)
Что такое ForcedPasswdChange?
При помощи приложения ForcedPasswdChange Вы можете создать или обновить пользователя и
активировать принудительную смену его пароля в Администраторе. После отметьте эту опцию
галочкой, и пользователь сможет войти в систему, но не сможет ничего сделать до тех пор, пока
успешно не сменит свой пароль.
Требования


MODx Revolution 2.0.0-RC-2 или более поздняя версия
PHP5 или более поздняя версия
История
ForcedPasswdChange написан Бертом Оостом (Bert Oost) (www.oostdesign.nl) – компонент, который
позволяет пользователям сменить свой пароль перед тем, как он начнет выполнять какие-либо
действия в системе. Впервые приложение вышло 4 декабря 2011 года.
Разработка и отчет об ошибке
ForcedPasswdChange хранится и разрабатывается на GitHub. Его можно найти здесь:
https://github.com/bertoost/MODX-ForcedPasswdChange
Об ошибках можно сообщать сюда: https://github.com/bertoost/MODX-ForcedPasswdChange/issues
Как использовать ?
Просто установите приложение и редактируйте пользователя (не себя!), найдите клетку для отметки
галочкой под полем «Новый пароль». Отметьте галочкой и войдите как
отредактированный/созданный пользователь.
Скоро будут доступны скриншоты.
FormIt
Что такое FormIt?
FormIt – это сниппет динамической обработки формы для MODx Revolution. Он обрабатывает форму
после подтверждения, валидирует действия и дает на них отклик, например отправляет email-а. Он
не генерирует форму, но он может повторно заполнить ее, если она не прошла валидацию.
История
FormIt написал Шоном Маккормиком (Shaun McCormick) как форму обработки Extra, первый
официальный релиз состоялся 19 октября 2009 года.
Скачать
Загрузить FormIt можно в рамках менеджера MODx Revolution с помощью Package Management, или
с MODx Extras Repository, по ссылке: http://modx.com/extras/package/formit
Разработка и отчет об ошибках
FormIt хранится и разрабатываеся в GitHub, история доступна по ссылке:
http://github.com/splittingred/FormIt
Сообщения об ошибках и баги можно просмотреть по ссылке:
http://bugs.modx.com/projects/FormIt/issues
API-документация доступна здесь: http://api.modx.com/formit/
Рекомендации по использованию
Просто поместите запрос сниппета FormIt в ресурс, содержащий форму, которую Вы хотите
использовать. В отличие от аналоговых предшественников (прежде всего eForm в MODx Evolution),
не нужно помещать форму в чанк и ссылаться на чанк в запросе сниппета FormIt: Вы в буквальном
смысле вставляете запрос сниппета вместе с формой, которую требуется обработать. Укажите в
запросе сниппета «hooks»(или пост валидационные скрипты обработки). Затем добавьте проверку
(валидацию) с помощью параметров &validate и &customValidators в тег сниппета.
Если у Вас на странице несколько форм, вставьте свойство &submitVar в запрос сниппета имени
элемента формы внутри нее (то есть, &submitVar=`form1-submit`). Эта постановка для FormIt
означает обработку запросов форм с POST-переменной.
Доступные свойства
Ниже перечислены общие доступные свойства для запроса FormIt (не включая хук-специфических
свойств):
Имя
1 hooks
Описание
Значение по умолчанию
Какие скрипты выполнять, если таковые
имеются, после того, как форма проходит
проверку. Это может быть разделенный
запятыми список крючков, и если проверка не
пройдена, обработка не происходит. Крючком
может быть также имя сниппета, которое
будет выполнять этот сниппет.
2 preHooks
Какие скрипты выполнять, если таковые
имеются, пока форма загружается. Это может
быть разделенный запятыми список хуков
(hooks), и если проверка не пройдена,
3 submitVar
4 validate
5 validationErrorMessage
6 validationErrorBulkTpl
7 errTpl
обработка не происходит. Хуком может быть
также имя сниппета, которое будет выполнять
этот сниппет.
Если задано, обработка формы не начнется,
если POST-переменная не пройдена. Обратите
внимание: требуется, если Вы используете
&store property (+ задано submit var in
input="submit"!).
Разделенный запятыми список полей для
проверки, где каждое имя поля имеет вид
name:validator (например,
username:required,email:required). Валидаторы
также могут быть сцеплены, как
email:email:required. Это свойство может
присваиваться нескольким строкам.
Общее сообщение об ошибке, устанавливается
в плейсхолдер, если валидация не пройдена.
Может содержать , если Вы хотите отобразить
список всех ошибок в верхней части.
HTML tpl, который используется для каждой
отдельной ошибки в общем значении
валидации общего сообщения об ошибке.
HTML враппер ( wrapper) для сообщений об
ошибках. Примечание: не чанк, а только
HTML.
Разделенный запятыми список настраиваемых
имен валидатора (сниппетов), которые Вы
планируете использовать в этой форме. Они
должны быть четко сформулированы здесь,
или они не будут работать.
9 clearFieldsOnSuccess
Если true, очищает поля по успешному
подтверджению форм без редиректа.
10 store
Если true, будет хранить данные в кэше для
выборочного использования сниппетом
FormItRetriever.
11 storeTime
Если для 'store' установлено true, определяет
количество секунд для сохранения данных из
подачи формы. По умолчанию пять минут.
12 placeholderPrefix
Префикс, используемый для всех
плейсхолдеров, установленных FormIt для
полей.
13 successMessage
Если не используется крючок редиректа,
отображается сообщение об успехе после
успешной подачи.
14 successMessagePlaceholder Имя плейсхолдера, куда помещается
сообщение об успешном выполнении.
15 redirectTo
ID страницы "Thank You", куда посетитель
может быть отправлен после успешного
подтверждения подачи формы, но этот
параметр показывается, только если Вы
включите "redirect" в list of &hooks.
<p class="error">A form
validation error occurred.
Please check the values
you have entered.</p>
<li></li>
<span
class="error"></span>
8 customValidators
1
0
300
fi.
fi.successMessage
Проверка
Проверка (валидация) в FormIt осуществляется через свойство &validate, и может использоваться
для автоматического проведения проверки по любому из полей в форме.
Для получения дополнительной информации о проверке в FormIt, посетите страницу Validators.
Хуки
Хуки (Hooks) – это, по существу, скрипты, которые выполняются во время обработки FormIt. Хуки
могут соединяться: сначала выполняется первый хук, если он пройден удачно, задействуется
следующий.
Для получения дополнительной информации о хуках, посетите страницу Hooks.
Хуки Form
Хуки по своему существу – это скрипты, которые запускаются после того, как форма прошла
валидацию FormIt. Они могут соединяться: сначала выполняется первый хук, если он пройден
удачно, задействуется следующий. Если хук не пройден, обработка следующего не начинается,
вместо этого программа возвращается к форме и отправляет сообщение об ошибке.
Крючками могут быть также имена сниппета, которые далее превращают сниппет в хук.
Есть два типа хуков:
• «рreHook» задается через свойство «preHooks» в сниппете FormIt, который выполняется при
загрузке формы. Полезно для предварительной загрузки значений.
• обычный хук, задается через свойство «hooks» в сниппете FormIt, который выполняется после
проверки формы. Пригодится для настраиваемой пост-обработки.
Использование preHooks
Просто укажите preHook в свойстве «preHooks» в Вашем запросе сниппета FormIt. Здесь нет
доступных встроенных preHooks, но если у Вас есть preHook под названием «loadCustomValues»:
[[!FormIt? &preHooks=`loadCustomValues`]]
Затем запустите сниппет «loadCustomValues» до загрузки формы. Далее можно установить поля
формы следующим образом:
<?php
$hook->setValue('name','John Doe');
$hook->setValue('email','john.doe@fake-emails.com');
return true;
Или же с помощью -> SetValues:
<?php
$hook->setValues(array(
'name' => 'John Doe',
'email' => 'john.doe@fake-emails.com',
));
return true;
Обратите внимание, что использование здесь метода SetValues () создаст соответствующие
плейсхолдеры, доступные для Вашего email-чанка; эффект от ручной установки значений схожий с
добавлением скрытых полей в форму.
Вы можете делать все, что захотите в preHook. Помните, что если Ваш preHook или Hook успешные,
нужно указать return true. Если Вы хотите добавить сообщение об ошибке в поле:
$hook->addError('user','User not found.');
return false;
Использование хуков
Просто укажите хук в свойстве «hooks» в запросе сниппета FormIt. Например, так загружаются спамхуки и почтовые хуки:
[[!FormIt? &hooks=`spam,email`]]
Встроенные хуки
Это список из встроенных хуков, которые поставляются в пакете с FormIt:
-email
-redirect
-spam
-recaptcha
-FormItAutoResponder
Хук redirect (если используется) всегда должен указываться как последний хук. Помните, что хуки
реализовываются в порядке, указанном в свойстве.
Настраиваемые хуки
Любой сниппет может быть использован с Formit в качестве настраиваемого хука. Сниппет должен
вернуть true в случае успеха, либо false или совокупность сообщений об ошибках в случае отказа (см.
ниже). Если сниппет возвращает false, хуки, перечисленные после сниппета в параметре &hooks, не
будут выполняться. Если сниппет не найден, хуки после него в списке будут выполняться.
Регистрация настраивамых хуков
Чтобы зарегистрировать настраиваемый хук, просто добавьте имя сниппета в параметр &hooks. Хуки
будут выполняться в том порядке, в котором они появляются в параметре &hooks. Ваш сниппет
может иметь любую позицию в списке.
Доступ к полям FormIt в Hook
Поля Formit доступны через hook api. Пример:
$email = $hook->getValue('email');
$allFormFields = $hook->getValues();
Если Вы хотите установить поля, Вам все же нужно будет получить к ним доступ следующим
образом:
$hook->setValue('email','reset@thisemail.com');
$hook->setValues(array(
'name' => 'Shaun',
'books' => 'Hunger Games,To Kill a Mockingbird,Mindset',
));
Возвратные значения настраиваемого хука
Сниппеты должны возвращать true при успешном исходе. В случае неудачи сниппет может вставить
сообщения об ошибке в переменную ошибок объекта крючка и выдать false. В любом случае хуки,
перечисленные после настраиваемого хука в параметре &hooks, не будут реализовываться.
Объект fiHooks доступен в сниппете как $hook, который можно использовать для возврата общих
сообщений об ошибках от сниппета:
$errorMsg = 'User not found';
$hook->addError('user',$errorMsg);
return false;
Опять же, помните: если Ваш хук удачный, убедитесь, что «return true;» находится в конце Вашего
Hook. Если Вы используете «return false;» или возврат значения не состоялся, для FormIt это
означает, что хук не пройден. Кроме того, убедитесь, что любые указанные Вами настраиваемые
хуки расположены перед хуком-редиректом в свойстве hooks.
Файловые хуки
FormIt 2.0.0+ поддерживает файловые хуки и preHooks. Это означает, что Вы можете указать FormIt
прямо в файле PHP для использования в качестве настраиваемого хука. Например:
[[!FormIt?
&hooks=`[[++assets_path]]hooks/my.hook.php`
]]
Таким образом производится определение MODX тегов в строке хука, а затем поиск хука в
assets/hooks/my.hook.php. Если файл найден, он будет определять хук оттуда.
Email хук FormIt
Email хук отправляет содержание Вашей формы на любой электронный адрес(а).
Доступные свойства<br /><br /><br />
Имя
emailTpl
Описание
Запрашиваемое. Tpl чанк для email сообщения. Если не указан, будет
посылаться список полей с их значениями.
emailSubject
Тема email сообщения.
emailUseFieldForSubject Если 1 и поле «subject» пройдено, то будет использоваться значение этого
поля в качестве строки темы email-а.
emailTo
Разделенный запятыми список писем для отправки
emailToName
Опционно. Разделенный запятыми список имен вместе со значениями
emailTo.
emailFrom
Опционно. Если установлено, будет определять From: адрес для email. Если
не установлено, сначала будет искать поле формы «email». Если ничего не
найдено, настройка системы по умолчанию –
emailFromName
emailHtml
emailConvertNewlines
emailReplyTo
emailReplyToName
emailCC
emailCCName
emailBCC
emailBCCName
emailMultiWrapper
emailMultiSeparator
«emailsender» .
Опционно. Если установлено, будет определять From: имя для email.
Опционно. Так или иначе, email должен быть в HTML-формате. По
умолчанию 1.
Опционно. Если установлено 1, будет преобразовывать все разрывы строки в
br теги.
Еmail, который установлен как «ответа на».
Опционно. Имя поля Reply-To.
Разделенный запятыми список электронных адресов для отправки через cc.
Опционно. Разделенный запятыми список имен вместе со значениями
emailCC.
Разделенный запятыми список электронных адресов для отправки через bcc.
Опционно. Разделенный запятыми список имен вместе со значениями
emailBCC.
Обрабатывает значения, представленные флажками/мульти-селекторами с
этим значением. По умолчанию только значение. (1.6.0 +)
Разделяет флажки/ мульти-селекторы этим значением. По умолчанию разрыв
строки. (1.6.0 +)
Любое из свойств email хуков может содержать плейсхолдеры или имена полей из Вашей формы,
которые будут оцениваться.
Использование<br /><br />
Просто укажите его в своем запросе FormIt, а затем также добавьте в него специфичные email
свойства.<br /><br /><br />
[[!FormIt?
&emailTpl=`CentralizedDebtObligationEmailTpl`
&emailSubject=`Some Sucker Bought Another CDO`
&emailTo=`sales@mortgagemoney.com`
&emailCC=`boss@mortgagemoney.com`
&emailBCC=`fbi@gov.com`
&emailBCCName=`CDO Fraud Informant`
]]
<br /><br /><br />
Обратите внимание, что свойство &emailTpl указывает на имя Chunk. В этом Chunk у Вас будут
плейсхолдеры для каждого поля в форме. Наш Chunk может выглядеть следующим образом:<br
/><br /><br />
<p>Hello,</p>
<p>
[[+name]]
just purchased the CDO package:
[[+cdo_package]]
.</p>
<p>Their email:
[[+email]]
</p>
<p>Thanks!</p>
Это предполагает, конечно, что в Вашей форме есть поля «name», «cdo_package» и «email».
Определение динамических адресов
В примере использована форма для определения адресатов: <br /><br /><br />
[[!FormIt?
&emailTo=`[[+addressTo]]`
]]
...
<select name="addressTo">
<option value="john@doe.com"
[[!+fi.addressTo:FormItIsSelected=`john@doe.com`]]>John</option>
<option value="jane@doe.com"
[[!+fi.addressTo:FormItIsSelected=`jane@doe.com`]]>Jane</option>
</select>
<br /><br />
Таким образом email отправляется тому, кто выбран в поле «addressTo».
Использование поля темы в качестве строки темы еmail-а<br
/><br />
Скажем, у Вас есть поле темы в форме. Вы хотите, чтобы содержимое было темой письма email
рассылки. Хук email может:<br /><br />
[[!FormIt?
&emailUseFieldForSubject=`1`
]]
Далее идет поиск поля «subject», которое будет использоваться в email. Если оно не найдено или
пустое, то по умолчанию – свойство &emailSubject.
Управление флажками и мультиселектами в e-mail<br /><br />
FormIt, версия 1.6.0 +, будет автоматически обрабатывать флажки и объединять их в одно поле.
Можно использовать свойства &emailMultiSeparator и &emailMultiWrapper, чтобы следить за
добавлением. Например, чтобы сделать флажки неразрывными в тегах LI:<br /><br />
[[!FormIt?
&emailMultiWrapper=`
<ul>
<li>[[+value]]</li>
</ul>
`
]]
<br /><br />
Или просто разделить их с тегами BR: 1<br /><br />
[[!FormIt?
&emailMultiSeparator=`<br />`
]]
FormIt крючок AutoResponder
Email хук отправит письмо-автоответ тому, кто получает подтверждение.
Доступные свойства
В нем доступны следующие свойства, которые передаются запросу сниппета FormIt:
Имя
fiarTpl
fiarSubject
fiarToField
Описание
Запрашивается. Tpl чанк для ответного автоматического сообщения.
Тема письма.
Имя поля формы, используется в качестве адреса электронной почты получателя.
По умолчанию «emailsender».
fiarFrom
Опционно. Если установлено, будет определять From: адрес для email. По
умолчанию настройки системы – «emailsender».
fiarFromName Опционно. Если установлено, будет определять From: имя для email.
fiarHtml
Опционно. Так или иначе, письмо должно быть в HTML-формате. По умолчанию
– true.
fiarReplyTo
Запрашивается. Еmail, установленный как ответ.
fiarReplyToName Опционно. Имя для поля Reply-To.
fiarCC
Разделенный запятыми список электронных адресов для отправки через cc.
fiarCCName
Опционно. Разделенный запятыми список имен со значениями fiarCC.
fiarBCC
Разделенный запятыми список электронных адресов для отправки через bcc.
fiarBCCName
Опционно. Разделенный запятыми список имен со значениями fiarBCC.
Математический хук FormIt
Математический хук (math hook) позволяет Вам включать вопросы с числами в форму для
предотвращения спама. Он будет выводить числовой вопрос, на который нужно дать правильный
ответ, вроде:
12 + 23?
Доступные свойства
Имя
mathMinRange
mathMaxRange
mathField
mathOp1Field
mathOp2Field
mathOperatorField
Описание
Минимальный диапазон для каждого числа в уравнении.
Максимальный диапазон для каждого числа в уравнении.
Имя поля ввода ответа.
Имя поля 1-го числа в уравнении.
Имя поля 2-го числа в уравнении.
Имя поля оператора в уравнении.
Использование
Просто укажите его как хук в своем запросе FormIt:
[[!FormIt? &hooks=`math`]]
По умолчанию
10
100
math
op1
op2
operator
Далее вставьте этот HTML в ту часть формы, где должен появляться математический вопрос:
<label>
[[!+fi.op1]] [[!+fi.operator]] [[!+fi.op2]]
?</label>
[[!+fi.error.math]]
<input type="text" name="math:required" value="
[[!+fi.math]]
" />
<input type="hidden" name="op1" value="
[[!+fi.op1]]
" />
<input type="hidden" name="op2" value="
[[!+fi.op2]]
" />
<input type="hidden" name="operator" value="
[[!+fi.operator]]
" />
Таким образом математический вопрос загрузится в место вывода под именем «math». Скрытые поля
имеют решающее значение, так как они указывают FormIt, каким будет уравнение (так как при
первой загрузке оно случайное).
Настройка оператора Text
Если Вы не хотите, чтобы в качестве оператора был просто «-» или «+», но хотите скрыть его от
спам-ботов, можете использовать фильтры вывода для дальнейшего увеличения неоднозначности
математического равенства. Измените с текстом уравнения текст на:
<label>
[[!+fi.op1]] plus [[!+fi.op2]]
?</label><br /><br />
Таким образом, равенство будет представляться как «23 plus 41?» или «50 minus 12?» вместо
символов -/+, усложняя задачу спам-ботам.
Хук ReCaptcha
Хук ReCaptcha позволит задействовать поддержку ReCaptcha для форм FormIt.
Использование
Во-первых, добавьте «ReCaptcha», в параметр &hooks запроса FormIt. Затем Вам необходимо
включить следующие плейсхолдеры в форму:<br /><br /><br />
[[+formit.recaptcha_html]]
[[!+fi.error.recaptcha]]
<br /><br /><br />
Первый плейсхолдер находится там, где выводится форма ReCaptcha; 2-й – это сообщение об ошибке
(если таковая имеется) для reCaptcha.
Вконце Вам нужно настроить ReCaptcha личные и публичные ключи в настройках системы.
Доступными для ReCaptcha являются:<br /><br /><br />
Имя
Описание
formit.recaptcha_public_key Ваш публичный ключ reCaptcha.
formit.recaptcha_private_key Ваш личный ключ reCaptcha.
formit.recaptcha_use_ssl
Использовать или нет SSL для запросов ReCaptcha. По умолчанию
установлено false.
Доступные свойства
Для хука ReCaptcha предусмотрено несколько дополнительных опций конфигурации:
Имя
Описание
Объект JSON для передачи данных в RecaptchaOptions var, который
настраивает виджет ReCaptcha. См. официальную инструкцию для
ReCaptcha для получения дополнительной информации.
recaptchaTheme Тему ReCaptcha для использования.
recaptchaJs
По
умолчанию
{}
clean
Redirect hook
Хук редиректа будет перенаправлять пользователя на указанный ресурс, когда представление формы
подходит к концу. Для этого нужен один параметр, redirectTo, который должен содержать ID
ресурса, на который Вы хотите совершать перенаправление. Значения полей не будут
перенаправлены.
Доступные свойства
Имя
redirectTo
Описание
Запрашивается. ID ресурса, куда будет перенаправлен пользователь после успешного
представления.
redirectParams Объект JSON параметров, передаваемых в URL редиректа.
Обратите внимание, что это также может быть использовано свойством &store для отправки
значений формы на страницу редиректа с помощью сниппета FormItRetriever.
Использование
Просто добавьте хук редиректа в свойство &hooks запроса FormIt. Затем укажите ID ресурса для
редиректа с помощью свойства &redirectTo.
Редирект параметрами
Вы можете задать параметры для перенаправления используя этот хук. Просто используйте свойство
redirectParams правильно:
[[!FormIt?
&hooks=`redirect`
&redirectTo=`212`
&redirectParams=`{"user":"123","success":"1"}`
]]
Таким образом формируется URL с этими параметрами. Скажем, ID 212 ресурса находится в
books.html, тогда URL редирект будет выглядеть так:
books.html?user=123&success=1
Спам хук
Спам хук будет проверять все поля, указанные в свойстве spamEmailFields, фильтруя спам через
StopForumSpam. Если пользователь помечен как спамер, появится сообщение об ошибке для
проверяемого поля.
Спам хук требует поддержки либо cURL, либо Sockets при установке Вашего PHP (те же требования
для Package Management).
Доступные свойства
Имя
Описание
spamEmailFields Опционно. Разделенный запятыми список полей email для проверки. По умолчанию
– «email».
spamCheckIp
Если true, также будет проверяться IP ожидающего подтверждения. По умолчанию
false.
Использование
Просто укажите «spam» хук в Вашем запросе FormIt. FormIt осуществит все остальное.
[[!FormIt? &hooks=`spam`]]
Проверка IP на спам
Хотя мы настоятельно рекомендуем не использовать IP для проверки на спам (поскольку спамеры
могут легко изменять IP-адреса, поэтому проверка IP-адресов часто дает ложные положительные
результаты). FormIt предоставляет Вам альтернативу. Просто установите значение &spamCheckIp на
1 в запросе FormIt.
Валидация Formit
! Начиная с версии FormIt 1.4.0 валидация изменилась. Старый метод проведения проверки на входе
имен все еще доступен для всех версий до FormIt 2.0.0, в которой его исключают. Рекомендуется
новый способ – с использованием свойства &validate.
Валидация может быть легко пройдена путем добавления полей для проверки в свойство &validate
запроса сниппета. Например, чтобы сделать поле имени пользователя обязательным, можно
проделать следующую операцию:
[[!FormIt? &validate=`username:required`]]
Валидаторы также могут быть «chained» (сцепленными), или выполняться последовательно.
Следующий пример показывает, как сначала проверить, является ли поле обязательным, а далее
удалитьт все теги из поста:
[[!FormIt? &validate=`text:required:stripTags`
Множественные поля и валидаторы разбиваются (split) запятыми:
[[!FormIt? &validate=`date:required:isDate=^%m/%d/%Y^,
name:required:testFormItValidator,
email:email:required,
colors:required,
subject:required,
username:required:islowercase,
message:stripTags,
numbers:required`]]
FormIt позволяет разбить валидаторы на большое количество строк, если Вы хотите.
Запомните: не используйте обратные кавычки (`) внутри запроса валидации. Замените на знак ^:
[[!FormIt? &validate=`date:required:isDate=^%m/%d/%Y^`]]
Это позволит отрегулировать запрос и наладить его правильное выполнение.
Общее сообщение об ошибке для валидаторов полезно в том случае, если ошибки не показываются,
но проверка не удается. Используется со следующим плейсхолдером:
[[!+fi.validation_error_message]]
Здесь содержится сообщение об ошибке проверки, которое может быть задано с помощью свойства
&validationErrorMessage с использованием в значении свойства, которое заменит все ошибки поля.
Кроме того также имеется 1/0 плейсхолдер:
[[!+fi.validation_error]]<br /><br /><br />
Встроенные валидаторы
Имя
Функция
blank
Поле чистое?
required
Поле не пустое?
password_confirm Поле соответствует
значению или другому
полю?
email
Email-адрес валидный?
Параметр
Имя поля пароля
Пример
nospam:blank
username:required
password2:password_confirm=^password^
emailaddr:emai
minLength
maxLength
Поле ≥ Х символов?
Поле ≤, чем Х символов?
minValue
Поле ≥ Х?
maxValue
Поле ≤ Х?
contains
Поле содержит
последовательность Х?
Разбитие определенной
после-довательности из
поля
Разбитие всех тегов в поле. Опционный список message:stripTags
Учтите, это только по
разрешенных тегов.
умолчанию.
Разрешить теги в поле.
content:allowTags
Поле – это числовое
cost:isNumber
значение?
Поле – это дата?
Опционный формат startDate:isDate=^%Y-%m-%d^
даты.
strip
stripTags
allowTags
isNumber
isDate
Минимальная длина password:minLength=^6^
Максимальная
password:maxLength=^12^
длина
Минимальное
donation:minValue=^1^
значение
Максимальное
cost:maxValue=^1200^
значение
Последовательtitle:contains=^Hello^
ность Х
Последовательmessage:strip=^badword^
ность для разбивки
Настраиваемые валидаторы (Custom Validators)
Валидаторы могут быть также настраиваемыми сниппетами. Вы можете сделать это, просто указав
имя сниппета в свойстве customValidators:
[[!FormIt? &customValidators=`isBigEnough`]]
! В версии FormIt 1.2.0 все настраиваемые валидаторы должны быть указаны в свойстве
customValidators, иначе они не запустятся.
Далее, когда валидатор в свойстве &validate:
[[!FormIt? &validate=`cost:isBigEnough`]]
Теперь в Вашем сниппете – «isBigEnough»:
<?php
$value = (float)$value;
$success = $value > 1000;
if (!$success) {
// Обратите внимание, как мы можем здесь добавить ошибку в поле.
$validator->addError($key,'Not big enough!');
}
return $success;
?>
Валидатор отправит следующие свойства сниппету, в массив $scriptProperties:
Имя
Функция
key
Ключ проверенного поля
value
Значение поля, которое было отсрочено (POSTed)
param Если параметр был определен для валидатора, это он
type
Имя валидатора (или сниппета)
validator Ссылка на экземпляр класса fiValidator.
Настраиваемые сообщения об ошибках
В версии FormIt 2.0-pl, Вы можете перезаписать сообщения об ошибках, которые выводятся
валидаторами, если отправите соответствующее свойство:
Валидатор
Свойство
blank
vTextBlank
required
vTextRequired
password_confirm vTextPasswordConfirm
email
vTextEmailInvalid, vTextEmailInvalidDomain
minLength
vTextMinLength
maxLength
vTextMaxLength
minValue
vTextMinValue
maxValue
vTextMaxValue
contains
vTextContains
isNumber
vTextIsNumber
isDate
vTextIsDate
regexp
vTextRegexp
Вы также можете определить сообщение для каждого поля с помощью задавания ключевого поля в
префиксе свойства. Например, чтобы перезаписать «required» (запрашиваемый, обязательный)
сообщение валидатора, просто добавьте в запрос FormIt:
[[!FormIt?
&vTextRequired=`Please enter a value for this field.`
&subject.vTextRequired=`Please enter a subject.`
]]
Используйте &subject.vTextRequiredдля поля темы, а для всех других полей – сообщение
vTextRequired.
FormItRetriever
Что такое FormItRetriever?
FormItRetriever – это вспомогательный сниппет для FormIt, который загружает данные с последнего
подтверждения формы пользователя через FormIt. Это полезно для страниц типа «Thank You», на
которые попадает пользователь после подтверждения формы.
Использование
Просто добавьте этот сниппет на любую страницу, на которую перенаправляется пользователь с
использованием свойства &redirectTo FormIt, и установите &store=`1` в запрос FormIt:<br /><br /><br
/>
[[!FormItRetriever]]
<br /><br /><br />
Далее отобразите данные формы с помощью плейсхолдеров соответственно именам полей Вашей
формы:<br /><br /><br />
<p>Thanks
[[!+fi.name]]
for submitting. An email will be sent to you at
[[!+fi.email]]
.</p>
Не забудьте задать &store=`1` в запросе FormIt, чтобы FormIt сохранил значение.
! Убедитесь, что плейсхолдеры были вызваны некэшированными. Эти данные изменяются с каждым
запросом, поэтому плейсхолдеры должны изменяться также с каждым запросом соответственно.
Свойства FormItRetriever
FormItRetriever поставляется с некоторыми свойствами по умолчанию, которые можно
перезаписывать. К ним относятся:
Имя
Описание
Строка, которая является префиксом для всех плейсхолдеров
полей формы, которые будут установлены на этом сниппете.
redirectToOnNotFound Если данные не найдены и установлено это свойство, происходит
перенаправление к ресурсу с этим ID.
eraseOnLoad
Если true, будут удаляться сохраненные данные формы во время
загрузки. Настоятельно рекомендуется оставлять false, если
только Вы не хотите, чтобы данные загружались только раз.
placeholderPrefix
По
умолчанию
fi.
Пример
Подтвердить форму с автоматическим ответом и анти-спам защитой, далее перенаправить на
страницу Thank You, где загружается последнее подтверждение формы, и если она не найдена,
перенаправить на ресурс с ID 444.
На вашей странице формы:
[[!FormIt?
&submitVar=`go`
&hooks=`spam,FormItAutoResponder,redirect`
&emailTo=`my@email.com`
&store=`1`
&redirectTo=`123`
]]
<form action="
[[~[[*id]]]]
" method="post">
<input type="hidden" name="nospam" value="" />
<label for="name">Name:
[[!+fi.error.name]]
</label>
<input type="text" name="name:required" id="name" value="
[[!+fi.name]]
" />
<label for="email">Email:
[[!+fi.error.email]]
</label>
<input type="text" name="email:email:required" id="email" value="
[[!+fi.email]]
" />
<label for="message">Message:
[[!+fi.error.message]]
</label>
<textarea name="message:stripTags" id="message" cols="55" rows="7">
[[!+fi.message]]
</textarea>
<br />
<input type="submit" name="go" value="Send Contact Inquiry" />
</form>
На вашей странице Thank You page (ресурс с ID 123):<br /><br /><br />
[[!FormItRetriever? &redirectToOnNotFound=`444`]]
<p>Thanks [[!+fi.name]] для подтверждения. Еmail-автоответ будет отправлен на
[[!+fi.email]]. Здесь копия Вашего сообщения:</p>
<pre>[[!+fi.message]]</pre
Учебные пособия и примеры
На этой странице приведен список учебных пособий и примеров для FormIt, а также общие
рекомендации по использованию
Поиск и устранение неисправностей
Иногда кажется, что форма зависла: Вы подтверждаете ее, но ничего не происходит. Что это значит?
Распространенная ошибка связана с валидацией. Попробуйте удалить &validation часть сниппета, и
проверьте, дало ли это результат. Если да, тогда Вы знаете, в чем дело. Частая ошибка возникает,
когда правила валидации ссылаются на неправильные имена полей. Например, если Вы изменили
имена полей с тех, которые предлагались в примере, необходимо также изменить имена полей,
используемых в правилах проверки.
Например, если Ваша форма видит:
...
<input type="text" name="firstname" id="firstname" value="
[[!+fi.firstname]]
" />
......
Тогда следующие правила проверки не будут срабатывать (полный пример сниппета см. здесь):
...
&validate=`name:required`
...
Почему? Обратите внимание, что имя поля указано как «firstname», в то время как правило
валидации ищет поле
Custom Hook
Часто форма подтверждения должна включать в себя различную информацию для регистрации вроде
IP-адреса посетителя или даты подтверждения формы. Вы можете распечатать эту информацию в
виде скрытых полей в форме, но в данном примере мы покажем, как добавить эти значения через
настраиваемый хук.
Обоснуем это вне общей формы контакта, как указано в примере Contact Page.
Тег сниппета
Единственное, что нужно добавить к базовому запросу – это новый хук: мы добавили хук с именем
customhook
[[!FormIt?
&hooks=`spam,customhook,email,redirect`
&emailTpl=`MyEmailChunk`
&emailTo=`user@example.com`
&redirectTo=`123`
&validate=`name:required,
email:email:required,
subject:required,
text:required:stripTags,
]]
Сниппет customhook
Название хука соответствует имени сниппета. Таким образом, мы создаем сниппет с именем
customhook. Это пригодится при написании настраиваемого хука, чтобы сначала провести некоторые
тесты и убедиться в его выполнении. Поскольку предполагается, что настраиваемый хук должен
возвращать значение true или false, не так просто распечатать информацию об отладке. Вместо этого
мы можем написать что-нибудь в логе MODx, используя функцию $modx->log().
Помните, что Вам нужно возвращать true, если Вы хотите принимать во внимание валидацию
формы! Вот наш пример кода для нашего нового сниппета customhook:
Тестирование
Первое, что Вы хотите сделать при написании настраиваемого хука – это протестировать его, чтобы
убедиться в успешном выполнении.
<?php
$modx->log(xPDO::LOG_LEVEL_ERROR, 'Testing my custom hook..');
return true; //<-- если Вы опустите это или укажите return false, форма не будет
проверяться
Сохраните сниппет, и попробуйте подтвердить форму. Проверьте системный лог MODx (Reports -->
Error Log) чтобы убедиться, что ваш сниппет выполнен. Вы должны увидеть что-то вроде этого в
логах:
[2011-10-24 11:23:20] (ERROR @ /index.php) Testing my custom hook.
Установка значений
У всех настраиваемых хуков есть общая черта – необходимо вычислить новые значения полей, это
эмулирует наличие скрытых полей в форме. Например, Ваш сниппет customhook может установить
метку даты, когда форма была отправлена.
<?php
$datestamp = date('Y-m-d H:i:s');
$hook->setValue('datestamp_submitted', $datestamp);
return true;
Когда Вы это сохранили, можете обновить чанк MyEmailChunk, чтобы добавить новую информацию,
например,
MyEmailChunk:
[[+name]] ([[+email]])
<br/>
Date Submitted:
[[+datestamp_submitted]]
<br/>
Чтение значений
Следующее общее правило для настраиваемых хуков – это считать подтвержденную информацию и
предпринять какие-то действия по отношению к ней, например, внести данные в базу данных.
Значения могут быть прочитаны по отдельности с помощью хука $hook->getValue(), например:
$email = $hook->getValue('email');
Или же все значения могут быть считаны сразу с помощью хука $hook->getValues():
$formFields = $hook->getValues();
$email = $formFields['email'];
Простая страница контактов
Простая страница контактов (Contact page) с отправкой по электронной почте, валидацией и
редиректом на ресурс с ID 123.
Также должно быть удаление тегов из сообщения, валидация email как реального email адреса, и
проверка на заполненность всех полей.
И, наконец, мы хотим поддержку ReCaptcha. Мы уже настроили наши публичные и личные ключи
для рекапчи с помощью следующих параметров системы:
• formit.recaptcha_public_key
• formit.recaptcha_private_key
Тег сниппета
[[!FormIt?
&hooks=`recaptcha,spam,email,redirect`
&emailTpl=`MyEmailChunk`
&emailTo=`user@example.com`
&redirectTo=`123`
&validate=`name:required,
email:email:required,
subject:required,
text:required:stripTags,
numbers:required,
colors:required`
]]
<h2>Форма контакта</h2> <br /><br /> <br
/>[[!+fi.error_message:notempty=`<p>[[!+fi.error_message]]</p>`]]
<form action="[[~[[*id]]]]" method="post" class="form">
<input type="hidden" name="nospam:blank" value="" />
<label for="name">
Name:
<span class="error">[[!+fi.error.name]]</span>
</label>
<input type="text" name="name" id="name" value="[[!+fi.name]]" />
<label for="email">
Email:
<span class="error">[[!+fi.error.email]]</span>
</label>
<input type="text" name="email" id="email" value="[[!+fi.email]]" />
<label for="subject">
Subject:
<span class="error">[[!+fi.error.subject]]</span>
</label>
<input type="text" name="subject" id="subject" value="[[!+fi.subject]]" />
<label for="text">
Message:
<span class="error">[[!+fi.error.text]]</span>
</label>
<textarea name="text" id="text" cols="55" rows="7"
value="[[!+fi.text]]">[[!+fi.text]]</textarea>
<label>
Numbers:[[+fi.error.numbers]]
<select name="numbers" value="[[!+fi.numbers]]">
<option value="">Select an option...</option>
<option value="one" [[!+fi.numbers:FormItIsSelected=`one`]]>One</option>
<option value="two" [[!+fi.numbers:FormItIsSelected=`two`]]>Two</option>
<option value="three"
[[!+fi.numbers:FormItIsSelected=`three`]]>Three</option>
</select>
</label>
<label>
Colors:[[!+fi.error.colors]]
<input type="hidden" name="colors[]" value="" />
</label>
<ul>
<li>
<label><input type="checkbox" name="colors[]" value="red"
[[!+fi.colors:FormItIsChecked=`red`]] /> Red</label>
</li>
<li>
<label><input type="checkbox" name="colors[]" value="blue"
[[!+fi.colors:FormItIsChecked=`blue`]] /> Blue</label>
</li>
<li>
<label><input type="checkbox" name="colors[]" value="green"
[[!+fi.colors:FormItIsChecked=`green`]] /> Green</label>
</li>
</ul>
<br class="clear" />
[[!+formit.recaptcha_html]]
[[!+fi.error.recaptcha]]
<br class="clear" />
<div class="form-buttons">
<input type="submit" value="Send Contact Inquiry" />
</div>
</form>
MyEmailChunk (Tplчанк)
Это Formit Email чанк.
<br />[[+name]] ([[+email]]) Wrote: <br />
[[+text]]
Обработка селектов, флажков и радио
Хотя FormIt может обрабатывать поля любого типа, для селектов, радио и флажков требуются
специальные инструкции, в связи с их естественным значением.
Обработка селективных полей
FormIt предоставляет утилитный сниппет, называемый FormItIsSelected, который может
использоваться в качестве Output Filter для обработки selected="selected" части опции.
Пример:
<select name="color">
<option value="blue"
[[!+fi.color:FormItIsSelected=`blue`]]
>Blue</option>
<option value="red"
[[!+fi.color:FormItIsSelected=`red`]]
>Red</option>
<option value="green"
[[!+fi.color:FormItIsSelected=`green`]]
>Green</option>
<!-- This would also work -->
<option value="yellow"
[[!+fi.color:is=`yellow`:then=`selected`]]
>Yellow</option>
</select>
Таким образом будет автоматически обрабатываться «selected» часть поля опции, которая проходит
валидацию и обработку ошибок.
Обработка флажков и радио
Обработка флажков и радио очень похожа на обработку селектов, с той лишь разницей, как Вы
проводите для них валидацию «required». FormIt предоставляет помощь OutputFilter для
FormItIsChecked (похожую на FormItIsSelected) для обработки персистентности значения.
В этом примере показана обработка флажков, персистируя их значения:
<label>Color:
[[!+fi.error.color]]
</label>
<input type="checkbox" name="color[]" value="blue"
[[!+fi.color:FormItIsChecked=`blue`]]
> Blue
<input type="checkbox" name="color[]" value="red"
[[!+fi.color:FormItIsChecked=`red`]]
> Red
<input type="checkbox" name="color[]" value="green"
[[!+fi.color:FormItIsChecked=`green`]]
> Green
Зпомните, что [] удаляется при установке плейсхолдера «fi.error.color».
Обработка Required в Checkboxes (по флажкам)
Так как HTML не отправляет значение, если флажок не установлен, обработка валидации «required»
по флажкам может быть сложнее. Вам нужно будет добавить поле «hidden» перед, так что, по
крайней мере, отправляется пустое значение:
[[!FormIt? &validate=`color:required`]]
...
<label>Color: [[!+fi.error.color]]</label>
<input type="hidden" name="color[]" value="" />
<input type="checkbox" name="color[]" value="blue"
[[!+fi.color:FormItIsChecked=`blue`]] > Blue
<input type="checkbox" name="color[]" value="red" [[!+fi.color:FormItIsChecked=`red`]]
> Red
<input type="checkbox" name="color[]" value="green"
[[!+fi.color:FormItIsChecked=`green`]] > Green
Таким образом проводится успешная проверка, что, по крайней мере, один флажок был выбран при
отправке формы.
Использование пустого поля No-Spam
Часто спам-боты заполняют все поля формы, чтобы пройти валидацию. Соответственно, хороший
способ борьбы со спамом заключается в добавлении поля в форму с требованием, что оно должно
быть не заполненным для успешного подтверждения.
FormIt предоставляет вам «blank» («пустой») валидатор, который может быть использован для
успешного выполнения «nospam» поля.
Установка
Просто добавьте следующий ввод данных в форму. Вы можете изменить имя поля в любое время;
использование популярных имен полей вроде «workemail» возможно с целью обмануть спам-ботов в
заполнении поля:
<input type="hidden" name="workemail" value="" />
Далее, в запросе FormIt, добавьте проверку на заполненность:
[[!FormIt? &validate=`workemail:blank`]]
Если Вы хотите обеспечить вывод сообщения об ошибке, можете сделать это в нормальном
синтаксисе FormIt (в этом примере будет
[[+fi.error.workemail]]
).
! Убедитесь в том, что Вы не используете существующее имя поля в форме для поля nospam! Так
FormIt не сможет выполнить обработку формы.
FormItCountryOptions
Что такое FormItCountryOptions?
FormItCountryOptions – это вспомогательный сниппет для FormIt 1.7.0 +, который выводит список
опций стран мира. Это полезно для форм, где есть необходимость в выпадающем списке стран.
Использование
Просто добавьте фрагмент в форму, в запрос <select>:
<select name="country">
[[!FormItCountryOptions? &selected=`[[!+fi.country]]`]]
</select>
Обратите внимание на то, как мы передаем значение плейсхолдера «fi.country» (который сохраняет
значение поля страны) в выбранный параметр. Так FormItCountryOptions получает команду выбрать
последний выбранный вариант в форме.
Свойства FormItCountryOptions
FormItCountryOptions поставляется с некоторыми свойствами по умолчанию, которые можно
перезаписать. К ним относятся:
Имя
selected
selectedAttribute
Описание
По умолчанию
Значение страны для выбора.
Опционно. Атрибут HTML для добавления к выбранной
selected="selected"
стране.
tpl
Опционно. Чанк, который используется в опции выпадающего
списка для каждой страны.
useIsoCode
Если 1, будет использоваться ISO код страны как значение.
1
Если 0, будет использоваться название страны.
prioritized
Опционно. Разделенный запятыми список кодов ISO стран,
который будет перемещать их в приоритетную группу
«Frequent Visitors» («Частые посетители») в верхней части
выпадающего меню. Это может быть применено для Ваших
часто выбираемых стран.
prioritizedGroupText Опционно. Если установлено и &prioritized в использовании,
будет текстовой меткой для приоритетной опционной группы.
allGroupText
Опционно. Если установлено и &prioritized в использовании,
будет текстовой меткой для опционной группы всех
остальных стран.
optGroupTpl
Опционно. Если установлено и &prioritized в использовании, optgroup
TPL чанк будет использоваться для разметки опционной
группы.
toPlaceholder
Опционно. Используйте это, чтобы установить вывод в
плейсхолдер вместо вывода напрямую.
Возможно, Вам понадобится, чтобы некоторые страны появлялись в верхней части списка, в
опционной группе. FormItCountryOptions поддерживает это с помощью опции &prioritized.
Например:
[[!FormItCountryOptions? &selected=`[[+fi.country]]`
&prioritized=`US,GB,DE,RU,JP,FR,NL,CA,AU,UA`]]
Так выводится список, который выглядит следующим образом:
Вы просто передаете ISO коды стран, которые хотите сделать приоритетными в параметре
&prioritized. Вы также можете настроить текст опционной группы с помощью свойств &
prioritizedGroupText и allGroupText.
FormItStateOptions
Что такое FormItStateOptions?
FormItStateOptions – это вспомогательный сниппет для FormIt 1.7.0+, который выводит список
штатов США. Это полезно для форм, где требуется наличие выпадающего списка штатов США.
Использование
Просто добавьте фрагмент в форму в запросе <select>:
<select name="state">
[[!FormItStateOptions? &selected=`[[!+fi.state]]`]]
</select>
Обратите внимание, как мы передаем значение плейсхолдера «fi.state» (в котором хранятся значения
поля состояния) в выбранный параметр. Так FormItStateOptions дается команда выбрать последний
выбранный вариант в форме.
Свойства FormItStateOptions
FormItStateOptions поставляется с некоторыми свойствами по умолчанию, которые можно
перезаписать. К ним относятся:
Имя
Описание
По умолчанию
selected
Значение страны для выбора.
selectedAttribute Опционно. HTML атрибут для добавления к выбранной стране.
selected="selected"
tpl
Опционно. Чанк, который используется для каждого опционного
выпадающего списка.
useAbbr
Если 1, будет использовать аббревиатуры штата как значения.
1
Если 0, будет использовать полное название государства.
toPlaceholder Опционно. Используйте это, чтобы установить вывод в
плейсхолдер вместо вывода напрямую.
FormSave
Что такое FormSave?
FormSave – это ловушка дополнения FormIt, которая позволяет виртуально сохранять любую форму
в базу данных и экспортировать результаты в CSV/XML/Print view прямо из модуля. Так же Вы
можете добавлять свои собственные шаблоны экспорта, для экспорта в любом формате.
FormSave создано и обслуживается SCHERP Ontwikkeling.<br /><br /><br />
Требования
MODX® Revolution 2.2.0 или более поздняя версия.
История
Версия Дата
выхода
1.0.1- 8 июня
PL1
2012
Автор
Исправления
Патрик Нийкамп (Patrick Nijkamp,
SCHERP Ontwikkeling)
Добавлена возможность удаления записей
из формы, исправлена ошибка
1.0.0PL1
24 апреля Патрик Нийкамп (Patrick Nijkamp,
2012
SCHERP Ontwikkeling)
Первый выпуск
Загрузка и установка
Установите пакет с помощью менеджера пакетов MODX®.<br /><br /><br />
Что Вам нужно знать?
Так как FormSave – это ловушка дополнения FormIt, FormIt должно быть установлено, и Вы должны
знать, как им пользоваться. Если же Вы не знаете что такое FormIt, прочтите руководство (RTFM)<br
/><br /><br />
Использование FormSave на фронтэнде («лицевой» части сайта)
Использование сниппета
В качестве примера мы используем следующую контакт-форму:<br /><br /><br />
[[!FormIt?
&hooks=`recaptcha,spam,email,redirect`
(код recaptcha,спам, email,переадресация)
&emailTpl=`MyEmailChunk`(мой email-чанк)
&emailTo=`user@example.com`(пользователь@example.com)
&redirectTo=`123`
&validate=`name:required,(имя: требуется)
email:email:required,(email: требуется)
subject:required,(тема: требуется)
text:required:stripTags,(текст: требуется:тэги)
numbers:required,(числа: требуется)
colors:required` (цвета: требуется)
]]
<br /><br /><br />
Но сейчас мы хотим сохранить форму в базу данных и просмотреть результаты позже. Для этого
просто добавляем «ловушку» и параметр для FormIt:
<--добавлена «ловушка» после
[[!FormIt?
проверки на спам и кода captcha
&hooks=`recaptcha,spam,FormSave,email,redirect`
&emailTpl=`MyEmailChunk`
&emailTo=`user@example.com`
<-- добавлена тема формы, чтобы
конкретизировать эту форму
&redirectTo=`123`
&fsFormTopic=`contact`
&validate=`name:required,
email:email:required,
subject:required,
text:required:stripTags,
numbers:required,
colors:required`
]]
В FormIt Вы можете использовать следующие параметры:
Параметр
fsFormTopic
Объяснение
Тема формы. Используется для разделения множественных форм. Значение
по умолчанию: "form"
fsFormFields
Разделенный запятыми список полей для сохранения. Если пропустить, все
поля будут сохранены. Например: имя, email, сообщение.
fsFormPublished Вне зависимости от того, будет опубликована форма или нет, "1" остается в
базе данных. На данный момент не используется.
FoundationX
Чтотакое FoundationX?
FoundationX – это адаптивный Zurb CSS каркас. Разработка MODX.
Эта разработка позволяет пользователю с минимальными знаниями HTML или CSS быстро и
эффективно настроить современный, адаптивный веб-сайт всего за несколько минут, всего лишь
подписавшись на MODX Cloud и установив снэпшот FoundationX.
Требования
FoundationX доступен как снэпшот только в MODX Cloud. Если у Вас еще нет аккаунта в MODX
Cloud, Вы можете зарегистрироваться здесь: here.
История
FoundationX был создан в 2012 году YJ Tso (@sepiariver) как настраиваемая «Супер-Тема» для
использования в MODX Cloud.
Текущая версия
На данный момент FoundationX существует в версии 1.0.4-beta. FoundationX доступна в бета-версии,
но все еще находится в разработке. Приветствуется обратная связь. Доступна систематичная
документация.
Установка
Перед тем как запустить MODX Cloud Market, Вам нужно принять запрос от FoundationX, используя
форму: https://modxcloud.com/contact.html.
Убедитесь, что в поле «Тема» Вы указали «Прислать мне FoundationX» для того, чтобы Ваш запрос
попал к нужному агенту службы поддержки.
Когда снэпшот пришлют на Ваш аккаунт MODX Cloud, Вы получите уведомление. Перейдите в
хранилище файлов и найдите снэпшот FoundationX 1.x.x. Нажмите на ссылку «Добавить в облако».
Если Вы еще не создали облако, в которое нужно установить FoundationX, прочтите эту
документацию here и создайте его. Во всплывающем окне «Добавить в облако» выберите облако,
которое нужно переписать, и нажмите «Добавить в облако».
Внимание!
FoundationX Snapshot перепишет Ваше облако.
Убедитесь, что в облаке, в которое Вы хотите добавить FoundationX Snapshot, не содержит данные,
которые Вы бы хотели сохранить. Если Вы в этом не уверены, сначала сохраните облако. Прочтите
как сохранить облако здесь: here. Для этого понадобится лишь кликнуть мышкой в MODX Cloud!
Когда снэпшот будет успешно добавлен, Вам придет уведомление. Перейдите на страницу
редактирования облака и в списке опций в правой боковой панели выберите «Create Admin User»
(создать пользователя Администратор). Введите имя пользователя, пароль и Ваш e-mail адрес и
нажмите «Create Admin User». После завершения процесса, Вам придет еще одно уведомление.
Теперь Вы можете войти в MODX Manager.
Как пользоваться FoundationX?
Когда Вы вошли в систему
Первое, что Вы увидите, войдя в MODX Revolution, это приборная панель. В FoundationX она
довольно обычная, есть клавиши быстрого вызова для наиболее используемых свойств, вложенные
видео уроки и ссылки на всю документацию.
Управление настройками сайта
На приборной панели нажмите клавишу быстрого вызова "Manage Site Settings" (Управление
настройками сайта). Таким образом, Вы перейдете на страницу редактирования настроек контекста
для веб Context. Если это выглядит сложным, не переживайте – Вам нужно знать лишь то, что здесь
Вы сможете редактировать информацию о себе и Вашем бизнесе в пределах сайта.
Нажмите на "Context Settings" (Настройки контекста), Вы увидите таблицу настроек. Что бы
изменить значение настройки – двойной клик по существующему значению – появится
редактируемое текстовое поле, в которое и можно ввести нужное Вам значение.
Внимание!
Список настроек отсортирован в алфавитном порядке, так он выглядит по умолчанию для страницы
редактирования настроек в MODX Revolution. Настройки не сгруппированы логически.
Просмотрите, пожалуйста, весь список для полного понимания настроек сайта в FoundationX.
Имя
Физический адрес
Ключ
fx.address
Описание
Введите физический адрес Вашего предприятия. Если
Вы не хотите, чтобы этот адрес отображался, оставьте
поле пустым.
Месторасположение
fx.city
Если Вы заполнили поле «Физический адрес», введите
название города. Если физический адрес не указан,
оставьте поле пустым.
Создать панель для участка fx.contentPanel Если «Да», то основной участок контента будет
«контент»?
отображен в панели FoundationX. Больше об этом в
Стилях сайта в секции ниже.
Страна
fx.country
Если Вы заполнили поле «Физический адрес», введите
название страны. Если физический адрес не указан,
оставьте поле пустым.
e-mail адрес
fx.email
Требуется, если Вы используете контакт-форму на
странице обратной связи FoundationX. Так же будет
отображаться в нижнем колонтитуле, если активирован
Подробный нижний колонтитул
Facebook URL
fx.facebook
Укажите полный URL-адрес своей страницы в Facebook.
(унифицированный
Если ее у Вас нет или Вы не хотите, чтобы отображалась
указатель ресурса)
иконка и ссылка на Facebook, оставьте поле пустым.
Google+ URL
fx.google
Укажите полный URL-адрес своей страницы в Google+.
Если ее у Вас нет или Вы не хотите, чтобы отображалась
иконка и ссылка на Google+, оставьте поле пустым.
LinkedIn URL
fx.linkedin
Укажите полный URL-адрес своей страницы в LinkedIn.
Если ее у Вас нет или Вы не хотите, чтобы отображалась
иконка и ссылка на LinkedIn оставьте поле пустым.
Активировать титульные fx.masthead
Если «Да», заголовок будет отображаться выше
данные?
основного навигатора, который по умолчанию содержит
Ваш логотип, подзаголовок сайта и иконки социальных
сетей.
Телефон
fx.phone
Укажите номер телефона. Если Вы не хотите, чтобы
номер отображался, оставьте поле пустым.
Pinterest URL
fx.pinterest
Укажите полный URL-адрес своей страницы в Pinterest.
Если ее у Вас нет или Вы не хотите, чтобы отображалась
иконка и ссылка на Pinterest оставьте поле пустым.
Почтовый индекс
fx.postal
Укажите почтовый код/индекс. Если Вы не хотите,
чтобы код отображался, оставьте поле пустым.
Показывать боковую
fx.sidebarLeft Если «Да», то панель блога будет отображаться слева.
панель блога слева?
Если «Нет», то справа. Если Вы не используете Блог,
деактивируйте страницу блога, и данная настройка не
будет иметь никакого эффекта.
Создать панель для
fx.sidebarPanels Если «Да», панель виджетов будет отображаться на
виджетов?
панели FoundationX. Больше об этом в Стилях сайта в
секции ниже.
Штат/область
fx.state
Если Вы заполнили поле «Физический адрес», введите
Подзаголовок сайта
Twitter URL
Подробный нижний
колонтитул
YouTube URL
название штата/области. Если физический адрес не
указан, оставьте поле пустым.
fx.tagline
Если «Да», то подзаголовок будет отображен под
логотипом в заголовке сайта.
fx.twitter
Укажите полный URL-адрес своей страницы в Twitter.
Если ее у Вас нет или Вы не хотите, чтобы отображалась
иконка и ссылка на Twitter оставьте поле пустым.
fx.verboseFooter Если «Да», то будет отображаться большой колонтитул
вместе с названием сайта, физическим адресом, номером
телефона, иконками социальных сетей и список
основных пунктов меню.
fx.youtube
Укажите полный URL-адрес своей страницы в YouTube.
Если ее у Вас нет или Вы не хотите, чтобы отображалась
иконка и ссылка на YouTube оставьте поле пустым.
Внимание!
Есть еще одна настройка «Системная настройка», которую нужно изменить для полной подстройки
FoundationX. В главном меню Менеджера выберите System (Система)» System Settings (Настройки
системы). Вверху таблицы появится выпадающее окно под названием "Filter by area..." (Фильтрация
по участку…). Выберите "Site" (Сайт) внизу списка. Найдите настройки под названием "Site name"
(Имя сайта) и ключ "site_name". Двойной клик по значению, которое изначально установлено как
"FoundationX", и введите номер версии. Введите желаемое имя сайта. Когда Вы это сделали,
кликните на ключ "site_name". Системные настройки сохранятся, как только Вы уберете фокус с
поля ввода текста.
Управление стилями сайта
На приборной панели выберите клавишу быстрого вызова под названием "Site Style Settings"
(Настройки стиля сайта). Таким образом, Вы перейдете на страницу редактирования
FoundationX Resource, который существует для того, чтобы Вы легко могли подстроить вид
сайта. В ресурсах FoundationX CSS есть четыре таблицы:
Перейдите к третьей таблице "Template Variables" (Переменные шаблона) – там начинается самое
интересное!
Внимание!
Первые два пункта "Static Resource" (Статический ресурс ) и "Settings” (Настройки) и последний
пункт "Resource Groups" (Группы ресурсов) не нужно редактировать! Мы советуем редактировать их
только опытным пользователям MODX.
В MODX термин "Template Variables" (Переменные шаблона) или просто "TV", относятся только к
пользовательским полям, приложенным к странице шаблона. В этом случае страница является CSS
файлом сайта. В FoundationX Вам не нужно уметь писать CSS – Вы можете редактировать CSS при
помощи "Template Variables" (Переменные шаблона).
Как видите, в FoundationX есть три категории "TV":



цвета
основа
вид
Цвета
Первая категория – это категория Цвета. Вы можете редактировать цветовую схему сайта, введя
шестнадцатеричные значения. Тем не менее, есть более удобный способ.
FoundationX выходит с “TV” ColorPicker (определитель цвета). Вы сможете определять цвета с
помощью графического определителя цвета. Из-за ошибки в приложении определитель цвета не
визуализируется при установке FoundationX из снэпшота. Вам нужно еще раз активировать
встроенную программу на странице Менеджера установки/
1. Вверху меню Менеджера найдите System (Система) » Package Management (Пакет установки).
2. Найдите пакет "ColorPicker" (Определитель цвета) и нажмите кнопку «Переустановка».
3. На следующем экране нажмите «Продолжить», затем «ОК» в окне подтверждения. Теперь
Определитель цвета будет работать корректно.
Теперь, когда Вы перейдете на вкладку редактирования в FoundationX CSS Resource, “TV” будут
выглядеть так:
Кликните по выпадающим стрелкам, чтобы открыть определитель цвета. Выберите нужный цвет, и
шестнадцатеричное значение будет автоматически введено в “TV”. Не забудьте сохранить
настройки.
Основание
В этой категории только один “TV” в версии 1.0.4-beta и это загрузчик логотипа сайта.
Кликните по выпадающим стрелкам в элементе "Site Logo" (Логотип сайта). Появится MODX
Browser. По умолчанию он установлен как /assets/foundation/images/ folder
(массивы/основание/картинки/папка). Если это не так, выберите нужное дерево каталогов. Для
загрузки, нажмите клавишу загрузки (обведена на скриншоте). В окне «Загруженные файлы»
нажмите «Добавить», выберите файл с Вашего компьютера, нажмите «Загрузить»; когда закончится
загрузка, закройте окно.
Вернитесь в MODX Browser, нажмите на миниатюру логотипа, а потом «ОК». URL-адрес будет
интегрирован в значение “TV” и логотип появится в заголовке сайта, если он активирован.
Вид
Третья и наиболее сильная категория FoundationX TVs.
Включать CSS. Чтобы включить отдельные CSS файлы добавьте @font-face declarations (объявление
начертания шрифта) и любой CSS файл, который нужно вставить окончательный соединенный
стилевой файл. Если Вы не знаете, что это значит, Вам не нужно использовать этот пункт.
Ширина контента. Этот пункт устанавливает пиксельное значение для основного контейнера
контента. Размер визуализации будет зависеть от устройства и ширины браузера, но значение
останется заданное Вами.
Фоновый рисунок. Загрузите картинку, которая будет использоваться как текстура фона. В
FoundationX уже есть несколько картинок, но возможно Вы захотите отличиться и загрузить
собственный. Загрузчик картинок работает так же, как и загрузчик логотипов.
Пользовательский CSS. Если Вы хотите авторизировать свой собственный CSS, добавьте свои
описания. Они появятся в конце стилевого файла, поэтому превзойдут стили по умолчанию.
Возможно, это наиболее сильный TV в FoundationX.
Внимание!
Если возникнут какие-либо проблемы, нажмите на маленькую зеленую стрелку – это сбросит все
настройки TV, то есть к нулевому значению. Если Вы сохраните ресурсы таким образом, все стили
сбросятся и любой пользовательский CSS, введенный в это поле, будет переписан. Это Ваш
«спасательный круг», если Ваш CSS испорчен, но все же, пользуйтесь этой функцией с
осторожностью.
Просто добавьте контент
Теперь переходите к добавлению контента. На каждой странице исходного сайта есть инструкция по
использованию. Мы продолжим добавлять постраничную документацию. А теперь, наслаждайтесь
FoundationX!
Gallery
Что такое Gallery ?
Галерея – это динамичное приложение для MODx Revolution. Оно позволяет Вам быстро и удобно
создавать галереи картинок, сортировать и маркировать их, отображать их на фронтэнде («лицевой»
части сайта, которую видят простые посетители)230, Вашего сайта различными способами.
Уроки по использованию приложение разработаны сообществом. Их можно загрузить здесь: Tutorial
- Gallery Component with Galleriffic.pdf
Требования
•
•
MODx Revolution 2.0.0-rc-2 или более поздняя версия
PHP5 или более поздняя версия
История и информация
Приложение Gallery было написано Шоном МакКормиком (Shaun McCormick) как динамичный
компонент и впервые вышло 5 февраля 2010 года.
Загрузка
Приложение можно загрузить при помощи установочного пакета MODx Revolution Package
Management, или из галереи приложений MODx, которую можно найти здесь:
http://modx.com/extras/package/gallery
Разработка и отчет об ошибке
Приложение хранится и разрабатывается на GitHub. Найти его можно здесь:
https://github.com/splittingred/Gallery
Использование
Сниппет Gallery можно вызвать при помощи ярлыков tags:
[[Gallery? &album=`My Album`]]
[[GalleryAlbums? &limit=`10`]]
Сниппеты
В пакете Gallery есть 3 сниппета: один называется «Галерея», который отображает альбомы или
ярлыки. Второй – это сниппет «Альбомы галереи» - отображает список альбомов; третий –
«Элементы галереи» - отображает единичный элемент галереи.
Gallery
GalleryAlbums
GalleryItem
Настройки системы
Вы можете сменить место хранения картинок для Gallery, изменив следующие настройки:
gallery.files_path Абсолютный путь к папке, в которой хранятся картинки
gallery.files_url
Доступный URL-адрес, при помощи которого Вы можете достичь gallery.files_path
В версии 1.3.0 Вы можете активировать управлять TinyMCE для описания элементов Gallery.
Доступны следующие настройки:
Ключ
gallery.use_richtext
gallery.tiny.width
gallery.tiny.height
gallery.tiny.buttons1/2/3/4/5
gallery.tiny.custom_plugins
gallery.tiny.theme_advanced_blockformats
gallery.tiny.theme_advanced_css_selectors
Описание
Установите «Да», чтобы активировать
интеграцию TinyMCE. Обратите внимание,
что у Вас должно быть установлено
приложение TinyMCE.
Ширина текстового редактора в пикселях или
процентах.
Высота текстового редактора в пикселях или
процентах.
Кнопки, которые будут отображаться в
разных рядах (от 1 до 5). Если оставить
пустым, останутся основные настройки
TinyMCE.
Разделенный запятыми список плагинов для
загрузки. Если оставить пустым, останутся
основные настройки TinyMCE.
Форматы блоков, для использования в
выпадающем окне. Если оставить пустым,
останутся основные настройки TinyMCE.
CSS селекторы, которые можно выбирать.
Если оставить пустым, останутся основные
настройки TinyMCE.
Использование пользовательских TV (переменные шаблона)
В приложении Gallery существуют пользовательские TV ввода и вывода для управления картинками
на бэкэнде(административная часть сайта, которую не видят простые посетители). Вы можете
кадрировать, изменять размеры, вращать изображение и многое другое. Пожалуйста, простите
следующую статью, чтобы узнать больше об использовании TV:
•
Setting Up the GalleryItem TV
Плагины приложения Gallery
Это приложение позволяет Вам отображать галерею изображений при помощи пиктограмм картинок
на фронтэнде сайта или при помощи плагинов jQuery. Вы можете ввести имя плагина в сниппет
Gallery. На данный момент, доступен только плагин для Galleriffic.
Менеджер приложения Gallery
Приложение выпускается с пользовательской страницей менеджера (можно увидеть в верхнем меню
компонентов), на которой Вы можете управлять альбомами. Так же Вы можете создавать новые
альбомы, давать им имя и использовать это имя в сниппете Gallery для быстрого доступа к нужному
альбому. После создания альбома, кликните правой кнопкой мыши, чтобы обновить его и управлять
изображениями, связанными с этим альбомом.
Вы можете использовать четыре вида загрузки изображений. Это может быть загрузка единичного
элемента (по желанию с текстом, содержащим теги форматирования; смотрите системные настройки,
описанные выше), множественная загрузка, пакетная загрузка с поиском папок в файловой системе и
импортом найденных картинок и zip-загрузка, при помощи которой можно разархивировать zipфайлы.
Медиа-ресурс приложения Gallery
Приложение выпускается с пользовательским Медиа-ресурсом, благодаря которому можно
отображать альбомы и их элементы в левой частви менеджера программы. Просто создайте новый
медиа-ресурс с типом «Альбомы галереи», а приложение сделает все остальное.
Примеры
Образец строки исходного текста для галереи Galleriffic и альбома «Мой альбом».
[[!Gallery? &album=`My Album` &plugin=`galleriffic`]]
Захватите первые 10 фотографий, обозначенные как «Развлечение»
[[!Gallery? &tag=`Fun`]]
Захватите все фотографии в альбоме «Мой альбом», обозначенные как «Синие»
[[!Gallery? &album=`My Album` &tag=`blue`]]
Сниппет Gallery
Этот сниппет отображает «галерею» изображений из альбома, из ярлыка или обоих.
Свойства
Имя
album
tag
plugin
thumbTpl
containerTpl
toPlaceholder
placeholderPrefix
thumbWidth
thumbHeight
thumbZoomCrop
thumbFar
Описание
Значение по умолчанию
Загрузит элементы только из
заданного альбома. Можно
указать имя или ID альбома.
Загрузит только элементы
только с данным ярлыком.
Имя плагина, который нужно
использовать для отображения
на фронтэнде сайта. Прочтите
раздел «Плагины» ниже.
Чанк для использования в
galItemThumb
качестве tpl для каждой из
пиктограмм.
Чанк для заключения ввода в
оболочку.
Если настроено, установит
вывод подстановщика с
заданным значением и вызов
сниппета ничего не покажет.
Если не установлен
gallery.
подстановщик, добавит префикс
к свойствам
имя/id/описание/общее текущего
альбома с заданным префиксом.
Ширина созданной пиктограммы 100
в пикселях.
Высота созданной пиктограммы 100
в пикселях.
Использовать или нет
1
увеличение и кадрирование
пиктограммы.
Соотношение размеров
C
phpThumb с пиктограммой.
Создается изображение с
размером, заданным "w"
(ширина) и "h"(высота),
значение которых обязательно
должно быть установлено.
Значения обозначают
выравнивание: L=left (левое),
R=right (правое), T=top
(верхнее), B=bottom (нижнее),
thumbQuality
thumbProperties
imageWidth
imageHeight
imageZoomCrop
imageFar
imageQuality
imageProperties
sort
dir
limit
start
showInactive
albumRequestVar
C=center (по центру).
Установите BL (нижнее левое),
BR (нижнее правое), TL (верхнее
левое), TR (верхнее правое) для
пейзажных и портретных
изображений.
Качество созданной
90
пиктограммы (от 0 до 100).
JSON параметры для ввода в
phpThumb в качестве свойств
пиктограммы.
Если используется плагином, то 500
обозначает максимальную
ширину текущего изображения.
Если используется плагином, то 500
обозначает максимальную
высоту текущего изображения.
Использовать или нет
увеличение и кадрирование
изображения.
Соотношение размеров
phpThumb с изображением.
Если используется плагином,
90
качество изображения – от 0 до
100.
JSON параметры для ввода в
phpThumb в качестве свойств
изображения.
Поле, по значению которого
rank
будет происходить сортировка.
Вы так же можете выбрать
"rand" для случайной
сортировки.
Направление, в котором нужно ASC
сортировать изображения.
Если установить значение не
0
равное нулю, будет
отображаться только
Х(указанное количество)
изображений.
Индекс, с которого начинается 0
захват изображений, если
установлен лимит. Похож на
порядок SQL стартовым
оператором.
Если значение верное,
false
отображает так же неактивные
изображения.
Можно использовать для
galAlbum
определения варианта запроса
для поиска фильтром альбома,
используя в связке с
checkForRequestAlbumVar=`true`.
Можно использовать для
checkForRequestAlbumVar
tagRequestVar
checkForRequestTagVar
useCss
itemCls
activeCls
linkToImage
linkAttributes
imageAttributes
фильтра по имени или ID.
Если найден вариант запроса со false
свойством albumRequestVar (по
умолчанию galAlbum), то это
значение будет использовано как
свойство альбома для сниппета.
Можно использовать для
galTag
определения варианта запроса
для поиска фильтром
дескрипторов, используя в
связке с
checkForRequestTagVar=`true`.
Если найден вариант запроса со false
свойством tagRequestVar (по
умолчанию galTag), то это
значение будет использовано как
свойство дескриптора для
сниппета.
Если верно, то будет
1 (true)
использоваться CSS,
предоставленные сниппетом
Gallery. Установите значение
«0», чтобы не загружать CSS,
предоставленные сниппетом
Gallery.
CSS класс для каждого из
gal-item
элементов.
CSS класс, который нужно
gal-item-active
добавить к элементу, если он
активен.
Делать прямую ссылку на
0
изображение для каждой
пиктограммы или на элемент
галереи – пользовательский
URL-адрес.
HTML-характеристики для А
дескриптора в tpl (файле
шаблона) элемента.
HTML-характеристики для
дескриптора изображения в tpl
(файле шаблона) элемента.
Чанки приложения Gallery
В приложении задействованы два чанка. Их соответствующие параметры в Gallery:


thumbTpl – чанк для каждого из отображаемых элементов
containerTpl – по желанию. Если установлен, заключит содержимое в оболочку чанка
Плагины
Приложение Gallery позволяет Вам отображать галереи изображений напрямую через пиктограммы
на фронтэнде сайта или при помощи плагинов jQuery. Вы можете ввести имя плагина в свойствах
сниппета Gallery (&plugin).


Slimbox
Galleriffic
Имейте ввиду, что плагин Galleriffic изменит свойство `thumbTpl` на `gallerifficThumbTpl`, а свойство
`containerTpl` на `gallerifficContainerTpl`.
Примеры
Отображает галерею фотографий в альбоме «Мой альбом»:
[[!Gallery? &album=`My Album`]]
Отображает галерею фотографий в альбоме «Разное», но использует чанк под названием
'truckThumb' для пиктограмм:
[[!Gallery? &album=`Trucks` &thumbTpl=`truckThumb`]]
Отображает галерею фотографий в альбоме «Круто» и использует плагин Galleriffic :
[[!Gallery? &tag=`Cool` &plugin=`Galleriffic`]]
Захватывает только три фотографии из альбома «Машины» и вставляет в подстановщик
"gallery":
[[!Gallery? &limit=`3` &album=`Cars` &toPlaceholder=`gallery`]]
<div class="my-gallery">
[[+gallery]]
</div>
Используя &thumbProperties, установите вывод пиктограмм в 90 процентном качестве jpg вместо
png:
[[!Gallery? &album=`My Album` &thumbProperties=`{"f":"jpg","q":"90%"}`]]
Чанк Gallery контейнер
Этот чанк используется, когда &containerTpl установлен в сниппете Gallery.
Внимание! Рекомендуем не использовать это свойство и просто заключить в оболочку вывод Вашего
ресурса или чанка; это даст Вам большую свободу действий в будущем.
Значение по умолчанию
Для чанка &containerTpl значение по умолчанию не задано; если не указанно особое значение, то
вывод не будет заключен ни в одном контейнере.
Доступные подстановщики
Имя
thumbnails
album_name
album_description
Описание
Созданные пиктограммы
Имя текущего альбома
Описание текущего альбома
Чанк Gallery превью
Чанк, отображающийся в сниппете Gallery со свойством &thumbTpl.
Значение по умолчанию
<div class="
[[+cls]]
">
<a href="
[[+linkToImage:if=`[[+linkToImage]]`:is=`1`:then=`[[+image_absolute]]`:else=`[[~[[*id]]
?
&
[[+imageGetParam]]=`[[+id]]
`
&
[[+albumRequestVar]]=`[[+album]]
`
&
[[+tagRequestVar]]=`[[+tag]]` ]]`]]
">
<img class="
[[+imgCls]]
"src="
[[+thumbnail]]
"alt="
[[+name]]
"/>
</a>
</div>
Доступные подстановщики
Имя
Name (имя)
Filename (имя файла)
Filesize (размер файла)
Thumbnail (пиктограмма)
Image (изображение)
image_absolute (начальное изображение)
Description (описание)
Mediatype (медиатип)
Createdon (создано в…)
Createdby (создано…)
Active (активный)
Tags (метки)
cls
linkToImage (ссылка на изображение)
imageGetParam (параметры получения
изображения)
albumRequestVar (запрос)
Album (альбом)
Описание
Имя элемента
Базовое имя файла элемента
Размер файла для элемента
URL-адрес на полученную пиктограмму для
указанного элемента
URL-адрес на полученное изображение для
указанного элемента
Фактический URL-адрес изображения
(вместо пиктограммы/подстановщиков
изображения, которые используются в
phpthumb, основанном на свойствах
сниппета).
Описание элемента
Медиатип элемента. На данный момент, это
просто 'image' (изображение)
Отметка времени, в которое был создан
данный элемент
ID пользователя, создавшего данный элемент
Показывает активен ли элемент. Может быть
со значением «1» или «0».
Список меток, связанных с данным
элементом
значение свойства &itemCls на сниппете
Gallery Значение по умолчанию - 'gal-item'
Дает прямую ссылку на изображение. Не
добавляет подстановщик «imageGetParam» к
параметрам запроса. Значение по умолчанию
– «1»
GET param для использования в случае
добавления GET param к ссылке для сниппета
Gallery. Значение по умолчанию - 'galItem'
GET param для связки со сниппетом Gallery.
Если кликать по изображению, оно останется
в выбранном альбоме с заданным сниппетом
Отображение текущего альбома
Сниппет «Альбом галереи»
Этот сниппет отображает список альбомов. По умолчанию захватывает только важные альбомы.
Вы можете установить отображение пиктограммы для каждого альбома и изображения в альбоме,
установив свойство "rowTpl" в "galAlbumRowWithCoverTpl" или используя в Вашем
пользовательском rowTpl.
Свойства
Имя
rowTpl
sort
dir
limit
start
toPlaceholder
showInactive
showAll
showName
parent
prominentOnly
albumCoverSort
albumCoverSortDir
thumbWidth
thumbHeight
Описание
Значение по умолчанию
Чанк для каждого ряда
galAlbumRowTpl
альбомов
Поле, по значению которого createdon
нужно производить
сортировку
Направление, в котором
DESC
нужно производить
сортировку
Если задано не нулевое
10
значение, ограничит
количество взвратных
результатов
Индекс, с которого
0
начинаются результаты
Если не пустой, установит
вывод к подстановщику с
заданным значением
Если установлено значение
0
«1», отобразит так же
неактивные галереи
Если установлено значение
1
«1», отобразит все альбомы,
все зависимости от
родительского документа
Если установлено значение
1
«0», скроет название альбома
Захватывает только альбомы с 0
родительским альбомом с
данным ID. Не забудьте
установить значение «0» для
showAll, иначе он просто не
будет работать
Если установлено значение
1
«1», будут отображаться
только альбомы с пометкой
«Важный»
Поле для использования при rank
сортировке для получения
обложки альбома. Чтобы
получить первое изображение,
используйте значение "rank"
(ранг). Чтобы получить
случайное изображение,
используйте значение
"random" (случайный)
Направление при сортировке ASC
для получения обложки
альбома. Может быть
восходящим и нисходящим
Ширина пиктограммы для
100
обложки альбома
Высота пиктограммы для
100
thumbZoomCrop
thumbFar
thumbQuality
thumbProperties
albumRequestVar
prominentOnly
обложки альбома
Использовать или нет
1
увеличение и кадрирование
для пиктограммы обложки
альбома
Соотношение сторон для
С
phpThumb с пиктограммой
обложки альбома
Качество пиктограммы
90
обложки альбома (от 1 до 100)
JSON параметры для ввода в
phpThumb в качестве свойств
пиктограммы альбома.
Если
checkForRequestAlbumVar
установлен как «Верно» на
сниппете Gallery, будет искать
запрос с данным именем для
выбранного альбома
Если установлено значение
true
«1», будут отображаться
только альбомы с пометкой
«Важный»
Чанки альбомов галереи
В приложении задействован только один чанк. Его соответствующий параметр в Gallery:

rowTpl – чанк для каждого из отображаемых альбомов.
Примеры
Охватывает список из первых 10 активных, «важных» альбомов:
[[!GalleryAlbums]]
Захватывает 10 «важных» альбомов, выбранных буквенно-цифровой сортировкой:
[[!GalleryAlbums? &sort=`name` &dir=`ASC`]]
Захватывает 3 недавно использованных альбома, вне зависимости от важности и устанавливает в
подстановщик 'albums':
[[!GalleryAlbums? &limit=`3` &prominentOnly=`0` &toPlaceholder=`albums`]]
Отображает 3 недавно использованных альбома со случайной обложкой:
[[!GalleryAlbums? &limit=`3` &albumCoverSort=`random`]]
Используя &thumbProperties, установите вывод пиктограмм в 90 процентном качестве jpg вместо
png:
[[!GalleryAlbums? &thumbProperties=`{"f":"jpg","q":"90%"}`]]
Чанк rowTpl
Этот чанк используется для каждого альбома, который повторяется в сниппете GalleryAlbums
Значение по умолчанию
<li
[[+cls:notempty=``]]
><a href="
[[~[[*id]]? &[[+albumRequestVar]]=`[[+id]]`]]
">
[[+showName:notempty=`[[+name]]`]]
</a></li>
Доступные подстановщики
Имя
id
name
parent
description
createdon
createdby
rank
Описание
ID альбома
Название альбома
Родительское ID альбома. Значение по
умолчанию «0»
Описание альбома
Отметка времени, в которое был создан
данный альбом
ID пользователя, создавшего данный альбом
Ранг или порядок, в котором сортируются
active
prominent
albumRequestVar
image
альбомы
Есть ли у данного альбома отметка
«Активный». Может быть значение «1» или
«0»
Есть ли у данного альбома отметка
«Важный». Может быть значение «1» или «0»
Параметр albumRequestVar, введенный в
сниппет GalleryAlbums. Значение по
умолчанию - galAlbum
Ссылка на изображение, определенная в
сниппете GalleryAlbums
Когда Вы используете подстановщик изображения в шаблоне как ресурс для метки изображения, он
не подчиняется свойствам пиктограммы, описанным в сниппете. Но не переживайте, Вы можете
добавить свойства самостоятельно, и они фактически станут вызовом для phpthumb. Допустим, Вы
хотите создать пиктограмму с размерами 240x160, увеличением и кадрированием. Для этого
сделайте следующее:
<img src="
[[+image]]&w=240&h=160&zc=1"alt="[[+name]]
"/>
Сниппет «GalleryItem (Элемент галереи)»
Сниппет GalleryItem отображает единичный элемент галереи.
Свойства
Имя
id
toPlaceholders
toPlaceholdersPrefix
tpl
albumTpl
albumSeparator
Описание
ID элемента для отображения
Если верно, установит
свойства элемента в
подстановщики. Если
неверно, использует свойство
tpl для вывода чанка
По желанию. Добавит
префикс к подстановщику,
установленному сниппетом.
Работает только тогда, когда
значение подстановщика
верно
Чанк для использования, если
значение toPlaceholders
неверно
Имя чанка для каждого
альбома, включенного в
список элемента
Сепаратор для каждого
Значение по умолчанию
1
galitem
galItem
galItemAlbum
,
albumRequestVar
tagTpl
tagSeparator
tagSortDir
tagRequestVar
thumbWidth
thumbHeight
thumbZoomCrop
thumbQuality
thumbFar
thumbProperties
imageWidth
imageHeight
imageZoomCrop
imageQuality
imageFar
imageProperties
альбома, включенного в
список элемента
Запрос, используемый при
связке альбомов
Имя чанка для каждого
дескриптора, включенного в
список элемента
Сепаратор для каждого
дескриптора, включенного в
список элемента
Направление, в котором
нужно сортировать
дескрипторы, включенные в
список элемента
Запрос, используемый при
связке дескрипторов
Максимальная ширина
полученной пиктограммы, в
пикселях
Максимальная высота
полученной пиктограммы, в
пикселях
Использовать или нет
увеличение и кадрирование
для пиктограммы
Качество пиктограммы.
Может быть от 0 до 100
Значение "far" для phpThumb
пиктограммы, для увеличения
с соотношением сторон
JSON параметры для ввода в
phpThumb в качестве свойств
пиктограммы.
Максимальная ширина
полученного изображения
Максимальная высота
полученного изображения
Использовать или нет
увеличение и кадрирование
для изображения
Качество изображения от 0 до
100
Значение "far" для phpThumb
изображения, для увеличения
с соотношением сторон
JSON параметры для ввода в
phpThumb в качестве свойств
изображения.
Подстановщики по умолчанию
galAlbum
galItemTag
,&nsbp;
DESC
galTag
100
100
1
90
С
500
500
0
90
С
Когда значение toPlaceholders установлено на «1», GalleryItem автоматически устанавливает
подстановщики для этого элемента. По умолчанию в них есть префикс 'galitem', но Вы можете его
изменить в параметре toPlaceholdersPrefix. Вот список этх подстановщиков:
Имя
name
filename
description
mediatype
createdon
createdby
active
albums
tags
url
Описание
Имя элемента
Имя файла элемента. Оно будет зависимо от
пути, который обычно можно обозначить
как assets/components/gallery/files/
(массивы/компоненты/галерея/файлы)
Описание элемента
Медиатип элемента. На данный момент, это
просто 'image' (изображение)
Отметка времени, в которое был создан
данный элемент
ID пользователя, создавшего данный
элемент
Показывает, активен ли элемент. Может
быть со значением «1» или «0».
Список альбомов, содержащих данный
элемент
Список меток, связанных с данным
элементом
Если указан, URL-адрес элемента
Чанк «GalleryItem(Элементгалереи)»
В приложении задействованы три чанка. Их соответствующие параметры в Gallery:



tpl – чанк для использования, если значение toPlaceholders равно «0»
albumTpl – чанк для каждого из альбомов, перечисленных в элементе
tagTpl - чанк для каждого из дескрипторов, перечисленных в элементе
Примеры
Отображает элемент с ID 12, но только, если он существует:
[[!GalleryItem? &id=`12`]]
[[!+galitem.image:notempty=`
Albums:
Tags:
`]]
Отображает элемент с ID 23, но с использованием чанка под названием «Фото»:
[[!GalleryItem? &id=`23` &toPlaceholders=`0` &tpl=`Photo`]]
Отображает элемент с ID 432 с использованием чанка под названием «Фото», но разделяет
дескрипторы, связанные с ним, вертикальной линией ("|"):
[[!GalleryItem? &id=`432` &toPlaceholders=`0` &tpl=`Photo` &tagSeparator=`
| `]]
Чанк «GalleryItem's albumTpl»
Чанк, используемый для каждого альбома, связанного с элементом, извлекаемым сниппетом
GalleryItem при помощи свойства &albumTpl.
Значение по умолчанию
<span class="gal-item-album"><a 1href="
[[~[[*id]]]]?[[+albumRequestVar]]=[[+id]]">[[+name]]
</a></span>
Доступные подстановщики
Имя
id
name
parent
description
createdon
createdby
rank
active
prominent
albumRequestVar
GalleryItemPagination
Описание
ID альбома
Название альбома
Родительское ID альбома. Значение по
умолчанию «0»
Описание альбома
Отметка времени, в которое был создан
данный альбом
ID пользователя, создавшего данный альбом
Ранг или порядок, в котором сортируются
альбомы
Есть ли у данного альбома отметка
«Активный». Может быть значение «1» или
«0»
Есть ли у данного альбома отметка
«Важный». Может быть значение «1» или
«0»
Параметр albumRequestVar, введенный в
сниппет GalleryAlbums. Значение по
умолчанию - galAlbum
Предлагает подстановщики для базовой навигации (предыдущий/следующий) при единичном
отображении элемента галереи сниппетом GalleryItem.
Свойства
Сниппет GalleryItem «Нумерация страниц» использует следующие свойства:
Имя
curItem
checkForRequestVar
getParam
album
checkForRequestAlbumVar
albumRequestVar
Описание
Значение по умолчанию
ID текущего изображения.
1, or an url parameter
Его можно превзойти URL
параметром
Превосходить или нет curItem 1
(текущий URL элемента)
URL параметром, указанным
в свойстве getParam
URL параметр для
galItem
использования в
checkForRequestVar
ID или название альбома
1
Превосходить или нет curItem 1
(текущий URL элемента)
URL параметром, указанным
в свойстве albumRequstVar
URL параметр для
galAlbum
использования в
checkForRequestAlbumVar
Подстановщики
GalleryItemPagination устанавливает подстановщики для текущего, предыдущего, следующего,
первого и последнего элемента в альбоме. Вы можете найти пространство имён в приведенной ниже
таблице. Вы можете использовать те же поля, что и в GalleryItem placeholders, минус альбом и
метки.
Имя
galitem.cur.*
galitem.prev.*
galitem.next.*
galitem.first.*
galitem.last.*
Описание
Пространство имени подстановщика для
текущего элемента альбома
Пространство имени подстановщика для
предыдущего элемента альбома
Пространство имени подстановщика для
следующего элемента альбома
Пространство имени подстановщика для
первого элемента альбома
Пространство имени подстановщика для
последнего элемента альбома
Примеры подстановщиков
Ниже Вы можете найти некоторые обычные подстановщики для GalleryItemPagination, которые
можно использовать в Вашем файле шаблона/ресурсе:
Имя
galitem.cur.id
galitem.prev.id
galitem.next.id
galitem.first.id
galitem.last.id
galitem.next.filename
galitem.cur.description
Описание
Подстановщик для текущего ID элемента
альбома
Подстановщик для предыдущего ID
элемента альбома
Подстановщик для следующего ID элемента
альбома
Подстановщик для первого ID элемента
альбома
Подстановщик для последнего ID элемента
альбома
Имя файла следующего элемента
Описание текущего элемента
Примеры GalleryItemPagination
Отобразите базовую навигацию для элемента GalleryItem и используйте предыдущий и следующий
подстановщики.
Создайте сниппет 'GalleryItemPagination'
Прежде всего, создайте сниппет. Назовите его 'GalleryItemPagination' и сохраните.
<!--?php
// First instantiate the Gallery package
$modx--->addPackage('gallery',$modx->getOption('gallery.core_path',$config,$modx>getOption('core_path').'components/gallery/').'model/');
$curItem= $modx->getOption('curItem',$scriptProperties,1);
if($modx->getOption('checkForRequestVar',$scriptProperties,true)) {
$getParam= $modx->getOption('getParam',$scriptProperties,'galItem');
if(!empty($_REQUEST[$getParam])) { $curItem= (int)$_REQUEST[$getParam]; }
}
if(empty($curItem)) return'';
$album= $modx->getOption('album',$scriptProperties,1);
if($modx->getOption('checkForRequestAlbumVar',$scriptProperties,true)) {
$albumRequestVar= $modx>getOption('albumRequestVar',$scriptProperties,'galAlbum');
if(!empty($_REQUEST[$albumRequestVar])) $album= $_REQUEST[$albumRequestVar];
}
// We pass the album name/ID to an &album property and find the gallery object
if(!is_int($album)) {
$gallery= $modx->getObject('galAlbum',array('name'=> $album));
if($galleryinstanceofgalAlbum)
$album= $gallery->get('id');
}
$c= $modx->newQuery('galAlbumItem');
$c->innerJoin('galItem','Item');
$c->where(
array(
'album'=> $album,
)
);
$c->select(
array(
'galAlbumItem.*',
'Item.*',
)
);
$c->sortby('rank','asc');
$collection= $modx->getCollection('galAlbumItem',$c);
$items= array();
foreach($collectionas$i) {
$items[] = $i->toArray();
}
$continue= true;
$i= 0; $prev= array(); $cur= array(); $next= array();
while($continue) {
$prev= $cur;
$cur= $items[$i];
if($cur['id'] == $curItem) {
$next= $items[$i+1];
$continue= false;
}
$i++;
}
$first= $items[0];
$last= $items[count($items)-1];
$phs['galitem.cur.'] = $cur;
$phs['galitem.prev.'] = $prev;
$phs['galitem.next.'] = $next;
$phs['galitem.first.'] = $first;
$phs['galitem.last.'] = $last;
$modx->setPlaceholders($phs);
return'';
Теперь настройте Ваш подстановщик для навигации:
[[!GalleryItemPagination? &album=`1`]]
[[!If? &subject=`[[!+galitem.prev.id]]`&operator=`isnotempty` &then=`
<a id="previmg"
href="[[++site_url]]?id=[[*id]]&galItem=[[!+galitem.prev.id]]&galAlbum=1&galTag=">p
revious image</a>`]]
[[!If? &subject=`[[!+galitem.next.id]]`&operator=`isnotempty` &then=`
<a id="nextimg"
href="[[++site_url]]?id=[[*id]]&galItem=[[!+galitem.next.id]]&galAlbum=1&galTag=">n
ext image</a>`]]
`]]
Чанк GalleryItem's tpl
Этот чанк используется, когда значение &toPlaceholders равно «0» на сниппете GalleryItem.
Значение по умолчанию
<a href="
[[+url:is=``:then=`[[+image]]`:else=`[[+url]]`]]
">
<img src="
[[+thumbnail]]"alt="[[+name]]
"/>
</a>
Доступные подстановщики
Имя
name
filename
description
mediatype
createdon
createdby
active
albums
tags
Описание
Имя элемента
Имя файла элемента. Оно будет зависимо от
пути, который обычно можно обозначить
как assets/components/gallery/files/
(массивы/компоненты/галерея/файлы)
Описание элемента
Медиатип элемента. На данный момент, это
просто 'image' (изображение)
Отметка времени, в которое был создан
данный элемент
ID пользователя, создавшего данный
элемент
Показывает, активен ли элемент. Может
быть со значением «1» или «0»
Список альбомов, содержащих данный
элемент
Список меток, связанных с данным
элементом
Плагин Gallerriffic
Этот плагин позволяет быстро выводить галерею и отображать изображения в ней. Плагин требует
загруженного на странице jQuery для корректной работы.
Использование
Просто добавьте этот плагин в сниппет Gallery:
[[!Gallery? &plugin=`galleriffic`]]
Доступные свойства
Galleriffic превзойдет следующие свойства в сниппете Gallery. Если Вы хотите их превзойти, просто
введите вместо начальных свойств, свойства с префиксом «galleriffic».
Имя
Превосходит
Описание
gallerifficThumbTpl
thumbTpl
Чанк метки для
каждого из элементов
Чанк-контейнер, в
Galleriffic
который заключается
содержание
Ширина пиктограммы 75
Высота пиктограммы 75
gallerifficContainerTpl containerTpl
gallerifficThumbWidth thumbWidth
gallerifficThumbHeight thumbHeight
Значение по
умолчанию
GallerifficItemThumb
Так же Galleriffic выпускается с несколькими собственными свойствами. Вы можете ввести эти
свойства, чтобы превзойти настройки по умолчанию Gallery.
Имя
numThumbs
navigationWidth
enableTopPager
enableBottomPager
maxPagesToShow
renderSSControls
renderNavControls
enableHistory
autoStart
defaultTransitionDuration
thumbsContainerSel
imageContainerSel
captionContainerSel
Описание
Значение по умолчанию
Количество отображаемых 15
пиктограмм на страницу
Ширина навигационной
300px
панели в пикселях
Показывать или нет верхнюю 1
нумерацию страниц
Показывать или нет нижнюю 1
нумерацию страниц
Максимальное число страниц 7
для отображения
Визуализировать или нет
1
элементы управления слайдшоу
Визуализировать или нет
1
навигационные элементы
управления
Нужно ли включать историю 0
Начинать или нет
0
автоматический показ слайдшоу
Продолжительность перехода 500
в миллисекундах
CSS-селектор для
#gal-gaff-thumbs
контейнера, содержащего
пиктограммы
CSS-селектор для
#gal-gaff-slideshow
контейнера, содержащего
основное изображение
CSS-селектор для
#gal-gaff-caption
контейнера, содержащего
controlsContainerSel
loadingContainerSel
playLinkText
pauseLinkText
prevLinkText
nextLinkText
prevPageLinkText
nextPageLinkText
титры
CSS-селектор для
#gal-gaff-controls
контейнера, содержащего
навигационные элементы
управления
CSS-селектор для
#gal-gaff-loading
контейнера, содержащего
экран загрузки
Текст, используемый для
ссылки на проигрывание
слайд-шоу
Текст, используемый для
ссылки на паузу в слайд-шоу
Текст, используемый для
ссылки на предыдущее фото
в слайд-шоу
Текст, используемый для
ссылки на следующее фото в
слайд-шоу
Текст, используемый для
ссылки на предыдущую
страницу слайд-шоу
Текст, используемый для
ссылки на следующую
страницу слайд-шоу
Примеры
Используйте плагин Galleriffic, но отобразите только 10 меток на страницу:
[[!Gallery?
&toPlaceholder=`gallery`
&album=`My Photos`
&plugin=`galleriffic`
&numThumbs=`10`
]]
Спрячьте нумерацию страниц и покажите элементы управления слайд-шоу, но начните слайд-шоу
автоматически:
[[!Gallery?
&toPlaceholder=`gallery`
&album=`My Photos`
&plugin=`galleriffic`
&renderNavControls=`0`
&renderSSControls=`0`
&autoStart=`1`
]]
Плагин Gallery «Slimbox»
Этот плагин позволяет быстро выводить приложение Gallery и отображать пиктограммы
изображений с простым полупрозрачным наложением, когда Вы нажимаете на пиктограмму.
Используется Slimbox2 plugin для jQuery.
Использование
Просто добавьте этот параметр для сниппета Gallery:
[[!Gallery?
&plugin=`slimbox`]]
Доступные свойства
Slimbox выпускается с несколькими собственными свойствами. Вы можете ввести эти свойства,
чтобы превзойти настройки по умолчанию Gallery.
Имя
slimboxUseCss
Описание
Значение по умолчанию
Со значением «1» 1
будет
использовать
предоставленный
слимбокс CSSфайла
slimboxCss
Если значение
{slimbox_url}packages/slimbox/css/slimbox2.css
slimboxUseCss
равно 1, то
загрузит CSSфайл с данным
свойством. Если
значение не
установлено,
будет
использовано
предоставленное
свойство
slimboxRenderJsOnStartu Загрузите Slimbox 1
p
JS в заголовке
страницы. Если
значение «0», то
загрузится внизу
страницы
slimboxLoadJQuery
Если установлено 0
slimboxJQueryUrl
slimboxJsTpl
значение «1», то
добавит JQuery в
загрузку
страницы.
Оставьте «0»,
если Вы уже
загрузили JQuery
(рекомендуется)
Если значение
https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.
slimboxLoadJQuer js
y равно «1»,
загрузит файл
jQuery JS с
данного URLадреса
Чанк файла
slimbox/js
шаблона для
slimbox JS. Вы
можете
пропустить эту
настройку в
большинстве
случаев
Ниже представлены настройки, влияющие на поведение Slimbox
Имя
loop
overlayOpacity
overlayFadeDuration
resizeDuration
resizeEasing
Описание
Значение по умолчанию
Если установлено значение 0
«1», позволяет пользователю
перемещаться между первым
и последним изображением в
галерее Slimbox, если
существует более одного
изображения для показа
Уровень прозрачности
0.8
фонового наложения. «1» непрозрачный, «0» полностью прозрачный
Длительность постепенного 400
появления и затухания
анимации наложения в
миллисекундах. Установите
«0» для деактивации данных
эффектов
Длительность анимации
400
изменения ширины и высоты
в миллисекундах. Установите
«0» для деактивации
анимации
Название модификации,
swing
которую Вы хотите
применить для
анимированного изменения
размеров (требуется плагин
initialWidth
initialHeight
imageFadeDuration
captionAnimationDuration
counterText
jQuery Easing для всех
эффектов, кроме
«раскачивания»). Множество
модификаций требует более
длительное время для
выполнения, чтобы все
выглядело красиво, поэтому
так же отрегулируйте опцию
resizeDuration
Начальная ширина блока
наложения в пикселях
Начальная высота блока
наложения в пикселях
Длительность постепенного
появления изображения в
миллисекундах. Установите
«0» для деактивации данных
эффектов и немедленного
появления изображения
Длительность постепенного
появления титров в
миллисекундах. Установите
«0» для деактивации данных
эффектов и немедленного
появления титров
Значение текста. Позволяет
Вам подстраивать,
переводить или
деактивировать текст,
который появляется в титрах
при множественном показе
изображений. Внутри текста
{x} будет заменен текущим
индексом изображения, а {y}
заменит общее количество
изображений. Установите
неверное значение (булево
значение без кавычек) или ""
для деактивации счетчика
250
250
400
400
"Image {x} of {y}"
Примеры
Загрузите Slimbox для альбома с ID 2 и сделайте повторяющийся цикл. Так же, загрузите jQuery:
[[Gallery?
&album=`2`
&plugin=`slimbox`
&loop=`1`
&slimboxLoadJQuery=`1`
]]
Загрузите Slimbox для альбома с ID 2 и поставьте JS и CSS внизу страницы:
[[Gallery?
&album=`2`
&plugin=`slimbox`
&slimboxRenderJsOnStartup=`0`
]]
Настройка Вашей Галереи
Это краткое руководство покажет Вам, как настроить базовую галерею для Вашего сайта, в которой
будет отображаться список альбомов, а когда альбом будет выбран, будут отображаться картинки
этого альбома. После клика по пиктограмме, показывается увеличенная версия альбома.
Загрузка Ваших фотографий
Вам нужно показать несколько фото, поэтому их нужно загрузить перед настройкой дисплея:





В верхнем меню менеджера перейдите в Компоненты->Галерея
Нажмите «Создать альбом»
Введите имя и описание Вашего альбома
Поставьте галочку в поле «Активный»
Нажмите «Сохранить»
Теперь – правый клик, в открывшемся меню выберите пункт «Обновить альбом». Сейчас выберите
«Единичная загрузка» или «Пакетная загрузка» и загрузите несколько фотографий.
Отображение Ваших фотографий
Прежде всего, введите данный код в Ваш ресурс:
<div style="float: right">
<h2>Galleries</h2>
<ul>
[[!GalleryAlbums]]
</ul>
</div>
<h2>Item</h2>
[[!GalleryItem]]
[[!+galitem.image:notempty=`
<div class="image">
<a href="
[[+galitem.image]]
"><img class="
[[+galitem.imgCls]]
" src="
[[+galitem.image]]
" alt="
[[+galitem.name]]
" /></a>
<br />Albums:
[[+galitem.albums]]
<br />Tags:
[[+galitem.tags]]
</div>
`]]
<hr />
[[!Gallery? &album=`1` &toPlaceholder=`gallery`]]
<h1><a href="
[[~[[*id]]
&galAlbum=`
[[+gallery.id]]`]]
">
[[+gallery.name]]
</a></h1>
<p>
[[+gallery.description]]
</p>
[[+gallery]]
Готово! Теперь все работает. Давайте рассмотрим каждую часть отдельно.
Создание списка альбомов галереи
Итак, для построения списка альбомов используем следующий код:
<div style="float: right">
<h2>Galleries</h2>
<ul>
[[!GalleryAlbums]]
</ul>
</div>
Мы запустили сниппет GalleryAlbums. Теперь, на нашем HTML мы перенесли его вправо – Вам
этого делать не нужно. Мы сделали это для сохранения "недвижимости" экрана. Готово. Сейчас
GalleryAlbums будет отображать список альбомов и по ним можно кликать.
Отображение выбранных альбомов
Теперь, когда Вы кликнули на альбоме, нужно, чтобы отображались изображения из этого альбома.
К счастью, сниппет Gallery работает в тандеме со сниппетом GalleryAlbums, поэтому нужно сделать
только следующее:
[[!Gallery? &album=`1` &toPlaceholder=`gallery`]]
<h1><a href="
[[~[[*id]]
&galAlbum=`
[[+gallery.id]]`]]
">
[[+gallery.name]]
</a></h1>
<p>
[[+gallery.description]]
</p>
[[+gallery]]
Мы установили галереи для начального отображения альбома с ID 1. Если нажать на ссылку
сниппета GalleryAlbums, ее значение превзойдет предыдущее, но сейчас нам нужно начать с альбома
№ 1. Так же, мы установили это значение для подстановщика с названием 'gallery', поэтому можем
вывести некоторую информацию об альбоме, например, его название и описание.
Показывать увеличенное изображение
Теперь у нас есть пиктограммы, но мы хотим, чтобы при клике по ней, показывалось увеличенное
изображение. Все просто: сниппет GalleryItem сделает это автоматически.
[[!GalleryItem]]
[[!+galitem.image:notempty=`
<div class="image">
<a href="
[[+galitem.image]]
"><img class="
[[+galitem.imgCls]]
" src="
[[+galitem.image]]
" alt="
[[+galitem.name]]
" /></a>
<br />Albums:
[[+galitem.albums]]
<br />Tags:
[[+galitem.tags]]
</div>
`]]
Сниппет GalleryItem ищет параметр "galItem" в URL-адресе. Когда он его найдет, загрузит
изображение из альбома. Сниппет Gallery использует его для URL-адресов для пиктограмм. Далее,
мы выводим некоторые метаданные, такие как имя, альбомы, метки и ссылку на них.
Теперь мы закончили! Можете немедленно приступать к использованию Gallery!
Заключение
Есть еще множество функций этого приложения, но мы надеемся, что это краткое руководство дало
Вам представление о том, как все элементы взаимодействуют друг с другом.
Пользовательский TV для GalleryItem
Приложение Gallery выпускается с пользовательским типом ввода и вывода для TV (переменные
шаблона) в версии Revolution. Это позволяет Вам получать классное размещение изображений в
Вашем ресурсе. Вы можете кадрировать, изменять размер, вращать изображения и использовать
множество других функций при помощи TV:
Настройка TV
Сначала нужно настроить TV. Создайте ее:
1.
2.
3.
4.
5.
загрузите и создайте страницу переменных шаблона и дайте имя вашей TV
выберите тип ввода 'galleryitem'
выберите тип вывода 'galleryitem'
назначьте TV для шаблона
сохраните!
Теперь Вы должны видеть Ваш TV в ресурсе с шаблонами, для которых Вы эту переменную
назначили.
Использование TV
Теперь выберите «Выбрать изображение» и укажите альбом в дереве слева. После, выберите фото,
которое хотите использовать – фото загрузится в полном размере в редактор фотографий. Теперь Вы
можете изменять размер (так же кадрировать), вращать фотографию и использовать множество
других функций.
Когда Вы закончите редактирование изображения, поместите метки TV в Ваш контент. Например,
если Ваша переменная называлась “Photo”, поместите в Ваш контент:
[[*photo]]
Теперь приложение автоматически визуализирует изображение и помещает его в нужное место.
GatewayManager
Что такое GatewayManager?
Благодаря GatewayManager Вы сможете сделать Ваш домен доступным для определенного контекста
внутри MODX. Вы даже можете указать ресурс как стартовую страницу, а GatewayManager
обеспечит подстановщик с оригинальным URL (полезно для канонических тегов).
Требования


MODx Revolution 2.0.0-RC-2 или более поздняя версия
PHP5 или более поздняя версия
История
GatewayManager написан Бертом Оостом (Bert Oost, www.oostdesign.com). Простой, но эффективный
компонент для управления доменами и контекстом внутри MODX. Впервые вышел 13 ноября 2011
года.
Загрузка
Это приложение можно загрузить при помощи менеджера задач MODx Revolution (Package
Management) или из базы приложений MODx.
Разработка и отчет об ошибке
GatewayManager хранится и разрабатывается на GitHub. Его можно найти здесь:
https://github.com/bertoost/MODX-GatewayManager
Об ошибках можно сообщать сюда: https://github.com/bertoost/MODX-GatewayManager/issues
Использование
GatewayManager для MODX Revolution полностью автоматизирован. Устанавливая его при помощи
менеджера задач, Вам не нужно выполнять никаких действий, просто укажите домены.
GatewayManager будет доступен ниже пункта меню «Компоненты». Пожалуйста, установите
следующие параметры для каждого контекста.
Внимание! Эти настройки не обязательны для встроенного "web" -контекста MODX . Оставьте их
пустыми.
http_host - The domain without http:// and trailing slash
http_host – домен без http:// завершающий слэш
site_url - The domain including http:// and trailing slash
site_url – домен, включая http:// завершающий слэш
site_start - The id of the default startpage of the context
site_start – ID стартовой страницы контекста по умолчанию
Если Вы хотите использовать канонические теги, примените следующий тег для полной
автоматизации:
[ [!+gateway.canonical:notempty=`<link rel="canonical"
href="[[+gateway.canonical]]" />`]]
Обратите внимание! Для управления множественными доменами, все они должны указывать на одну
и ту же директорию (в которой установлен MODX). Обычно это делают при помощи доменной
системы именования (DNS), но внутри Вашего хостинга могут быть свои особенности. Если Вы в
чем-то неуверенны, обратитесь в Ваш хостинг. Если не все домены указывают на одну директорию,
GatewayManager работать не будет.
getFeed
Что такое getFeed?
Это простой сниппер для поиска RSS фидов и повтора фрагментов фида с помощью Chunk.
Системные требования


MODx Revolution 2.0.0-RC-2 или более новая версия
PHP5 или более новая версия
История разработки
getFeed был написан Jason Coward как простой модуль для чтения фидов. Опубликован 11 Июня
2010 года.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя [Package Management],
или из хранилища дополнений MODx по ссылке http://modxcms.com/extras/package/690
Разработка и отчеты об ошибках
getFeed разрабатывается и распространяется GitHub и может быть загружен по ссылке
http://github.com/splittingred/getFeed
Ошибки могут быть зарегистрированы по ссылке http://github.com/splittingred/getFeed/issues
Использование
getFeed предназначен для размещения сниппета в контенте и фильтрации 'url' .
[[!getFeed? &url=`http://path.com/to/my/rss.feed.rss`]]
Свойства:
Наименование
url
tpl
limit
offset
totalVar
toPlaceholder
Описание
Значение “по
умолчанию”
Извлекаемый из фида URL
Название фрагмента кода, служащего как item tpl. Незаполненное
будет использоваться под массив данных.
Максимальное количество возвращаемых элементов; если 0 0
неограниченно
Номер элемента, от которого начинается отсчет. Отсчет ведется
0
от 0.
Название ячейки для хранения всех номеров элементов в фиде.
total
Для совместимости с getPage.
Если установлено – будет использоваться в качестве исходных
данных для заполнения. Если нет – на выходе будет
непосредственно результат.
Чанк Плэйсхолдер
Т.к. различные фиды возвращают различные placeholder, лучше использовать getFeed без 'tpl'
параметра. Это даст вам массив данных и их значений. Эти 'indexes', или ключи каждого элемента в
массиве, могут использоваться как плэйсхолдер.
Наиболее распространенные плэйсхолдеры:






title – заголок поста
link – прямая ссылка на пост
description – описание поста
pubdate – дата публикации поста
guid - GUID поста
author – автор поста



category – любые теги или ассоциации с постом
summary – краткое резюме поста
date_timestamp – временная метка поста

Twitter Feed



Добавлено Shaun McCormick, изменено Mark Hamstra 20 октября 2011 (просмотр изменений)




Добавление Твиттера на сайт
Эта инструкция покажет вам как добавить фиды Твиттера на ваш сайт с помощью getFeed
Добавление вызова getFeed
После загрузки и инсталляции getFeed раместите сниппет на странице в том месте. Где
планируете трансляцию фида Твиттера:








<ul>
[[!getFeed?
&url=`http://twitter.com/statuses/user_timeline/123456789.rss`
&tpl=`twitterFeedTpl`
&limit=`3`
]]
</ul>


Убедитесь, что введен именно ваш ник или Twitter ID/
Таким образом мы вызовем данный сниппет без кэширования и укажем на новостную ленту
Twittera.
Нам нужно только три последних твита. Для этого создайте 'twitterFeedTpl чанк и добавьте в
него:














<div class="tweet">
<p>
[[+description]]
<br /><a href="
[[+link]]
">
[[+pubDate:ago]]
</a> via
[[+twitter.source]]
</p>
</div>
Мы сделали это! Наш Твиттер фид рабоатет. Обратите внимание, у нас есть обратный фильтр,
формат которого "X минут, X часов" назад.
Заметьте. Что плэйсхолдер, используемый для даты (так же как и другие плэйсхолдеры), может
бытьзависимым от фида. Проверьте исходный XML код фида, чтобы убедиться, что дата сохранена
и используется.
getPage
Что такое getPage?
Основное назначение сниппета – презентация, навигация, опциональное кэширование,
многостраничный просмотр из различных Элементов, что подразумевает ограничении и изменение
свойств для ограничения набора данных, размещение плейсхолдера, с помощью которого getPage
возвращать общее число элементов страницы.
Системные требования


MODx Revolution 2.0.0-beta5 или более новая версия
PHP5 или более новая версия
История разработки
getPage написан Jason Coward (opengeek) и опубликован 19 Марта 2010
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя Package Management,
или из хранилища дополнений MODx по ссылке http://modx.com/extras/package/getpage
Этот сниппет ничего не выполняет самостоятельно, и зависит от других сниппетов для возращения
выходных данных для определенной страницы (или массива данных в виде определенного набора). К
примеру, такие сниппеты как getResources, getFeed, и Archivist могут быть объединены с помощью
getPage.
Использование
getPage сниппет может быть вызван с помощью следующего тега:
[[!getPage? &elementClass=`modSnippet` &element=`getResources`]]
Не кэшируйте
getPage не должен вызваться некэшируемым в кэшируемом ресурсе. Лучше всего вызывать getPage
с некэшируемым маркером “!”, а кеширование обеспечить с помощью внешних ресурсов. Это же
правило применяется для представления плейсхолдера с помощью свойства pageNavVar (page.nav
по умолчанию), эти выходные данные некэшируются в кэшируемом контенте страницы.
Необходимые свойства
Необходимо задать свойства элемента, а также все дополнительные свойства тех элементов, которые
вызываются с помощью getPage.
Доступные свойства
Обязательные свойства
Имя
Описание
Значение по умолчанию
element Имя modElement для обработки выходных данных.
Свойства страницы
Имя
Число результатов на странице, может быть отменено с
помощью $_REQUEST. В версии 1.2.2+, $_GET данные
обрабатываются до $_REQUEST
Отступ, или стартовое положение записи в пределах
массива данных для обработки результатов текущей
offset
страницы, следует учитывать результаты, ограничения и
параметры VarKey.
Отображаемая страница, определяется значением
page
_REQUEST , переменная задается VarKey.
pageCount
Общее число страниц
Маркер свойств, отображает текущую страницу
согласно $_REQUEST, и устанавливает значение
pageVarKey
страницы. В версии 1.2.2+, $_GET данные
обрабатываются до $_REQUEST
Маркер плэйсхолдера, содержащего общее число
totalVar
записей в рамках массива, разделяемого на страницы
Общее число записей, разбиваемых на страницы (см.
total
totalVar )
firstItem
1-based индекс первого отображаемого элемента на
limit
Значение “ по Доступно в
умолчанию”
версии
Описание
10
0
Вычисляется
Вычисляется
page
total
Вычисляется
Вычисляется
текущей странице.
1-based индекс последнего отображаемого элемента на
lastItem
текущей странице.
Дополнительный лимит количества результатов для
pageOneLimit первой страницы, может отличаться от основного
лимита.
Вычисляется
1.2.2-pl
Навигационные свойства таблицы
Имя
Значение “по
умолчанию”
Описание
Максимальное число ссылок страницы, отображаемое при
обработке меню навигации страницы.
Маркер плейсхолдера, устанавливающегося вместе с меню
pageNavVar
навигации.
pageLimit
5
page.nav
Свойства шаблона навигации по странице
Вы можете не изменять свойства данного tpl непосредственно из сниппета, т.к. последовательность,
Если вы хотите изменить данные значения по умолчанию, используйте следующие действия:






Перейдите на закладку Elements, откройте структуру сниппетов и найдите getPage, откройте е
Вы увидите закладку "Element Properties". Откройте ее.
Создайте новый набор свойств, используя кнопку Add property set, в открывшемся окне отмет
Назовите и сохраните набор свойств.
Теперь вы можете изменить значения свойств, которые не будут удалены при обновлении ПО
Привяжите ваш собственный набор свойств к сниппету:
[ [!getPage@PropertySetName? &element=`getResources` &parents=`3` ...]]
Имя
Описание
pageNavOuterTpl tpl с контентом для контроля слоя с элементами навигации.
pageNavTpl
tpl с контентом, представляющим собой одну страницу элементов
навигации.
pageActiveTpl
tpl с контентом,
[ [+first]][ [+prev
<li><a[ [+title]] h
<li[ [+activeClasse
href=""></a></li>
pageFirstTpl
представляющим собой текущую страницу элементов навигации.
tpl с контентом,
<li class="control"
pageLastTpl
представляющим собой первую страницу элементов навигации.
tpl с контентом,
<li class="control"
pagePrevTpl
представляющим собой последнюю страницу элементов навигации.
<li class="control"
tpl с контентом,
pageNextTpl
представляющим собой предыдущую страницу элементов
навигации..
tpl с контентом,
[+href]]"><<<
<li class="control"
[+href]]">>><
представляющим собой следующую страницу элементов навигации.
Свойства кэширования
Имя
Описание
Отображается уникальный URI, если контент
cache
каждой страницы кэшируется (это не тот же
параметр что и pageVarKey).
Маркер, идентифицирующий xPDOCache
cache_resource_key
запрос, используемый для кэширования
контента страницы.
Маркер, идентифицирующий xPDOCache
cache_resource_handler производный класс, используемый для
запроса.
Отображает время хранения каждого элемента
в КЭШе ,в секундах.
cache_expires
Значение “по умолчанию”
Значение настроек
кэширования или false
Значение настроек
cache_resource_key setting, или
default
Значение настроек
cache_resource_handler setting,
или xPDOFileCache
Значение настроек
0 означает хранение в КЭШе до удаления
вручную, если нет дополнительных настроек, cache_expires setting, или 0
данные идентифицируются по
предустанвленному значению
cache_resource_key .
Дополнительные свойства
Имя
Описание
Вторичный classname modElement, который нужно вызвать с
elementClass помощью getPage и использовать как выходные данные, например
modChunk или по умолчанию modSnippet
Исполняемый элемент namespace, присоединяемый к плейсхолдеру
namespace
для выполнения специфических запросов сниппетом getPage.
toPlaceholder
Обозначает элемент, не посылаемый за пределы getPage,
Значение “по
умолчанию”
modSnippet
размещающий плейсхолдер, содержащий контент, необходимый
getPage в данный момент. Это позволяет getPage кэшировать
плейсхолдер с выходными данными словно это присланный элемент, и
использовать его из кэша
Примеры
Страница со списком дочерних Resourceы текущих Resources, используя чанк вызываемый
'myRowTpl'.
[[!getPage? &element=`getResources` &parents=`[[*id]]` &tpl=`myRowTpl`]]
<div class="pageNav">
[[!+page.nav]]
</div>
Страница с ресурсами до ресурса с ID '5', кроме ресурса 10, созданная с использованием вызова
'myRowTpl':
[[!getPage? &element=`getResources` &parents=`5` &resources=`-10`
&tpl=`myRowTpl`]]
<div class="pageNav">
[[!+page.nav]]
</div>
getRelated
getRelated – сниппет для MODX Revolution, помогающий создать список связанных ресурсов.
Он помогает настроить алгоритм, с помощью которого такое необходимое свойство как &fields
позволит вам определить поля для сравнения и определения важности каждого из них.
Ссылки и история создания
Версия
Дата
выпуска
Особенности
Добавлены &stopwords свойства, улучшена обработка
множественных вызовов на странице, теперь с поддержкой
русского языка.
21 января Добавлено &hideContainers свойство. Предотвращается появление
1.1.2-pl
2012
ошибки E_NOTICE. Устранены ошибки в работе &includeDeleted.
7 июня
1.2.0-pl
2012
10 декабря
2011
4 декабря
1.1.0-pl
2011
Исправлены ошибки в &parents. Исправлена ошибка в &fields, изза которой можно было выбрать только одно поле.
В настройки результатов добавлены TV свойства, а также новое
свойство &exclude для скрывания определенных результатов.
Исправлена ошибка с фильтрацией текущих ресурсов, теперь
10 ноября поиск нечувствителен к регистру букв, исправлены ошибки в
1.0.2-pl
2011
свойствах ignoreHidden и ignoreUnpublished. Сделан более
понятным процесс отладки.
1.0.1- 26 октября Исправлены ошибки, возникающие при работе со свойствами tpl
pl(2)
2011
&parents и &fields
13 октября Первая публикация. Версии до 1.0 публиковались только для
1.0.0-pl
2011
HandyMan. Спонсирована бета-версия.
1.1.1-pl
Публичный доступ на at Github: https://github.com/Mark-H/getRelated
Жалобы и предложения принимаются здесь: https://github.com/Mark-H/getRelated/Issues
Обсуждение на форуме: http://forums.modx.com/thread/71009/getrelated-automatically-listing-relatedresources-for-revolution
Разработан Mark Hamstra для Vierkante Meter.
Как работает getRelated (обязательно к прочтению)
Для правильного использования свойств и получения нужного результата важно понимать, как
работает getRelated.
Нижеприведенные шаги собирают вместе необходимые ресурсы.
1. getRelated находит ресурс, который будет использоваться в качестве базового, обычно
это текущий ресурс. Он использует поля, определенные вами (&fields) и разделяет их
на части для определения уникальных слов.
2. Стоп слова, используемые в лексиконе, отфильтровываются, остаются только слова,
действительно имеющие смысл.
3. Далее используются связанные слова в запросе к базе данных, ограниченные
контекстом, а также источники, заданные вами и содержащие необходимые ресурсы.
Это образец для сравнения. Это работает для входных полей и переменных шаблона
на основе заданных вами свойств полей.
4. Пример работает на основе коэффициента веса, который вы определите в свойствах
поля (&fields) для вычисления ранга каждого ресурса.
5. Результаты сортируются в зависимости от ранга (с самым высоким рангом - первые) и
затем выводится на экран в соответствии с tpl свойствами.
6.
Свойства, приведенные ниже, могут быть использованы для настройки одного или более шагов,
описанных выше. В таблице, приведенной ниже, вы описания в соответствии с вышеприведенными
пунктами.
Свойства сниппета
Свойства
Пункт
(пункты)
resource
1
fields
1, 3, 4
defaultWeight
4
returnFields
5 (3)
returnTVs
5
parents
3
parentsDepth
3
exclude
3
contexts
3
includeUnpublished 3
includeHidden
3
Описание
Значение “по
умолчанию”
Определяет ID ресурса для поиска связанных
ресурсов (текущий или пустой) относительно
current
текущего ресурса
Список fieldname:weight для сравнения,
использующий в качестве разделителя запятую.
pagetitle:3,
Используется приставка TV с "tv.". Не
используйте контент, если не хотите снизить
introtext:2
производительность. Пример использования:
pagetitle:3,tv.MyTags:7,tv.MySubjects:15,introtext:2
Коэффициент веса (целое число) для
5
присваивания полям, не имеющим “веса”.
Поле ресурсов, (используйте &returnTVs для
pagetitle,longtitle,
шаблонных переменных) для включении
выходные данные. По умолчанию есть доступ к
introtext
ID ресурсов.
Список TV имен (разделяются запятой) для
вставки в результаты. Они не используются для
сравнения, но извлекаются при возврате
результатов ТОП-ранга. Не используется
приставка "tv." подобно &fields.
Список родительских источников для поиска
связанных ресурсов, разделитель – запятая.
Глубина поиска для родительских источников.
10
Список исключаемых из результатов ID
ресурсов, разделитель – запятая.
.
Контекстный список, используемый для поиска,
current
разделитель – запятая.
[1|0] использует непубликуемые ресурсы в
0
результирующем массиве.
[1|0] Использует в меню результирующего
массива ресурсы, отмеченные как скрытые. “0” 1
для исключения..
[1|0] Добавлено в версии1.2.0.
hideContainers
3
При установленной единице исключает ресурсы 0
помеченные "isfolder" как true, т.е. те, которые
есть.
Добавлено в версии1.2.0
stopwords
2
limit
5
fieldSample
3
fieldSort
3
fieldSortDir
3
tvSample
3
tvSort
3
tvSortDir
3
Список слов отфильтрованных по значению,
вверху списка – стоп-слова, разделитель –
запятая.
Число связанных ресурсов, выводимых на экран.
Число ресурсов, собранных для образца
сравнения, основывается на поле ресурсов.
Может иметь огромное влияние на
производительность, поэтому, если загрузка
длится долго, попробуйте уменьшить значение
или подстроить стоп-слова..
Поле ресурсов, собранных для образца
сравнения, используется для объединения
fieldSamplet. (Не сортируйте выходные
связанные ресурсы, только использующиеся
образцом для определения связанных ресурсов!)
Параметры сортировки для fieldSort,
используются при создании образца сравнения.
Число TV результатов для вставки (Внимание:
один ресурс может иметь больше одного
значения в зависимости от свойств поля.) в
образец сравнении, основанный на значениях
TV.
Поле ресурсов для сортировки в TV очереди,
используется совместно с tvSample. (Не
сортируйте связанные выходные ресурсы, только
связанны ресурсы, обозначенные в образце!)
Направление сортировки для tvSort, применяется
в комплектовании образца.
Имя чанка, использующегося как внешний,, или
объединенный, шаблон. [ [+wrapper]]
плейсхолдер будет заполнен отдельными
строчками, разделенными символами,
заданными в rowSeparator (см. ниже). Можно
использовать плейсхолдеры и [ [+wrapper]].
tplOuter
5
<h3>[ [%getrelated.pagesfound?
&namespace=`getrelated` &count=`[
[+count]]`]]</h3>
3
125
createdon
desc
125
createdon
desc
relatedOuter
<ul>
[ [+wrapper]]
</ul>
tplRow
5
Имя чанка, используемого как шаблон строки,
используется для каждого связанного ресурса..
Плейсхолдер, который можно использовать
включенным в поле (&fields) (без TV), точно
relatedRow
также как и в returnFields. ID ресурса всегда
доступно с [ [+id]], ранг (результат вычислений
алгоритма ) как [ [+rank]], номер результата в
виде [ [+idx]].
Чанк по умолчанию (сохраненный как
файл в
core/components/getrelated/elements/chunks/):
<li>
<a href="[ [~[ [+id]]]]" title="[
[+longtitle:default=`[ [+pagetitle]]`]]">
[ [+longtitle:default=`[
[+pagetitle]]`]] ([ [+rank]])
</a>
</li>
noResults
5
rowSeparator
5
debug
Текст или выходные данные, если не найдено
связанных ресурсов. (Совет: вы можете
добавить , что будет выводиться когда нет
результатов: &noResults=``)
Строковый параметр, используемый как
разделитель строк.
[1|0] Включает / отключает режим отладки. Во
включенном виде выдает отладочную
информацию на экран монитора.
"No related pages
found."
\n
0
Использование
Нет никаких причин, чтобы я мог подумать вызвать этот сниппет некэшированным. Еесли вы
запускаете огромный сайт, вызов сниппета некэшируемым поможет повышению
производительноти, причем результат будет настолько значительным, что это просто не нужно.
Этот сниппет обращается к данным ресурсов, и по умолчанию кэш очищается после обновления.
Между обновлениями нет изменений, которые getRelated мог бы хранить. Поэтому НЕ
ВЫЗЫВАЙТЕ ЭТОТ СНИППЕТ НЕКЭШИРУЕМЫМ!
Вы не уверены в том, каким вы вызываете getRelated? Некэшируемый сниппет вызывается с
использованием восклицательного знака: [ [!snippetname]], поэтому нам нужно использовать его
БЕЗ восклицательного знака: [ [snippetname]].
Необходимый минимум для вызова getRelated заключается в использовании тэга:
[[getRelated]]
Такой вызов создает неупорядоченный список, максимум с тремя связанными ресурсами,
базирующимися на на pagetitle и introtext. В дальнейшем вы можете изменить это, используя
свойства the &fields (см. выше) для задействования какого-либо тэга, или категории TV, или другого
поля, которое содержит итоговое значение или ключевые слова.
Оптимизация производительности
Если из-за getRelated появилось снижение производительности, вот несколько предложений /
мыслей на эту тему:
1. Убедитесь, что сниппет вызван кэшируемым! Я не смогу помочь узнать причину снижения
проиводительности, если вы некэшируете этот сниппет.
2. Не используйте поля наподобие контента, т.к. они попросту могут быть очень большими.
3. Возможно, что запрос используемый для создания образца слишком обширный. Могут быть
многочисленные причины и решения на этот счет.
3.1. Еще нет перевода на язык, который вы используете, в результате нет стоп-слов на вашем
родном языке. Очень хороший способ решить эту проблему и помочь другим – переведите
английский словарь сниппета и на ваш язык и пришлите для включения в дополнение. Не переводите
большой список стоп-слов самостоятельно, просто найдите готовый список на заслуживающем
доверие ресурсе.
3.2. Все ваши ресурсы используют похожие слова (название компании, наименования продаваемой
продукции или любимые слова вашего редактора), в результате чего образец был искажен этим.
Если у вас включена отладка (&debug=`1` в сниппете), вы можете увидеть информацию,
соответствующую обработке слов, в результате сможете сделать вывод, все ли идет как надо. Если
причина в этом, вы можете отфильтровать слова добавлением их в "getrelated.stopwords" словарь на
вашем языке. Перейдите: System > Lexicon Management и в выпадающем меню замените "core" на
"getrelated". Если вы не используете английский язык, выберите подходящий язык из
соответствующего выпадающего меню. Найдите словарь со стоп-словами и добавьте слова,
искажающие образец. Если, по вашему мнению, стоп-слова попали в основной файл, пришлите отчет
об ошибке.
1. Ваш сайт имеет слишком много связанных ресурсов. Если ресурсов слишком много и вы уже
оптимизировали все, что могли, попробуйте следующее:
4.1. Настройте размер образца. Настройки по умолчанию сделаны после тестирования на
протяжении 1 секунды, что нормально для первой загрузки (после чего вы получили результаты из
кэша), но это зависит от числа полей, используемых вами, являются ли они полями ресурсов или TV
и в итоге какое значение они сохраняют в базе данных. Если вы использует много TV в &fields, вы
можете “уронить ” tvSample скажем, 50-ю результатами на один TV. Если вы используете 3 TV, то
можете теоретически уменьшить общее число обрабатываемых ресурсов с 375 до 150. Чтобы еще
больше быть уверенными в правильности результата, вы можете изменить порядок, в котором
образец обменивается данными с tvSort и tvSortDir, а также fieldSort и fieldSortDir. По умолчанию
сортировка ведется по дате создания, самый новый учитывается первым.
1. Может быть, что returnTVs настройки содержат много TV, что влияет на производительность.
Я особо не тестировал это, но вам следует попробовать ограничить результирующие
настройки (см. предыдущие советы), и использовать TV только тогда, когда нужно.
2. Это проблема! Не смотря на то, что дополнение тестировалось на сайтах различного размера
и на различных платформах, возможно, что что-то может произойти. Пожалуйста, сделайте
сообщение на форуме или Github, и мы посмотрим, что можно сделать. Ссылки есть выше.
getResourceField
Что такое getResourceField?
getResourceField – простой сниппет, предназначенный для отображения поля, включающего
переменные шаблона ресурсов для MODx Revolution..
История разработки
getResourceField впервые опубликован16 Сентября 2010, paulmerchant, соавтор Shaun McCormick
Загрузка
Сниппет можно загрузить с помощью Package Manager или непосредственно из Repository.
Использование
Минимальный синтаксис следующий:
[[getResourceField]]
Возвращает pagetitle текущего ресурса.
Параметры getResourceField
Имя
id
Описание
ID данных, полученных из поля
Возвращаемое имя поля или шаблона
Если значение 1 или true поле считается переменной шаблона
Если значение 1 или true, переменная шаблона будет обработана
processTV
согласно ее выходных данных.
Значение (строковое) возвращается, если поле не найдено или
default
пустое
field
isTV
Значение “по
умолчанию”
$modx->resource>get('id')
?pagetitle
false
false
Примеры использования
Возврат pagetitle из источника с id 123:
[[getResourceField? &id=`123`]]
Будет сделан возврат значения TV из исходного ресурса с именем myTV, если нет данных, будет
выдано сообщение 'Sorry, no data available'
[[getResourceField? &id=`[[*parent]]` &field=`myTV` &processTV=`1`
&default=`Sorry, no data available`]]
Возврат поля introtext из исходника (UltimateParent snippet должен быть инсталлирован)
[[getResourceField? &id=`[[UltimateParent]]` &field=`introtext`]]
Ошибки
Ошибка заключается в том, что этот сниппет может зациклить редирект. В примере рассмотрен
случай, в котором вы задаете шаблонную переменную на страничке, т.е. [[*featured_article]] и затем
используете ее в getResourceField
Вызов сниппета:
[[getResourceField? &id=`[[*featured_article]]` &field=`content`]]
Если TV не определен, по умолчанию используется id текущей страницы. Если сниппет вызывается
содержимым страницы, и вы запрашиваете содержимое как поле, то сниппет может войти в цикл, т.к.
запросу не хватает времени для такого количества редиректов.
Итог: если сниппет вызывается изнутри тем же полем, которое вы вызываете, например контент, то
нужно убедиться, что id параметр не ведет на текущую страницу.
getResources
Что из себя представляет getResources?
главная цель — вывод списков Ресурсов и обобщающий сниппет.
Требования
o MODx Revolution 2.0.0-beta5 или же старше
o PHP5 или старше
История
getResources был разработан Джейсоном Ковардом и издан в июне 2009 года.
Загрузка
Пакет загружаете из админ. панели MODx Revolution посредством (link)Управление пакетами или
же из репозитория дополнений MODx, отсюда: http://modxcms.com/extras/package/552
Это не является заменой замена Ditto, а другой компонент, который может исполнять отдельные
задачи, которые делают гораздо более специализированные звенья, к примеру Ditto, Wayfinder,
Breadcrumbs; обчно те, что задают свойства для перечня ресурсов (прежде Документы в MODx
Evolution)
Применение
Сниппет getResources может быть активизирован с помощью тега:
[[getResources]]
Если не задать параметр &tpl будет попросту выводить массив в виде списка любого конечного
ресурса и его полей.
Некоторые параметры
Параметры шаблонизации
tpl Имя чанка, который выступает как шаблон для ресурса. В случае если не найден, свойства
будут выдаваться в виде перечня для каждого ресурса
tplOdd Имя чанка, который выступает как шаблон для ресурсов с нечетным индексом (смотрите
параметр idx
tplFirst Имя чанка, который выступает как шаблон для первого ресурса
tplLast Имя чанка, который выступает как шаблон для заключительного ресурса
tpl_N Имя чанка, который выступает как шаблон для N-ного ресурса, к примеру &tpl_4=`tpl4th`
tpl_nN Имя чанка, который выступает как шаблон для каждого N-ного ресурса, к примеру шаблон
&tpl_n4=`tpl4th` будет приложен к любому элементу, номер которого кратный 4 от версии: 1.4.1pl
tplPath Доп. каталог для поиска чанков на базе файлов при применении биндинга @FILEПо
умолчанию: assets_path + "elements/chunks/"
outputSeparator Доп строчки для разделения любого ресурса после шаблонизации. По умолчанию:
"\n"
toPlaceholder В случае если определен, присвоит результат в подтвержденный плейсхолдер взамен
вывода напрямую
toSeparatePlaceholders В случае если определен, присвоит Всем результатом имя плейсхолдера в
виде суффикса из значения данного параметра и номера (начиная с ноля)Добавлено с в. 1.3.0
@FILE и @INLINE шаблоны У вас есть возможность обозначить каждому шаблону в качестве
префикса @FILE либо @INLINE для применения чанков, основанных на файлах либо просто
разметки соответственно.
o @FILE — Данный префикс дает возможность применять файл, взамен чанка в базе
информации шаблона. Путь, а так же имя файла будет установлено по умолчанию, в случае если не
обозначить параметр tplPath и поиск для шаблона @FILE будет проводиться касательно вашей
конфигурации assets_path + "elements/chunks/".
o @INLINE — Данный префикс дает возможность установить разметку для применения в
качестве шаблона напрямик в значении параметра. Советуется применять это лишь когда
назначены tpl\* параметры в Property Set, в другом случае всякий плейсхолдер в вашей строчной
разметке обработана будет до того, как содержание будет передано getResources, так как
кешируемые теги в MODx Revolution обрабатываются до начала обработки тега, который
содержит эти вложенные теги.
Характеристики выборки
parents Перечень идентификаторов родительских ресурсов, которые разделены запятыми.
Применяйте -1 для исключения родительских ресурсов. По умолчанию: current Resource id
resources Перечень идентификаторов ресурсов, которые разделены запятыми, для включения их в
итог выборки. Префикс минус исключает ресурсы из следствия выборки.
depth Единое число, которое указывает глубину поиска для ресурсов от всякого из родителей. По
умолчанию: десять
tvFilters Может применяться для фильтрации ресурсов по конкретным значениям шаблона (TV).
Они задаются как [(tvname)(operator)](value). Можно применять 2 делителя для соединения условий
фильтра.Могут быть фильтры с условием "Или же" (OR) в виде двойственной вертикальной
черты. OR-фильтр получает ресурсы, которые располагают одним из упомянутых значений
переменной шаблона (TV).
mytv==somevalue||mytv==othervalue
Вы в свою очередь можете применять фильтр "И" (AND) применяя запятую. Данный фильтр
проверит, что все условия выполнены.
mytv==somevalue,othertv==othervalue
Для точной фильтрации вы можете в свою очередь группировать их. Принципиально понимать,
что поначалу идут условия, разбитые по условиям Либо (||), потом условия И (,). Давайте
познакомимся с примером:
mytv==foo||mytv==bar,bartv==3||bartv==1
Русуры будут фильтроваться по одному из последующих критерий (в реальности в запросах к БД
применяется функция LIKE):
o mytv == foo, Или же:
o mytv == bar И bartv == 3, Или же:
o bartv == 1
Представленные выше примеры ищут четкие совпадения. В случае если вы желаете, вы в свою
очередь можете применять знак процента (%) как шаблон. К примеру:
mytv==%a%
Ищет все ресуры, которые располагают "a" в значении mytv.
mytv==a%
Ищет все ресурсы, значение mytv которых начинается с "a" и заключает все что может быть
после "a".
mytv==%a
Ищет всевозможные ресурсы, которые располагают значением mytv, кончающееся на "a" и
заключающее все до "a".
И естественно, вы можете соединять это с OR (||) и AND (,) разделителями, коие представлены
выше.
Принципиально знать, что данная функция смотрит на начальные значения переменных шаблона,
которые определены для ресурса. Это означает, что величина было установлена для ресурса и что
оно не будет подвергнуто обработке как переменная шаблона с видом вывода (или же значение по
умолчанию в версиях до 1.4.2-pl; в данном релизе добавлена поддержка фильтрации, которая
заключает значения по умолчанию). Если у вас имеется переменная "autotag", это означает, что
начальное значение является списком тегов, разделенных запятыми и оно не разделилось на теги
так, как это представлено в админке.
Новейшие операторы в фильтрах доступны в версии 1.4.2-pl
С релиза getResources 1.4.2-pl наличествует целый ряд новейших операторов сравнения, коие можно
применять при концепции условий фильтрации. Не считая этого, при применении многочисленных
из данных новых операторов при сопоставлении с числовыми значениями значения переменных
шаблона автоматом доводятся к числовым типам. Вот перечень операторов:
<=> — безопасное сопоставление с NULL
Оператор фильтра Оператор SQL Приведение к числу
<=><=>
Да
====
Да
!== !=
Да
<> <>
Да
== LIKE
Нет
!= NOT LIKEНет
<< <
Да
<= <=
Да
=< =<
Да
>> >
Да
>= >=
Да
=> =>
Да
sortby Каждое поле ресурса (переменных шаблона исключение) для сортировки. Многие из полей
для сортировки - publishedon, menuindex, pagetitle и прочие, однако обязательно посмотрите
документацию касающуюся ресурсов для всех полей. Укажите лишь имя поля, исключив синтаксисы
тегов. Не забывайте, что под час использования таких полей, как template, publishedby и
аналогичных для сортировки, они начнут сортироваться определенным значениям, к примеру таким
как ID шаблона или же пользователя, а не по именам.
В свою очередь вы можете пересортировать в любом порядке, применяя RAND(),к примеру:
&sortby=RAND() С в. 1.3.0 это в свою очередь может быть JSON массив сортировки по
нескольким полям, в частности:
&sortby={"publishedon":"ASC","createdon":"DESC"} В случае если вы желаете рассортировывать в
конкретном порядке, вы сможете сделать это, определив перечень идентификаторов ресурсов
последующим образом:
&sortby=FIELD(modResource.id, 4,7,2,5,1 ) Это же самое вполне вероятно, в случае если вы
передадите перечень ID для сортировки в переменной шаблона, к примеру:
&sortby=FIELD(modResource.id,[ [*templateVariable]]) По умолчанию: publishedon Добавлено в
версии: 1.3.0
sortbyAlias Имя запроса для поля из sortby
sortbyEscaped Экранировать имя поля установленного в sortby
sortdir Сортировка по умолчанию: DESC
sortbyTV Переменная шаблона - Template Variable для сортировки добавлено в в. 1.2.0
sortdirTV Порядок сортировки для использования sortbyTV По умолчанию: DESC Добавлено с в. 1.2.0
sortby TV Type Определяет тип данных сортировки по TV. Вероятные значения: string, integer,
decimal, datetime По умолчанию: string добавляется с в. 1.3.0
limit Лимитирование численности возвращаемых ресурсов по умолчанию: 5
offset Перемещение ресурсов для пропуска, которые возвращаются в соответствии с критериями
По умолчанию: 0
where Критерии в json-стиле для системы любых добавочных условий.
context В каковом контексте надлежит искать. По умолчанию нынешний контекст.
Иные параметры
showUnpublished В случае если true, то будут представлены в свой черед ресурсы, которые не
опубликованы. По умолчанию: 0
showDeleted В случае если true, то будут представлены ресурсы независимо от того, удалены они
или же нет.По умолчанию: 0
showHidden В случае если true, представит ресурсы вне зависимости от того, показываются они в
меню либо нет.По умолчанию: 0
hideContainers В случае если указан, то не будут представлены ресурсы, означенные как контейнер
(is_folder).По умолчанию: 0
includeContent Показывает, что содержание любого ресурса обязано возвращаться в итогах
выборки. По умолчанию: 0
includeTVs Показывает, что значения переменных шаблона обязаны быть включены в набор
свойств, доступных для любого шаблона ресурсаПо умолчанию: 0
includeTVList Добавочный перечень поделенных запятыми имеет переменных шаблона для
очевидного включения в итог, в случае если include TVs определен в 1Добавлено в в. 1.4.0
processTVs Показывает, что переменные шаблона обязаны быть отрисованы так как они были бы
изображены в ресурсе. Переменные шаблона обязаны быть включены для обработки. По
умолчанию: 0
processTVList Добавочный перечень имен переменных шаблона, разбитых запятыми, для очевидной
обработки. Переменные шаблона, установленные в этом месте, обязаны быть включены
посредством
includeTVs/includeTVList Добавлено в в. 1.4.0
tvPrefix Префикс для параметров в виде переменных шаблона. По умолчанию: tv.
idx Вы сможете задать начало idx ресурсов, что презентует собой свойство, которое возрастает
с любым ресурсом. По умолчанию: 1
first Задает idx, который является первым ресурс. По умолчанию: 1
last Задает idx, который является последним ресурсом. По умолчанию это численность ресурсов,
которые складываются + первый - 1 (?)
totalVar Применяется если нужно задать ключ плейсхолдера, определяемого getResources для
демонстрации общей численности ресурсов, которые будут избраны не беря во внимание
значения.По умолчанию: total
debug В случае если true, будет делать запись sql-запросов в log MODx.По умолчанию: false
Доступные плейсхолдеры
Плейсхолдеры которые доступны в ваших чанках форматирования getResources обычно находятся
в зависимости от перечисляемых ресурсов.
Теги на странице "Часто применяемые теги шаблона" — это перечень свойств, которые доступны
для всех ресурсов.
В случае если ваш ресурс располагает переменными шаблона, те в свой черед будут располагать
соответствующими плейсхолдеры (не забываете, что плейсхолдеры будут применять префикс,
предопределенный посредством параметра &tvPrefix)
Не считая этого, имеются следующие плейсхолдеры:
Плейсхолдер
[[+idx]]
Возрастает с каждой итерацией, начиная с 1 (либо со значения, определенного параметром &idx)
Примеры
Смотрите также подраздел Примеры этой документации для ознакомления с более детальными
образцами и обучающими материалами.
Вывод перечня дочерних ресурсов ресурса, применяя чанк 'myRowTpl':
[[!getResources? &parents=[[*id]]&tpl=myRowTpl]]
Вывод всех без исключения дочерних ресурсов ресурса с ID '5', исключая ресурса 10, применяя чанк
'myRowTpl':
[[!getResources? &parents=5&resources=-10&tpl=myRowTpl]]
Вывод лишь заданных ресурсов, применяя чанк 'myRowTpl':
[[!getResources? &parents=-1&resources=10,11,12&tpl=myRowTpl]]
Вывод заключительных пяти опубликованных ресурсов, у которых родительский ресурс с ID '5',
применяя шаблон 'blogPost':
[[!getResources? &parents=5&limit=5&tpl=blogPost&includeContent=1]]
Вывод перечня дочерних ресурсов текущего ресурса, основанного на шаблоне ресурсов:
[[!getResources? &parents=[[*id]]&where={"template:=":8}&tpl=myRowTpl]]
Вывод перечня дочерних ресурсов текущего ресурса, где ID шаблона ресурсов равняется 1 или же 2:
[[!getResources? &parents=[[*id]]&where={"template:=":1,
"OR:template:=":2}&tpl=myRowTpl]]
Вывод перечня дочерних ресурсов ресурса, в котом ID шаблона ресурсов равняется 1, 2 или же 3 (вы не
можете применять тот же ключ более 1-го раза):
[[!getResources? &parents=[[*id]]&where={"template:IN":[1,2,3]}&tpl=myRowTpl]]
Демонстрация сообщения, когда ничто не найдено (аналог "empty" в Ditto):
[[!getResources:default=Noresultsfound? &parents=[[*id]]&tpl=myRowTpl]]
Показ переменных шаблона (Template Variables) с getResources
Для того чтобы сократить время обработки, getResources не обретает значения TV по умолчанию.
В случае если вы желаете демонстрировать TV, вы обязаны включить последующие параметры:
&includeTVs=1 &processTVs=1
Вам в свою очередь необходим или префикс для всех TV с tv. или же применять данный параметр в
теге вашего сниппета:
&tvPrefix=
В чанке tpl, который вы применяете для вывода getResources, применяйте тег плейсхолдера как тут
(однако с именем вашего TV):
Применение getPage для навигации по страницам
В синтезе с getPage getResources дает возможность делать мощные и гибкие нумерации ваших
страничек.
Примеры
Берет первые десять ресурсов, которые отсортированны по дате публикации (publishedon),
которые внутри ресурса с ID 17, не более нежели на 2 уровня в глубину, с шаблоном 'blogListPost', в
том числе переменные шаблона (TV) и содержимое (content):
[[!getPage? &elementClass=`modSnippet`&element=`getResources`
&parents=`17`&depth=`2`&limit=`10`&pageVarKey=`page`&includeTVs=`1`&includeContent=`1`&tp
l=`blogListPost`]]
<divclass="paging">
<ulclass="pageList">
[[!+page.nav]]
</ul>
</div>
и чанк blogListPost:
<divclass="blogPost">
<divclass="date">
[[+publishedon:strtotime:date=`%b %d %Y`]]
</div>
<h2><ahref="
[[~[[+id]]]]
"title="
[[+pagetitle]]
">
[[+pagetitle]]
</a></h2>
<pclass="author"><strong>Author:</strong><spanclass="author">
[[+createdby:userinfo=`username`]]
</span></p>
<pclass="summary">
[[+introtext]]
</p>
<pclass="readmore"><ahref="
[[~[[+id]]]]
"><span>Read more</span></a></p>
<divclass="clear"></div>
</div>
<hr/>
доскональными образчиками и материалами для обучения.
Вывод перечня дочерних ресурсов текущего ресурса, применяя чанк 'myRowTpl':
[[!getResources? &parents=[[*id]]&tpl=myRowTpl]]
Вывод абсолютно всех дочерних ресурсов ресурса с ID '5', исключение ресурс 10, применяя чанк
'myRowTpl':
[[!getResources? &parents=5&resources=-10&tpl=myRowTpl]]
Вывод лишь установленных ресурсов, применяя чанк 'myRowTpl':
[[!getResources? &parents=-1&resources=10,11,12&tpl=myRowTpl]]
Вывод заключительных пяти опубликованных ресурсов, с родительским ресурсом с ID '5', применяя
шаблон 'blogPost':
[[!getResources? &parents=5&limit=5&tpl=blogPost&includeContent=1]]
Вывод перечня дочерних ресурсов текущего ресурса, который основан на шаблоне ресурсов:
[[!getResources? &parents=[[*id]]&where={"template:=":8}&tpl=myRowTpl]]
Вывод перечня дочерних ресурсов ресурса, в котором ID шаблона ресурсов 1 либо 2:
[[!getResources? &parents=[[*id]]&where={"template:=":1,
"OR:template:=":2}&tpl=myRowTpl]]
getResources::Индекс страниц с картинками
getResources.Category Index Page with Thumbnails
Удостоверьтесь, что вы уже поставили phpThumbOf, который производит магию, масштабируя
иллюстрации в миниатюры.
Переменные шаблона (TV)
Нам нужно создать метод, как присоединять изображения к страницам.
1. Организуем свежую переменную шаблона (TV) и именуем ее "page-thumbnail"
2. Вид ввода: Изображение (Image)
3. Избираем необходимый шаблон на вкладке Доступно для шаблонов и сберегаем.
Чанки
Мне нравится ложить вызовы моих сниппетов в чанки, таким образом RTE не переключает & на
amp;
Создайте чанк и назовите его list-docs-thumb
<divclass="list-docs thumb grid">
[[!getResources?
&parents=`[[*id]]`
&tpl=`list-docs-thumb-tpl`
&limit=`100`
&sortdir=`ASC`
&includeTVs=`1`
&includeContent=`1`
&depth=`0`
&sortby=`menuindex`]]
</div><!-- eof list-docs -->
Создайте второй чанк для шаблона getResources, назовите его list-docs-thumb-tpl (видите что я
сделал? Соглашения об именовании ваш друг.)
<divclass="list-item column span-6">
<h2>
[[+pagetitle]]
</h2>
<ahref="
[[~[[+id]]]]
"title="
[[+pagetitle]]
">
<imgsrc="
[[+tv.page-thumb:phpthumbof=`w=153&h=200&zc=1`]]
"alt="
[[+pagetitle]]
" />
</a>
<p>
[[+introtext]]
</p>
</div><!-- eof item -->
Установка
Далее попросту вставьте
[[$list-docs-thumb]]
на произвольный страничке с дочерними страничками и установленными переменными шаблона
(TV) и все будет функционировать.
getResources.Google XML Sitemap
Кому необходимо, имеется особый сниппет при помощи которого вы сможете вынудить
getResources делать черновую работу по созданию XML карты сайта для Google.
Проделаем ряд пунктов:
переменных шаблона, в которых будет храниться информация Sitemap, такие как частота
изменения, приоритет и прочие.
ресурс для нашего sitemap.xml
чанк шаблона для getResources
Переменные шаблона
Вначале необходимо создать категории для переменных шаблона. Назовем ее "Средства поиска",
это несомненно поможет комфортно разместить их на вкладке Доп параметры. Не считая того,
во время создании любой переменной шаблона удостоверьтесь, что ей поставили доступ к любому
шаблону.
Частота изменения — Это применяется для сообщения Google, как часто страничка будет
обновляться.
1. Назовите TV "change-frequency", изберите категорию Средства поиска.
2. Впоследствии изберите тип ввода: Выпадающий перечень (DropDown List)
3. Вероятные значимости: "always||hourly||daily||weekly||monthly||yearly||never" - перевод:
постоянно, раз в час, раз в день, раз в неделю, каждый месяц, раз в год, никогда
4. Я советую значение по умолчанию: "monthly" (каждый месяц)
Приоритет Google Sitemap - Это применяется, для того чтобы сообщать Google, в какой мере
принципиальна любая страничка. И да, запрос всем им значения 1 не сделает их больше в выдаче :)
1. Назовите TV "google-site-map-priority", изберите категорию Средства поиска.
2. Дальше изберите тип ввода: Выпадающий перечень (DropDown List)
3. Вероятные значения: ".1||.2||.3||.5||.6||.7||.8||.9||1"
4. Я советую значение по умолчанию: .5
Чанк
Организуйте новый чанк и назовите его: google-sitemap-tpl
<url>
<loc>
[[~[[+id]]? &scheme=`full`]]
</loc>
<lastmod>
[[+editedon]]
</lastmod>
<priority>
[[+tv.google-site-map-priority]]
</priority>
<changefreq>
[[+tv.change-frequency]]
</changefreq>
</url>
Страница
Сделайте страницу в корне вашего вебсайта и дайте ей имя "sitemap.xml", отметьте чекбокс Не
демонстрировать в меню (Hide From Menus). Во вкладке Опции смените тип содержимого на XML.
Поставьте код, определенный далее и все обязано заработать.
<?xml version="1.0" encoding="UTF-8"?>
<urlsetxmlns="http://www.google.com/schemas/sitemap/0.84">
[[getResources?
&parents=`0`
&tpl=`google-sitemap-tpl`
&limit=`500`
&sortdir=`DESC`
&includeTVs=`1`
&processTVs=`1`
&depth=`10`
&sortby=`publishedon`]]
</urlset>
В случае если у вас более, нежели 500 ресурсов или же более десяти уровней в глубину, вы сможете
изменить численность и глубину выборки в вызове сниппета getResources.
getUrlParam
Добавлено AMDbuilder, отредактировано AMDbuilder 8 ноября 2012 (просмотр изменений)
getUrlParam - это простой сниппет, возвращающий значение параметра URL. Параметр
обрабатывается и хранится как определенный класс.
Revolution обеспечивает легкое применение параметров URL , а этот сниппет помогает их
использовать.
ОПЦИИ
name – имя параметра, по умолчанию "p"
int - (необязательный параметр). Значение true обеспечивает использование только целочисленных
значений
max - (необязательный параметр) Максимальная длина возвращаемого значения, по умолчанию 20
default - (необязательный параметр) Значение возвращается, если не найдены параметры URL
Отправка параметра:
[[~10? &val=`5`]]
Извлечение значения
[[!getUrlParam? &name=`val` &int=`1`]]
Этот сниппет следует вызывать некэшируемым для получения текущего значения.
GoogleSiteMap
Что такое GoogleSiteMap?
GoogleSiteMap – сниппет, отображащий Google-оптимизированную карту сайта на вашем сайте.
Системные требования.
• MODx Revolution 2.0.0-rc-3 или более новая версия
• PHP5 или более новая версия
История создания и информация
GoogleSiteMap написан Shaun McCormick (splittingred) в виде сниппета для отображения Googleоптимизированной карты сайта. Впервые опубликован 23 июня 2009. Вы можете найти
GoogleSiteMap.Roadmap по ссылке roadmap
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя [Package Management],
или из хранилища дополнений MODx по ссылке http://modxcms.com/extras/package/550
Разработка и отчеты об ошибках
GoogleSiteMap разработан и распространяется GitHub, вы можете его найти
http://github.com/splittingred/GoogleSiteMap
Использование:
GoogleSiteMap вызывается с помощью тэгов. Сниппеты GoogleSiteMap поставляется с одним
сниппетом GoogleSiteMap
Примеры
Отображение Google SiteMap.
[[!GoogleSiteMap]]
GoogleSiteMap Snippet Этот сниппет выводит на экран Google Sitemap. Использование Просто
разместите сниппет в Ресурсах ,которые вы планируете использовать, и установите значение
шаблона ресурсов “blank”. 1
[[!GoogleSiteMap]]
Не забудьте установить тип контента как 'xml'.
GroupEletters
Обзор GroupEletters
GroupEletters - дополнение для MODX Revolution, обеспечивающее создание email рассылок c
помощью MODX! Вы можете использовать в своих целях такую возможность MODX как шаблоны
для создания индивидуальных шаблонов. Простое управление списками и подписчиками,
подписчики могут сами управлять своими настройками. Вы можете персонализировать рассылаемые
письма с помощью шаблонов из комплекта поставки.
Особенности
Простое управление группами и подписчиками.
Для посетителей есть возможность подписываться с помощью формы (FormIt)
Необходимость подтверждения подписки с помощью перехода по соответствующей ссылке
Возможность отписки от рассылки с помощью ссылки в письме ()
Возможность выбора одной или нескольких групп для подписки
Импорт CSVдля подписчиков.
Очередь сообщений. С помощью системных настроек можно выбрать размер серии
отправляемых писем и интервал отправки писем.
Статистика основных параметров.
Системные требования
MODX Revolution 2.2+
FormIt – для страницы подписки
CronManager – для автоматизации рассылки.
История создания
GroupEletters создан Joshua Gulledge, первый альфа релиз выпущен 30 апреля 2012. Определенная
часть кода взята из Ditsnews, но GroupEletters не является обновлением Ditsnews.
Отчеты об ошибках и сотрудничество
GroupEletters можно найти на https://github.com/jgulledge19/GroupEletters
Все отчеты об ошибках просьба присылать сюда: https://github.com/jgulledge19/GroupEletters/issues
Установка
Для установки нужно воспользоваться Package Management и выполнить следующие шаги:
Создать страницу регистрации. Пример страницы приведен в чанке GroupEletterSignup.
Опции –> Создать страницу "Спасибо" (и установить ее 'redirectTo' на странице регистрации ,
вызываемой сниппетом FormIt)
Создать страницу подтверждение / соглашения, просто добавив сниппет и внеся ID этой страницы в
вызов сниппетом FormIt страницы регистрации.
Создать страницу отписки, просто добавив сниппет . Убедитесь, что добавили ссылку на страницу в
шаблоне письма
Перейдите System->System Setting и выберите GroupEletters, измените необходимые настройки –
нужная страница создана.
Перейдите Components -> GroupEletters и добавьте несколько групп, и по, желанию, несколько
подписчиков.
Установите CronManager. Добавьте в него GroupEletterQueue. Если не смогли настроить
CronManager, то можете разместить сниппет в документе и вызывать его вручную, но страница
будет загружаться несколько минут.
Как использовать
Создайте Ресурс / Документ и выберите шаблон GroupEletterSample
Заполните страницу как обычно. Доступны следующие плейсхолдеры (они у вас должны быть до
того, как вы начнете их использовать на странице):
[[+trackingImage]]
[[+first_name]]
[[+m_name]]
[[+last_name]]
[[+fullname]] – это просто [[+first_name]] и [[+last_name]] вместе
[[+company]]
[[+address]]
[[+city]]]
[[+state]]
[[+zip]]
[[+country]]
[[+email]]
[[+phone]]
[[+cell]]
[[+crm_id]]
[[+date_created]]
Выберите закладку Template Variables. Вам нужно выбрать и заполнить следующую
информацию:
После ознакомления нужно выбрать Send a Test – это обязательный шаг, и если вы сделали
изменения в контенте, то нужно провести тест еще раз.
Если у вас установлен CronManager, то эта информация будет отослана согласно установленной
даты публикации Publish Date, если дата прошла – то при запуске CronManager в следующий раз.
Протестируйте новостную рассылку в других почтовых программах.
GroupEletter.Import CSV
Теперь вы можете создавать CSV со списком имен, импортировать их, выбирать в зависимости от
того, к какой группе назначены и активны ли
Подготовка CSV файла к импорту
Подготовка CSV файла к импорту не вызовет затруднений, если вы знакомы c Excel или подобными
продуктами. Вот пример файла CSV, размещенного в папке с инсталлированными файлами
core/components/groupeletters/docs/example-import.csv
1. Для получения практических навыков запустите Excel, и в первой строке ячеек для каждой
колонки разместите названия для создания строки заголовков. Используйте следующие:
crm_id, first_name, m_name,last_name, company, address, city, state, zip, country, email, phone и
cell. Порядок не имеет значения, также вам могут не понадобится все названия, поэтому
можете убрать те, которые не планируете использовать. Для импорта нужно оставить, по
меньшей мере, поле email.
2. Заполните столбцы информацией о подписчиках.
3.Теперь все готово для сохранения файла в CSV формате.
Импорт CSV файла
1. Наведите курсор мышки на Components и кликните на on GroupEletters
2. Вы увидите панель управления, кликните на закладку Subscribers
3. Далее вы увидите несколько кнопок, кликните на Import CSV.
4. Во всплывающем окне выберите ваш CSV файл и затем отметьте галочками Active (будут
импортированы как активные) и нужные для импорта группы
GroupEletters.Templates
Создание индивидуального шаблона
Самый простой способ создать индивидуальный шаблон – просто продублировать шаблон
GroupEletterSample. Перейдите на закладку Элементы на левой панели MODX менеджера.
Разверните Templates, затем GroupEletters. Найдите GroupEletterSample, сделайте двойной клик по
нему. Появится окно диалога, кликните на Duplicate Template. Затем нужно ввести подходящее имя
шаблона.
Теперь просмотрите код и введите ваш. Внимание, вам нужны все отмеченные GroupEletter TV,
иначе программа не создаст email.
Плейсхолдеры для использования в шаблоне
В MODX доступны все тэги и Элементы, необходимые для использования в типичном шаблоне. Эти
плейсхолдеры также доступны в пределах TV или контента.
Пример использования:
[[+manageSubscriptionsUrl]]<br /><br />
Имя
trackingImage
Описание
Используйте для изображений, разместить изображение также
можно используя такой код: image=test.jpg , изображение
нужно разместить в assets/components/groupeletters/images/
Пример: <img src="" alt="" />
manageSubscriptionsUrl URL, позволяющий подписчику управлять его подписками,
созданные ссылки содержат уникальный код подписчика.
unsubscribeUrl
URL, позволяющий подписчику отписаться от рассылки писем,
созданные ссылки содержат уникальный код подписчика.
manageSubscriptionsID ID страницы для управления страницей подписки
unsubscribeID
ID страницы отписки от рассылки.
Плейсхолдер персональнойинформации подписчика
Обратитевнимание, в каждом поле должна находиться актуальная информация. В регистрационной
форме рекомендуется имя, фамилию, email задать как обязательные поля, а остальные – для
заполнения по желанию. date_created создается автоматически, поэтому в регистрационную форму
это поле добавлять не нужно.
Имя
Описание
first_name Имя
m_name
Отчество
last_name Фамилия
fullname
Имя + Фамилия
company
Организация, фирма
address
Адрес
city
Город
state
Штат / область
zip
Почтовый индекс
country
Страна
email
Адрес электронной почты
phone
Номер стационарного телефона
cell
Номер мобильного телефона
crm_id
ID CRM (Система управления взаимосвязями), если вы используете подобные продукты
date_created Дата подписки посетителя или добавления аккаунта администратором.
HitsPage
Что такое HitsPage?
HitsPage – плагин для подсчет http запросов, или посещений на определенной веб странице.
Системные требования
MODX Revolution 2.1.x или более новая версия
История создания
HitsPage написан Valentine Rasulov и опубликован 27 октября 2011.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя [Package Management],
или из хранилища дополнений MODx по ссылке: http://modx.com/extras/package/hitspage
Использование
При установке HitsPage создает две новых переменных шаблона, HitsPage" и "hits". Во время записи
"hits" TV дублируются.
При использовании Ресурсов для отслеживания посещений применяйте плейсхолдер:
[[!+hitss]]
Вы можете разместить это в поле контента ресурсов или в его Шаблоне, но он ДОЛЖЕН
присутствовать на странице, которую вы отслеживаете. Если хотите, вы можете сделать его
скрытым с помощью CSS.
Особенности
Не используйте TV теги для обработки выходных данных на странице. Предположительно, это
мешает работе плагина. Используйте их только в &tpl чанках (см. ниже).
После размещения плейсхолдера в необходимом месте, "HitsPage" TV автоматически обновляет
счетчик посещений, обеспечивая его доступность для Сниппетов с помощью Tpl Чанков.
Примеры
getResources вызывается используя нижеприведенный &tpl, возвращая список страниц с их Titles и
количеством их посещений.
<li>[[+pagetitle]] has been viewed [[+tv.HitsPage]] times.</li>
Пример использования
Вы можете легко создать виджет “Самые популярные сообщения” следуя указаниям по ссылке:
http://www.sepiariver.ca/blog/modx-web/modx-popular-posts-plugin-hit-counter-getresources
IF
Что такое if?
Условный логический сниппет, обеспечивающий выполнение условных выражений в MODx
История создания
IF написан Джейсоно Ковардом (Jason Coward), известным как opengeek, и Шоном Маккормиком,
известным как splittingred и опубликован 29 октября 2009.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя Package Management,
или из хранилища дополнений MODx по ссылке http://modxcms.com/extras/package/600
Разработка и Отчеты об ошибках
If разработан и распространяется GitHub, и может быть найден по ссылке
http://github.com/splittingred/If
Отчеты об ошибках можно разместить здесь: http://github.com/splittingred/If/issues
Использование
Сниппет If может быть вызван с использованием тегов:
[[If]]
или, в случае, если объект может быть изменен до того, как кэш ресурса будет очищен, используйте
не кэшируемый синтаксис:
[[!If]]
Доступные свойства
Имя
Описание
Значение “по
умолчанию“
subject Параметр, над значением которого выполняются условия.
operator Оператор сравнения с subject
=
Используется при необходимости, значение для сравнения subject и
operand
operator.
then
Выводится, если состояние принимает значение true
else
Выводится, если состояние принимает значение false
debug Если значение true, отображает все проверенные свойства
0
Если прошло обработку debug и значение true, после отображения
die
0
свойств вывести die().
Доступные операторы
Оператор
Описание
!=,neq,not,isnot,isnt,unequal,notequal
Принимается если subject не равен operand
==,=,eq,is,equal,equals,equalto
Принимается если subject равен operand
<,lt,less,lessthan
Принимается если subject меньше operand.
>,gt,greater,greaterthan
Принимается если subject больше operand.
<=,lte,lessthanequals,lessthanorequalto
Принимается если subject меньше или равен operand
>=,gte,greaterthanequals,greaterthanequalto Принимается если subject больше или равен operand.
isempty,empty
Принимается если subject без значения.
!empty,notempty,isnotempty
Принимается если subject имеет значение.
isnull,null
Принимается если subject равен 0
Принимается если subject найден в списке операндов
inarray,in_array,ia
(строковый параметр, разделитель - запятая)
Примеры
Сравнение чисел:
[[!If? &subject=`[[+total]]` &operator=`GT` &operand=`3` &then=`You
have more than 3 items!`]]
Сравнение строк:
[[!If?
&subject=`[[+name]]`
&operator=`EQ`
&operand=`George`
&then=`Hey George! Long time no see!`
&else=`You're not George. Go away.`
]]
Встраиваемый вызов сниппета
[[!If?
&subject=`[[+modx.user.id]]`
&operator=`EQ`
&operand=`0`
&then=`[[Login]]`
&else=`[[Logout]]`
]]
При использовании сниппета IF для проверки поля ресурса или шаблонной переменной (или другого
значения, не измененного до очистки кэша), убедитесь, что используете кэшируемый вызов сниппета
для проверки состояния. Это нужно, чтобы быть уверенным, что этот процесс не нужен при каждом
запросе.
[[If?
&subject=`[[*hidemenu]]`
&operator=`EQ`
&operand=`1`
&then=`This resource is not visible in the menu.`
&else=`This resource shows up in the menu in spot [[*menuindex]].`
]]
Image+
Что такое Image+?
Image+ - это расширение Image, входящего в состав MODx работающее с TV. Оно обеспечивает
функцию кадрирования изображений при выборе их с помощью интерфейса TV ресурса.
Разработчики могут задать ограничение высоты / ширины вместе или по отдельности, а редактор
обеспечит обрезку изображения в соответствии с заданными параметрами. URL может быть выдан
как в исходном виде, так и отформатированном с помощью использования чанка, позволяющего
использовать тэг Alt, title изображения для добавления их к вашим изображениям из области TV.
Системные требования



MODx Revolution 2.2.x или более поздняя версия
PHP5 или более поздняя версия
расширение phpThumbOf
История создания и дополнительная информация.
Image+ написано Аланом Пичем (Alan Pich) в начале 2012 Версия 1.x содержала слишком много
ошибок для использования в качестве компонента, поэтому расширение было полностью переписано
и в виде версии 2.0 было опубликовано в конце ноября 2012.
Загрузка
Вы можете загрузить ПО с помощью менеджера MODx Revolution, используя Package Management,
или из хранилища дополнений MODx по ссылке
http://modx.com/extras/package/imageplustvinputhttp://modx.com/extras/package/imageplustvinput
Разработка и Отчеты об ошибках
Image+ разработано и распространяется GitHub, найти его можно по ссылке
https://github.com/alanpich/tvImagePlus
Использование
Image+ состоит из двух компонентов, вызываемых Image+ : входной и выходной TV . Для
корректной работы оба компонента должны быть отмечены как TV. Дополнительные опции для
настройки выходных данных быть сконфигурированы в разделе Шаблонных переменных.
Входные опции
Когда Image+ становится выбранным в качестве входного типа для TV, нижеописанные опции
становятся доступными:
Поле
Описание
Target Опциональное ограничение ширины выходного изображения. Если установлено, выходное
Width TV изображение будет точно такой ширины. Может быть использовано вместе с полем
Target
Height
Alt tag
field
Target Height для ограничения размеров изображения.
Опциональное ограничение высоты выходного изображения. Если установлено, выходное
TV изображение будет точно такой высоты. Может быть использовано вместе с полем
Target Width для ограничения размеров изображения.
Если установлено в положение “Yes”, становится доступным дополнительное поле,
используемое при редактировании TV для ресурса. Это поле может быть использовано для
добавления title или тэга Alt изображению. Используется вместе с выходным чанком (см.
ниже Выходные опции)
Выходные опции
Данные опции носят исключительно вспомогательный характер, но они генерируют и позволяют
использовать множество дополнительных опций для изображений. Доступны следующие опции:
Поле
Additional
phpThumb
params
Output Chunk
Описание
Позволяет вводить дополнительные параметры для передачи в phpThumb и создания
изображения. Детали см. здесь . Формат url должен быть таким: (fltr[]=abc&zc=1...)
Если поле оставить незаполненным, TV будет выводить исходный url для
подготовленного изображения. Есть возможность задать имя чанка для
использования определенного выходного формата. О доступных плейсхолдерах
будет написано ниже.
Чанк для выходных данных
Чанк для выходных данных выбирается опционально, он дает доступ к другим плейсхолдерам,
позволяющим лучше настроить выходные TV. Доступны следующие плейсхолдеры:
Плейсхолдеры
Описание
Url изображения. Значение по умолчанию, если Output Chunk не задан.
Ширина выходного изображения (если задана во Входных Опциях)
Высота выходного изображения (если задана во Входных Опциях)
Текст для Alt тэга (если задан во Входных Опциях)
imageHERE
Что такое imageHERE?
imageHERE – обычный, простой в использовании инструмент для ускоренной разработки,
прототипирования программ, он вставляет плейсхолдер изображений в разметку страницы во время
разработки. Для своей работы он использует скрипт Ивана Малопинского (Ivan Malopinsky) holder.js
http://imsky.github.com/holder/
Текущая версия
Версия: 1.0.0-beta
Доступность: со 2 ноября 2012
Испльзование
Используйте imageHERE для вызова чанка в и вставки в шаблон или контент с использованием
следующего синтаксиса:
[[$imageHERE]]
Пример с использованием опций:
[[$imageHERE?
&w=`600`
&h=`400`
&bg=`#555`
&fg=`#fff`
&text=`Произвольный текст`
&alt=`alt текс`
]]



&w => ширина плейсхолдера. По умолчанию 300.
&h => высота плейсхолдера. По умолчанию 200.
&bg => Фоновый цвет в шестнадцатеричном (hex) формате. Для получения эффекта
ДОЛЖЕН использоваться с &fg .

&fg => Цвет символов (текстаxt) в шестнадцатеричном (hex) формате. Для получения эффекта
ДОЛЖЕН использоваться с &bg.


&text => Произвольный текст. По умолчанию "width x height".
&alt => Добавляет текст alt, нужен, если его наличии важно при прототипировании ;)
Здесь не указана опция &attr, которая позволяет вставить любой нужный атрибут в элемент
изображения. Пример: &attr=`class="myClass"`.
Эти опции также можно задать на вкладке Свойства чанка (Chunk properties), и в дальнейшем при
каждом использовании чанка по умолчанию будут использоваться данные значения. Задать
несколько значений и затем вызывать их можно следующим образом:
[[$imageHERE@myPropertySet]]
После окончания прототипирования отключите плагин imageHERE, чтобы holder.js не вмешивался в
работу страницы. Или деинсталлируйте imageHERE с помощью Package Management.
ImportX
Что такое ImportX?
ImportX – дополнение для MODX, используемое для для быстрого создания новых ресурсов из
входных CSV данных. Они могут быть вставлены в textarea или загружены в виде .txt или .csv файла.
Разработано на средства Working Party, Digital Agency, Сидней.
Системные требования

MODX 2.0.x or 2.1.x (дополнение разрабатывалось с помощью версий 2.0.8 и 2.1-rc3, экспресс-тесты на
версии 2.2 не выявили ошибок)
История создания
Разработка инициирована Марком Хамстра (Mark Hamstra) в апреле 2011.
Релизы
Версия
Дата
2 мая
2011
Автор
Марк
1.0.0-rc
Хамстра
Марк
0.9.0-alpha 25/4/2011
Хамстра
Марк
0.2.0-alpha 23/4/2011
Хамстра
0.1.0Марк
7/4/2011
alpha1
Хамстра
Принципиальные отличия
Загрузка CSV файлов, загрузка в коневой контекст, затем в
'web'
Консольная работа в версии 2.0.8+, испоьзуются языковые
модули.
Использование
Использовать ImportX просто, нужно подготовить CSV данные и настроить несколько параметров в
зависимости от ситуации.
После установки с помощью Package Manager, обновите страницу и найдите ImportX в меню
компонентов (Components menu) (см. иллюстрацию). Откройте вкладку и ознакомьтесь с
доступными опциями. Названия большинства говорят сами за себя.
Вкладка CSV Input (входные данные CSV)
В частности, вы обнаружите большое поле textarea для вода исходных данных CSV, ниже будет поле
для выбора загружаемого csv файла.
В поле "Separator" (Разделитель), вводится разделитель столбцов списка CSV. В качестве
разделителя может использоваться любой символ, а также длинные многосимвольные комбинации,
по умолчанию разделителем является точка с запятой ";".
И, наконец, последнее, что в основном вам нужно знать об этой закладке, это то, где находится
кнопка submit (отправить), если вы ее еще не обнаружили, то она находится в правой верхней части
рабочей области.
Для ImportX не имеет значения формат CSV, пока выполняются следующие условия:
Известно, какой разделитель используется. По умолчанию используется точка с запятой ";", но
его изменить во вкладке CSV Input (входные данные CSV).




Первая строка содержит “заголовки”, названия столбцов. Можно использовать поля ресурсов
(пример: pagetitle;alias;richtext), а также Template Variables (Шаблонные переменные). Шаблонные
переменные должны быть перечислены в виде "tvN", где N - это ID шаблонной переменной, значение
N должно быть введено. Пример первой строки с заголовками: pagetitle;alias;richtext;tv3;content;tv4.
Должна быть минимум одна строка со значениями.
Каждая строка должна содержать одинаковое число элементов. Элемент или ячейка – это значение
определенной записи, которое должно быть добавлено в качестве значения определенного поля.
Первая строка со списком заголовков должна содержать столько же заголовков, сколько будет
столбцов с данными.
Установки по умолчанию.
Закладка "Установки по умолчанию" содержит пару настроек, которые вы можете задать для
использования по умолчанию.
Для версии 1.0.0-rc вы можете задать следующие параметры:




Источник: или целочисленное обращение к существующему ID ресурса, или значение context_key для
импорта в корень context_key , или 0 для импорта в корень "web контекста по умолчанию”.
Публикация: будет ли ресурс опубликован по умолчанию.
Доступность для поиска: будет ли ресурс доступен для поиска по умолчанию.
Видимость из разделов меню: будет ли ресурс скрыт для доступа из разделов меню по умолчанию.
Начинаем колдовать (и искать, где ошиблись)
После клика на кнопку "Start Import" (“Начать импорт”), скрипт начнет выполняться и будет
выполнять анализ (парсинг) CSV. При положительном результате анализа вы увидите что-то
подобное:
На этом этапе вы можете скачать результаты парсинга в виде файла или просто закрыть окно. Дерево
ресурсов обновится автоматически и будет видно, что получилось.
Если вы увидели что-то иное на экране, из таблицы ниже вы сможет узнать, что нужно сделать
,чтобы исправить это.
Please choose a Parent to
import to. Specify 0 to put
new resources in the root
of the site.
Поле " источника" ("parent") на
закладке Установки по умолчанию
(Default settings) не заполнено. Всегда
Пожалуйста, выберите
должно быть значение: 0, ID
Источник (Parent) для
импорта. Задайте 0 для подходящего ресурса, или context_key.
размещения нового
ресурса в корневой
директории сайта.
Parent not numeric or valid
context key. Источник
(Parent) не содержит
цифру или подходящий
значение context_key
1. Поле Источник ("parent") не
числовое
2. Подходящее context_key значение
не найдено на закладке Default
settings (Установки по умолчанию).
Подкорректируйте значение поля
Источник ("Parent") на закладке
Установки по умолчанию (Default
settings).
1. Измените parent поле
Источник (parent) на
целочисленное значение.
2. Проверьте орфографию
вашего context_key.
Parent needs to be a
positive integer.
Вами задано отрицательное число в
поле “Источник” (parent).
Источник (parent)
должно быть целым
положительным числом
Please add your CSV
values in order for them to
be processed.
Вы не задали никаких CSV данных.
Пожалуйста, добавьте
CSV данные для
обработки
Вы загрузили файл, но возникла
Error reading the uploaded
ошибка при его чтении. Это могло
Задайте 0 или положительное
число в поле Источник (parent).
Добавьте данные вручную или
загрузите файл.
Убедитесь, что файл не
поврежден. Возможно стоит
file.
Ошибка чтения
загруженного файла.
Invalid CSV value posted.
Введены неверные CSV
данные.
Not enough data given.
Expecting at least one
header row, and one data
row.
произойти из-за ошибки в файле или
при чтении файла из директории для
хранения временных файлов на
сервере.
проверить настройкиk вашего
open_basedir .
Суммарная длина введенных CSV
данных меньше 10 знаков, данные
признаны недействительными.
Проверьте данные CSV, они
должны быть не меньше 10
знаков.
Скрипту требуется минимум одна
строка с заголовком и одна с данными,
Проверьте CSV данные и
вы не предоставили их.
убедитесь, что строки разделены
Предполагается, что строки будут
символом перевода строки (\n).
разделены символом перевода строки
(\n).
Получено недостаточно
данных. Ожидается
минимум одна строка с
заголовком и одна строка
с данными.
Element count do not
match. Please check for
Одна строка имеет больше или меньше Убедитесь, что используете
correct syntax on line .
элементов, все строки должны
одинаковый замыкающий
содержать одинаковое число элементов. разделитель и что разделитель не
Распространенной причиной может
используется в качестве значения
Элемент count не
быть попадание разделителя в поле
в одном из полей. Если это так, то
подходит, проверьте
используйте другой разделитель.
корректность синтаксиса значений.
на строке .
An unexpected error
MODX Processor вернул ошибку. До
occurred saving the
версии 1.0.0-pl это означало бы
resource.
"Массив", но эта проблема решена в
версии 1.0.0-pl. Различные причины
Зависит от конкретной ошибки.
Непредвиденная ошибка могут привести к появлению данного
сообщения, но в основном это связано с
из-за недостатка
безопасностью.
ресурсов.
Your header has one or
more invalid fieldnames.
Первая строка содержит неопознанный Исправьте заголовки (и
The invalid fieldname(s) is
заголовок. Это создает ошибку.
используйте ТV в виде "tvN", где
(are): .
Убедитесь, что все заголовки написаны N – ID TV) , или откройте ваш
правильно. В некоторых случаях
файл в notepad, скопируйте в
Первая строка содержит
проблема может возникнуть из-за
буфер обмена и вставьте в поле
одно или несколько
кодировки обрабатываемого файла.
ввода CSV textarea .
неверных имен полей.
Неверное имя поля: .
( is expected to be an
integer
Найденный заголовок элемента
начинается на TV, но не является
Исправьте один из заголовков в
( Должно быть целым
целым числом и из-за этого не может
первой строке.
числом.
быть найден нужный TV для
добавления данных.
(no TV with an ID of )
(нет TV с ID )
Заголовок с ТV верен, но нет ТV с
таким ID.
Исправьте один из заголовков в
первой строке.
(no TV with an ID
of )
(нет TV с ID )
Заголовок с ТV верен, но нет ТV с
таким ID.
Исправьте один из заголовков в первой
строке.
Пример CSV и связанные с CSV примечания.
1 pagetitle;alias;isfolder
2 Analysing;analysing;1
3 Communicating;communicating;0
4 Rock solid copy;sepiariverstudios;0
5 Editing your resources remotely;modxmobile;0
(Неинтересный фиктивный пример, я приглашаю прислать пример получше!)
Вот несколько примечания относительно CSV:
1. Убедитесь, что вы не используете разделитель в поле контента. Можете использовать разделитель
наподобие ";;;" если импортируете большой объем контента, который может содержать разделитель
";".
2. При импортировании данных, которые включают столбец “шаблон” или “пользователь" (создано темто и т.д.), убедитесь, что ваш CSV использует ID связанных объектов, а не имя.
3. Можно импортировать значения TV, создав столбец с заголовком наподобие "tv4", где “4” – это ID TV.
4.
Вопросы, связанные с временем выполнения.
Начиная с ImportX 1.1 можно ограничить время выполнения импортирования и получить отчет о
результатах.
Если используете Windows/IIS и испытываете проблему с синхронизацией по времени более 30
секунд, посмотрите на доступные решения, размещенные на нашем форуме.
Обновление данных вместо создания нового ресурса.
Начиная с версии 1.1 можно изменять системные настройки importx.processor с “создать” на
“обновить”, для обновления ресурсов, основанных на ID, которое выполняется согласно запроса.
Если ресурс не найден, он создается.
Форматы, отличные от CSV
Начиная с версии 1.1 можно использовать больше форматов данных, если есть дополнение, которое
их нормализует.
Это может быть достигнуто созданием нового класса (смотри
core/components/importx/processors/prepare/ - prepare.class.php основной класс, который вы можете
усовершенствовать, csv.php также используется в этих целях) и внесением новых importx.datatype
системных установок в имя вашего файла (кроме части ".php").
На этом все про CSV, но я буду очень признателен, если кто-то сделает возможным использование
XML или других форматов. Не стесняйтесь обращаться ко мне (hello@markhamstra.com) если у вас
появился интерес к этому, но требуется какая-то помощь в вопросе "что делать?".
И наконец…
Пользуйтесь!
Если столкнулись с какими-либо трудностями, не описанными выше, дайте мне знать об этом на
Github: https://github.com/Mark-H/importX
На Github также можно отправлять отчеты об ошибках и запросах ресурсов, сможете узнать, какие
возможности будут реализованы в новых версиях.
LexRating
Описание
LexRating (от goldsky) – это jQuery плагин для отображения рейтинга, разработан на основе
rateit.codeplex.com (от gidon).
При работе с MODX это расширение использует AJAX при хранении рейтинга.
Получить его можно, загрузив с помощью Package Manager.
Существует два сниппета для данного программного продукта:
1. LexRating,
2. LexRatingList, для создания списка рейтинга.
LexRating
Этот сниппет предлагает вэб посетителям ставить рейтинг объектам, статьям, и основан на логине.
Сниппет проверяет IP посетителя, если посетитель вошел под своим логином, то по ID.
Свойства
Описани
Пример
е
Определя
ет имя
name
рейтингу &name=`LexRating`
емого
объекта.
Определ
яет имя
группово
го
рейтинга.
Это
полезно
group для
&group=`articles`
сравнени
я
результат
ов с
помощью
LexRatin
gList
Определя
ет тех,
userGro кто
&userGroups=`Members`
ups
может
голосова
ть
Загружае
т
начальны
initialAj
е
&initialAjax=`1`
ax
значения
помощью
Ajax
Шаблон
чанка для
выходны
х данных,
может
&tpl=`/home/v/vincitci/modx.cc/public_htm
tpl
быть
l/core/templates/blabla.tpl`
чанком
ил
файлом
на базе
Имя
Значение по умолчанию
Опции
535
string
modResource
string
empty
Группа
имен,
раздели
тель –
запятая
1
1|0
lexrating
Имя
чанка и
или
адрес
чанка.
css
Имя
файла
CSS
&css=`assets/templates/css/blabla.css`
js
Имя
файла
java
скрипта
&css=`assets/templates/js/blabla.js`
Автозагр
узка
/отключе
loadjQu
ние
&loadjQuery=`0`
ery
автозагру
зки
jQuery
Префикс
phsPrefi
плейсхол &phsPrefix=`blabla.`
x
дера.
Возвраща
ет массив
toArray
&toArray=`1`
плейсхол
деров.
Сохраняе
т
выходны
е данные
toPlaceh
в
&toPlaceholder=`my_rating`
older
плейсхол
дере с
заданным
именем.
Строков
ое
значени
assets/components/lexrating/defa е, если
ult/css/lexrating.css
пустое
– не
использ
уется
Строков
ое
значени
assets/components/lexrating/defa е, если
ult/js/lexrating.js
пустое
– не
использ
уется
1
1|0
lexrating.
string
null
1|0|
null
null
string
Плейсхолдеры
Для получения полного плейсхолдера используйте &toArray=`1` для удаления меток.
Имя
Описание
[[+lexrating.name]]
Имя, задаваемое в сниппете.
[[+lexrating.group]]
Группа имен, которую задаете в сниппете
[[+lexrating.total.voters]] Общее число проголосовавших.
[[+lexrating.initialAjax]]
Свойства, которые задаете в вызове сниппета.
Пример
[[LexRating? &name=`[[*pagetitle]]` &group=`articles`
&userGroups=`Members`]]
LexRatingList
Этот сниппет обрабатывает результаты LexRating, исходя из заданного имени группы.
Свойства
Имя
group
limit
offset
sort
Описание
Пример
Извлекаемо
е имя
&group=`articles`
группы
Ограничен
ие числа
&limit=`10`
выходных
данных
Величина
смещения &offset=`10`
Query
Направлен
ие
&sort=`asc`
классифика
ции
Шаблонны
й чанк для
оформлени
tplListWra я, может
pper
быть
чанком или
чанком на
базе файла
Шаблон
tplListItem ный чанк
для
Значение по умолчанию
Опции
modResource
string
10
int
0
int
desc
asc (от
меньшего
к
большем
у-hi) |
desc (от
большего
к
меньшем
у)
&tplListWrapper=`lexratinglis
lexratinglist.wrapper
t.wrapper`
Имя
чанка или
путь к
файлу
&tplListItem=`lexratinglist.ite
lexratinglist.item
m`
Имя
чанка или
путь к
каждого
элемента,
может быть
чанком или
чанком на
базе файла
файлу
Строково
е
значение,
имя файла &css=`assets/templates/css/bla assets/components/lexrating/default/css если
css
CSS
bla.css`
/lexrating.css
пустое –
не
использу
ется
Строково
е
значение,
Имя файла
&css=`assets/templates/js/blab assets/components/lexrating/default/js/l если
js
java
la.js`
exrating.js
пустое –
скрипта
не
использу
ется
Автозагруз
ка
/отключени
loadjQuery
&loadjQuery=`0`
1
1|0
е
автозагрузк
и jQuery
Префикс
phsPrefix плейсхолде &phsPrefix=`blabla.`
lexrating.
String
ров.
Возвращае
т массив
toArray
&toArray=`1`
null
1 | 0 | null
плейсхолде
ров.
Сохраняет
выходные
данные в
toPlacehol
плейсхолде &toPlaceholder=`my_rating` null
String
der
ре с
заданным
именем.
Placeholders
Для получения полного плейсхолдера используйте &toArray=`1` для удаления меток.
Оформление
Имя
Описание
[[+lexrating.list.items]] Холдер списка элементов
Список
Name
Description
[[+lexrating.name]]
Имя, задаваемое в сниппете.
[[+lexrating.group]]
Группа имен, которую задаете в сниппете
[[+lexrating.total.voters]] Общее число проголосовавших.
[[+lexrating.initialAjax]] Свойства, которые задаете в вызове сниппета.
Пример
[[LexRatingList? &group=`articles`]]<br /><br /><br />
Download