MODX. Публикации из фронт энда, компонент NewsPublisher

NewsPublisher — компонент для публикации ресурсов из фронт-енда. Работает с деревом ресурсов, дополнениями Collections и Articles.

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

[[!NewsPublisher]]

Если будет использоваться дополнение Articles, то вызов должен содержать как минимум такие параметры:

[[!NewsPublisher?
       &parentid — `1` // ID страницы контейнера
       &templateid — `1` //ID шаблона дочерних ресурсов 
       &classkey — `Article`
       &hidemenu — `1`
]]

Для указания полей, которые должны выводиться на странице, используется свойство 

  • &show=`pagetitle,description,pub_date,introtext,TV1,TV2`

На странице поля будут выводиться в порядке, указанном в этом свойстве.

Настройка доступа

Админ может использовать NewsPublisher по умолчанию, тогда как остальным пользователям необходимо дать разрешение на публикацию, добавив пользователю или группе политику NewsPublisherEditor. Если пользователь не авторизован, NewsPublisher перенаправляет его на страницу входа, что, впрочем, можно отключить, параметром &np_login_redirect (No,Yes). Если редирект разрешен, в параметре &np_login_id надо указать ID страницы для входа.

Работа с ресурсами

Редактирование существующих ресурсов

Для добавления возможности редактирования, в шаблоне страницы необходимо разместить тег [[NpEditThisButton]].

По умолчанию, кнопка расположена в нижней правой части страницы, и имеет несколько параметров:

  • &right — расстояние от правого края (по умолчанию 20%);
  • &bottom — расстояние от нижнего края (по умолчанию 20%);
  • &noShow — отображение кнопки можно отключить на выборочных страницах, указав идентификаторы в этом параметре;
  • &ownpagesonly — отображение кнопки только для страницы созданной пользователем;

Создание дубликата ресурса

При установке параметра &duplicatebutton = `1` появляется кнопка «дублировать ресурс», при нажатии на нее, текущий ресурс сохраняется, а пользователь перемещается на страницу редактирования новой копии ресурса.

Удаление ресурса

При установке параметра &deletebutton = `1` появляется кнопка «удалить ресурс», при нажатии на нее, текущий ресурс удаляется, так же как и потомки ресурса. При установке параметра &confirmdelete = `1` ​(по умолчанию 1) — появляется всплывающее окно с подтверждением решения удалить ресурс и его дочерние страницы. Если поставить 0, ресурсы будут удаляться без вопроса.

Параметры страницы для нового документа

&published_default
&hidemenu_default
&cacheable_default
&searchable_default
&richtext_default

Это настройки для ресурсов которые будут созданы. Каждая из них может принимать значения `1`, `0`, `Parent`, или`System Default`. Если установлено значение `parent`, будет использоваться родительское значение (в этом случае &parentid должно быть установленно). Если параметры не устанавливать, будут использоваться системные настройки. 

Настройка &published_default может быть переопределена пользователем, если он проставит поля pub_date или unpub_date.

Вкладки

Поля NewsPublisher можно разделять по вкладкам, настраивая отображение подобно админ панели MODX. Для этого надо установить параметры:

&usetabs=`1`
&tabs=`{
    "Main" :    ["pagetitle","introtext","content"],
    "Dates" :   ["pub_date", "unpub_date"],
    "Publish" : ["publish"],
    "TVs" :     ["MyTv1","MyTv2"]
}`

Параметры вкладок составляются в формате json, который имеет некоторые особенности. Ниже описано несколько правил которым стоит следовать во избежании ошибок:

  • Следует использовать двойные кавычки;
  • Название вкладок — слева, название полей — справа; 
  • Название вкладок и полей должны разделяться двоеточием;
  • Все поля должны быть указаны в параметре &show;
  • Все названия должны заключаться в двойные кавычки;
  • Названия полей обрамляются квадратными скобками;
  • Названия полей разделяются запятыми, но последнее поле отделять запятой не надо;
  • Все строки с вкладками разделяются запятыми;
  • Конструкция списка должна быть заключена в фигурные скобки (`{ }`);

Несколько страниц с NewsPublisher

