

Мы пилили-пилили и наконец-то допилили) Модуль evoCollection практически полностью повторяет функционал модуля Collection для MODX Revolution, и создает вкладку в корневых документах для табличного отображения дочерних ресурсов, быстрого их редактирования и создания.
С момента первого релиза сделано множество изменений и улучшений.
- Исправил мелкие и большие ошибки
- Написал модуль для задания конфигурации (очень похож по смыслу на Рево)
- Добавил различные настройки, список будет расширяться
- Сохранение по потере фокуса, либо по нажатию enter
- Сделал возможность кастомной обработки полей (подробнее ниже)
- Сделал install
- Выложил код на github (я с ним на «вы», поэтому если буду тупить — не ругайтесь=))
На данный момент есть ряд косяков:
- Нормально подружить tinyMCE у меня не удалось. Он запускается, сохраняется, но не рекомендую использовать, если у вас есть тэги code, pre и т.п. — может не очень корректно с ними поступиить.
Наблюдается небольшой глюк при изменении фотографий.
Обработка данных.
Для кастомной обработки данных необходимо в конфиге выбрать пользовательский тип данных и рядом вписать имя сниппета-обработчика.
В обработчике доступно три состояния: вывод, ввод, обработка. Ниже код, который обрабатывает дату (включен по умолчанию, чисто для приера) с пояснениями, думаю из него все будет понятно.
<?php
// $mode - получает одно из трех значений: input для ввода, output для вывода, execute при обработке.
if ($mode=='input')
{
//Выводим не страндартный type="text", а type="date" для ввода данных, плюс приводим его к нужному виду. Допустимы любые input и select. $value - значение поля.
if ($value>0)
{
$value = gmdate("Y-m-d", $value);
return '<input type="date" value="'.strip_tags($value).'">';
}
else return '<input type="date">';
}
if ($mode=='output')
{
// Выводим не в unixtime, а красивше)
if ($value)
{
$d = gmdate("d", $value);
$m = gmdate("m", $value);
if ($m==1) $m = 'января';
if ($m==2) $m = 'февраля';
if ($m==3) $m = 'марта';
if ($m==4) $m = 'апреля';
if ($m==5) $m = 'мая';
if ($m==6) $m = 'июня';
if ($m==7) $m = 'июля';
if ($m==8) $m = 'августа';
if ($m==9) $m = 'сентября';
if ($m==10) $m = 'октября';
if ($m==11) $m = 'ноября';
if ($m==12) $m = 'деабря';
$y = gmdate("Y", $value);
return = $d.' '.$m.' '.$y;
}
return 'не задано';
}
if ($mode=='execute')
{
//Т.к. получаем данные в формате YYYY-MM-DD, то нужно их привести виду Unixtime
$startdate = date($value." 12:00:00");
return strtotime($startdate);
}
Также в сниппете доступны переменные:
$did — id документа, которому принадлежит поле
$table — tv/content
$field — название текущего поля
Планы на будущее.
1) Переписать js на натив
2) Добавить мультязычность
3) Добавить различные виджеты
4) Переписать install для нового репозитария)))
Установка.
Проверено на 1.3.0+ — как на других — не знаю, но вполне вероятно что запустится)
Я устанавливаю его через текущий репозитарий =) Ссылка на архив.
Ручная установка:
Ссылка на гитхаб — github.com/liber87/evoCollection
Копируем содержимое папки /assets/plugins/evocollection/ в соответствующую на сайте
Создаем модуль «Коллекции», вставляем в него содержимое /install/assets/modules/evocollection.tpl
Создаем плагин «evoCollection», вставляем в него содержимое /install/assets/plugins/evocollection.tpl не забываем ставить галочку «Анализировать Doc».
Сейчас уезжаю на недельку — ответить, если будут вопросы, смогу чуть позже.
Dmi3yy 12.03.2018 18:02 #