Если есть необходимость в создании нескольких страниц NewsPublisher, с разными настройками и полями, просто создайте несколько страниц и разместите там соответствующие теги. Сниппет NpEditThisButton по умолчанию запускает страницу указанную в свойстве &np_id. Чтобы сниппет запускал правильную форму редактирования NewsPublisher, создайте, для страниц на которых установлен сниппет, дополнительное поле с именем NpId и пропишите там соответствующие ID.

Вызов сниппета кнопки при этом должен быть таким 

[[!NpEditThisButton? &np_id=`[[*NpId]]`]]

NewsPublisher и get/pdoResources

Кнопку редактирования ресурса можно подключить в чанках вызываемых get/pdoResources. При таком использовании, надо удалить все вызываемые теги NpEditThisButton, и создать чанк шаблона вроде этого

<div class="MyItem">
   [[+pagetitle]]
   [[+introtext]] . . . [[!NpEditThisButton? &np_edit_id=`[[+id]]`]]
</div>

Теги MODX

Из соображений безопасности, теги MODX запрещены в NewsPublisher, специальной настройкой allow_tags_in_post и удаляются из $_POSTмассива при отправке формы. Но, в NewsPublisher 2.0, при установке нужного разрешения, теги MODX работают при вызове через фигурные скобки {{ ... }}.

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

NewsPublisher системные настройки

Параметр Описание По умолчанию
NewsPublisher
np_login_redirect Если установлено 1, не авторзованные пользователи будут перенаправляться на страницу авторизации. Используйте &loginResourceId=`##` (где ## это ID страницы с NewsPublisher) для возврата пользователей обратно на страницу newspublisher после регистрации 1
np_login_id ID страницы авторизации. Используется для редиректа неавторизованных пользователей  
TinyMCE
np_tinymce_skin Интерфейс для TinyMCE. Каталог доступных интерфейсов находится по адресу assets/components/newspublisher/tinymceskins; Встроенный выбор: modxPericles, fairOphelia, fallenMacbeth, light modxPericles
elFinder
np_elfinder_tmb_size Размер привью для elFinder в NewsPublisher (в пикселях) 48
np_elfinder_remember_last_dir (string, true или false) elFinder запоминает последнюю открытую директорию  false
np_elfinder_theme Тема для elFinder использующаяся в NewsPublisher. По умолчанию присутствуют темы: osx, windows-10, moono, material osx
np_elfinder_height Высота окна elFinder в процентном соотношении от окна экрана 80
np_elfinder_width Ширина окна elFinder в процентном соотношении от окна экрана 80
np_media_source_var Имя типа медиа ресурса отправляющееся $_GET запросом от NewsPublisher к файловому менеджеру media_source

NewsPublisher настройки сниппета

Параметр Описание По умолчанию
Параметры NewsPublisher
activetab (activetabs) ? (string, опционально) Если установлено, определяет вкладку, отображающуюся при загрузке формы. Если не установлено, отображаются все вкладки (пусто)
allowedtags (опционально) HTML тэги доступные в текстовом поле <p>,<br>,<a>,<i>,<em>,<b>,<strong>,<pre>,<table>,<th>,<td>,<tr>,<img>,<span>,<div>,<h1>,<h2>,<h3>,<h4>,<h5>,<font>,<ul>,<ol>,<li>,<dl>,<dt>,<dd>,<object>,<blockquote>,<code>,
badwords (string, опционально) Разделенный запятыми список слов, которые должны фильтроваться в полях (пусто)
cancelid (integer, опционально) ID страницы на которую пользователь должен пересылаться для отмены. Если вам не нужна кнопка отмены, просто удалите ее из чанка  npOuterTpl http_referer
captions (опционально) Пользовательские описания — разделенный запятыми список типа ИмяПоля:ОписаниеПоля. Пример: &captions=`introtext:Резюме,content:Введите вашу должность` (пусто)
clearcache (опционально) Когда установлено 1, NewsPublisher будет чистить кеш сайта после сохранения ресурса 1
contentcols (опционально) Столбцы для контентного поля 60
contentrows (опционально) Строки в контентном поле 10
cssfile (string, опционально) Путь до пользовательского CSS файла. Установите `0` если нет CSS файла, если вы хотите использовать ваш основной CSS файл. Файл по умолчанию находится по адресу assets/newspublisher/css/ newspublisher.css
groups (опционально) Список групп ресурсов, разделенных запятыми, для назначения новым страницам. Может быть установлено значение `Parent` для использования родительских групп (пусто)
hoverhelp (0/1, опционально) Всплывает подсказка когда мыш наводится на описание поля (но не на само поле). В MODX подсказки показываются для полей ресурсов, для дополнительных TV полей отображается описание 1
initdatepicker (опционально) Инициализирует выбор даты. Устанавливается при наличииполя с датой 1
initfilebrowser Инициализирует файловый менеджер для использования текстового редактора и файловых полей 0
initrte (опционально) Инициализирует текстовый редактор. Устанавливайте, если есть какая либо текстовая область 0
intmaxlength (integer, опционально) Максимальная длинна для числового поля 10
language (string, опционально) Язык который должен использоваться в форме (в порядке очереди) cultureKey, manager_language, en
listboxmax (integer, опционально) Максимальное значение поля списка, все что не уместилось будет доступно с помощью скрола 8
multiplelistboxmax (опционально)  Максимальная длинна для мульти списков  20
notifychecked  (0/1, опционально) Если установлено, вместе с опцией &shownotify, уведомления будут появлятся по умолчанию 0
parents Разделенный запятыми список родительских ID для выбора пользователем (должен быть IDs или Контекстный ключ). Если &parentid установлен, он будет появлятся в списке. Примечание: для новых ресурсов могут потребоваться права new_document_in_root  (пусто)
postid (опционально) ID документа подгружаемого при успешной отправке Страница создания или редактирования
prefix (string, опционально) Пользовательский префикс для использования плейсхолдеров; По умолчанию: `np`. Это свойство необходимо если плейсхолдеры могут вступить в конфликт с другими плейсхолдерами на странице. Важно: не используйте точки в пользовательских префиксах np
readonly (string, опционально) Разделенный запятыми список полей доступных только для чтения.Не работает со списками, чекбоксами, радиокнопками, текстовыми редакторами. ID поле всегда доступно только для чтения (пусто)
required (string, опционально) Разделенный запятыми список обязательных полей pagetitle,content
rtcontent (опционально) Использовать текстовый редактор для поля контента  0
rtsummary (опционально) Использовать текстовый редактор анонсного поля (introtext)  0
show (опционально) Разделенный запятыми список полей для показа  pagetitle,longtitle,hidemenu,published,description,menutitle,pub_date,unpub_date,introtext,content
stopOnBadTv (0/1, опционально) Остановится и выведет сообщение об ошибке, если указанное в &show поле не прикреплено к используемому шаблону. Если установлено `0`, неприкрепленное поле проигнорируется, и форма отобразится без него 1
stopOnNoRte (опционально)Если установлен 0, &show может включать текстовые области без ошибки при провале инициализации виз редактора  1
summarycols (опционально) Количество колонок в анонсном поле (introtext)  60
summaryrows (опционально) Количество строк в анонсном поле (introtext)  10
shownotify  (0/1, опционально) Если установлено, включается опция уведомления. Если включено, Уведомление появится при успешном добавлении ресурса 0
tabs (JSON string. Требуется если установлен параметр &usetabs) JSON строка указывающая какие поля на каких вкладках отображать. Не указанные поля окажутся на вкладке «Другие» (пусто)
templates (опционально) Разделенный запятыми список ID шаблонов, доступный для выбора пользователям. Если &template установлен, он будет доступен в списке  (пусто)
textmaxlength (integer, опционально) Максимальная длинна для текстовых полей 60
tinyheight (string, опционально) Высота области текстового редактора 400px
tinysource Источник для подгрузки TinyMCE //cdn.tinymce.com/4/tinymce.min.js
tinywidth (string, опционально) Ширина области виз редактора 95%
usetabs (0/1, опционально) Если установлено, поля отображаются на отдельных вкладках 0
which_editor Какой визуальный редактор использовать; На текущий момент TinyMCE единственный доступный выбор TinyMCE
Настройки полей ресурса
aliasdateformat (опционально) Формат строки для авто проставления даты  PHP date + time format
aliasprefix (опционально) Префикс для ссылок новых ресурсов с пустым полем Псевдоним (alias). Пседоним будет иметь вид aliasprefix-timestamp (пусто)
aliastitle (опционально) Если установлено 1, в качестве псевдонима (alias) используется заголовок страницы приведенный в нижний регистр, и разделенный дефисами. Если установлено 0, используется 'article-(date created)'. Игнорируется если поле псевдонима заполнено в форме  1
cacheable (опционально) Установка флага, определяющего, будет ли кешироваться новый ресурс. Если установить `parent` то будет соответствовать статусу публикации родителя System Default
classkey (string, опционально) Class key, указывающий на особые условия создания новых ресурсов.  Например если вы расширили обьект создания ресурса или используете плагины вроде Articles (установите Article) modDocument
hidemenu (опционально) Установка флага, определяющего, будут ли новые ресурсы отображаться в меню. Если установить `parent` то будет соответствовать статусу публикации родителя System Default
parentid (опционально) ID папки, где новые документы будут храниться Папка где установлен NewsPublisher. Для принудительного создания родителя, установите это значение и не отображайте родительское поле (?)
presets Предустановленные значения для новых полей документа: `content:Какой-либо текст,introtext `introtext`
published (опционально) Устанавливает новые ресурсы как опубликованные или нет (переопределяется полями: "дата публикации" и "дата снятия с публикации"). Если установить `parent` то будет соответствовать статусу публикации родителя System Default
richtext (опционально) Устанавливает флаг, использовать ли визуальный редактор при редактировании из панели менеджера. Для новых ресурсов, установка параметра `Parent` будет использовать параметры родителя System Default
searchable (опционально) Устанавливает флаг, который определяет участвует ли новая страница в поиске по сайту. Для новых ресурсов,установка параметра `Parent` будет использовать параметры родителя System Default
template (опционально) Имя или ID шаблона, который используется для новых документов. Для новых ресурсов, установленное значение `Parent` указывает что надо использовать шаблон родителя. Для того чтобы работало значение `parent`, должен быть установлен параметр &parentid  шаблон по умолчанию, установленный системой
Шаблоны
booltpl (опционально) поле стандартных полей типа boolean (галки опубликовано, скрыто из меню и т.п.) npBoolTpl
datetpl (опционально) поле даты npDateTpl
elfinderinittpl (опционально) инициализация elFinder (файловый менеджер)  
errortpl (опционально) шаблон чанка ошибки для формы. Должен содержать плейсхолдеры npErrorTpl
fielderrortpl (опционально) шаблон чанка ошибки для поля. Должен содержать плейсхолдеры npFieldErrorTpl
filetpl (опционально) шаблон загрузки файла  
imagetpl (опционально) шаблон загрузки изображения  
inttpl (опционально) числовое поле npIntTpl
listoutertpl (опционально) обертка списка  
listoptiontpl (опционально) пункты списка npListOptionTpl
optionoutertpl (опционально) обертка tv полей типа boolean npOptionOuterTpl
optiontpl (опционально) чанк единицы значения tv полей типа boolean npOptionTpl
outertpl (опционально) обертка формы с полями npOuterTpl
richtexttpl (опционально) визуальный редактор  
textareatpl (опционально) текстовое поле  
texttpl (опционально) текстовая строка npTextTpl
tinymceinittpl (опционально) инициализация tinyMCE (визуальный редактор)

Параметры сниппета NpEditThisButton

Параметр Описание По умолчанию
bottom (опционально) расстояние от низа окна до кнопки. Может принимать любое доступное в CSS значение 20%
debug (опционально) Показывает кнопку на всех страницах, с описанием, обьясняющим почему сниппет не будет отображаться  0
editHome (опционально) показывать кнопку редактирования на главной странице 0
language (опционально) язык для сообщений об ошибке (пусто)
noShow разделенный запятыми список ID документов, на которых кнопка не отображается ID главной страницы и страниц на которых установлен NewsPublisher 
np_edit_id ID страницы для редактирования (настройки параметров bottom и right игнорируются, кнопка отображается инлайново). Вы можете использовать это для тега кнопки редактирования, в чанке шаблона вызова getResources, чтобы иметь несколько кнопок на странице (пусто)
np_id ID страницы NewsPublisher (устанавливается автоматически, при первом запуске); Если вы смените имя страницы NewsPublisher, понадобиться установить этот параметр вручную (пусто)
right (опционально) расстояние от правого края до кнопки. Может принимать любое доступное в CSS значение 20%
ownpagesonly (опционально) показать кнопку только для страниц созданных текущим пользователем (используется поле ресурса — createdby)

Документация от разработчика