Плагин evoCollection - редактируем дочерние элементы (EVO)

Встала задача перекинуть сайт с самописным движком на MODX. Все бы ничего, но они привыкли к табличному представлению товаров, вот хотят чтобы также было и на MODX.
Гугл подсказал решение Евгения Борисова CResource, но с учетом того что он был написан достаточно давно, на новой версии он не запустился у меня.
Решил набросать свое решение, да че-та увлекся, и получился вполне себе приличный, хоть и бажный, универсальный плагинчик, который добавляет вкладку с дочерними ресурсами, которые можно редактировать на лету.

В чем его прелесть?

  • это не отдельный модуль, а именно плагин который создает новую вкладку с ресурсами
  • можем накидывать разные конфигурации для id и шаблонов
  • поддерживаются тв-параметры
  • есть inline редактирование, поддерживаются как картинки, так и селекты с радиокнопками и чекбоксами, плюс можем работать с визуальным редактором (остальные типы в будущем сделаю)
  • есть несколько массовых действий
  • необходим только код плагина, никаких дополнительных файлов или сниппетов


Версия сырая, со временем буду дорабатывать.
Для корректной работы необходима версия 1.3.0 и выше

Скриншоты:
Скриншот 1
Скриншот 2
Скриншот 3

Установка:
Копируем код плагина, вставляем в новый плагин, отмечаем в системных событиях OnManagerNodePrerender,OnPageNotFound,OnDocFormRender.
На 20-ой строчке конфиг, думаю все понятно из комментариев.
Да, редактирование по двойному клику, картинка по одинарному.

P.S. Решение не доведено до ума основательно, но, имхо, держать его у себя было бы бОльшим преступлением, нежели выкладывать в таком виде)

UPD: 10.09.2017

Сделал возможность добавлять ресурсы. Здесь отписал.
  • avatar
  • 15
  • +16
  • 1906

17 комментариев

avatar
Не нужно быть упомянутым Евгением Борисовым, чтобы увидеть явные проблемы с sql-инъекциями в этом плагине (:
avatar
а о каких именно инъекциях идет речь, если мы работаем только в режиме менеджера?
avatar
Так ведь никаких проверок в плагине нет, чтобы он работал только в режиме менеджера. Но и режим менеджера не повод забивать на фильтрацию данных из $_REQUEST (:
avatar
По-моему прекрасный повод)) Проверочку на манагера сделал, а фильтрацию данных… Потом) Но обязательно сделаем-с)
avatar
Все, вижу, ща поправлю)
avatar
Ребят, кто плюсики ставит, или даже минусы, подсказывайте что не нравится, будем исправлять, дополнять.
Мне тут клиент подкинул чтобы конфиг мог и пользователь задавать через выпадающий список. Я еще хотел создание ресурсов сделать и возможность просмотра «сквозь» субпапки… Может еще какие идеи есть?
Но сразу предупрежу — развивать проект дальше сможем тока на следующей неделе (выложу на гитхаб и погнали), а если у кого-то есть клиент, который сможет проспонсировать развитие данного проекта — ваще будет супер))
avatar
Этот чем заказчику не подошёл? Вообще много подобных решений, но не одно как надо не развевается, ИМХО подобным образом надо в ядро (или через плагин) вшить «Просмотр дочерних ресурсов» в документе-контейнере
avatar
подобных решений не так и много. По крайней мере тех, которые бы публично выкладывались. Заказчику не нужен этот плагин. Ему нужна была только четверть функционала (как раз одно из многих решений, про которые ты видимо писал), остальное — моя личная инициатива. Внедрение в ядро имеет место быть, но в том то и дело, что сначала нужно текущую версию довести до ума, а потом уже предлагать свое внедрение на гитхабе…
avatar
на гитхаб с включенным багтрекером
avatar
В первоначальной версии был глюк с 404-ой ошибкой. Если кто ставил на живые проекты — обновитесь. Плюс там еще пара мелких фиксов. На гит выложу скоро.
avatar
При установке на EVO 1.3.3 получаем ошибку в логе:
site/manager/includes/header.inc.php:25) in /site/stroka51/manager/includes/document.parser.class.inc.php on line 5263
А в админке в правом фрейме чистая страница и в конце: DBAPI->query(string $var1)
manager/includes/extenders/dbapi.mysqli.class.inc.php on line 299
  • Leon
  • 0
avatar
Странно, у меня на всех проектах норм… Конфиг можешь показать?
avatar
Конфиг отправил в личку. Отредактировал как сказал
liberpro и заработало.
Комментарий отредактирован 2017-08-06 18:33:03 пользователем Leon
avatar
А может кто подскажет, как сделать так, чтобы вкладка с evoCollection была выбрана по умолчанию? Или можно ли оформить как модуль эту вкладку?
  • EGO
  • 0
avatar
Удаляешь конфиг и вот эту конструкцию:
if (empty($configuration)) return;
$output.='';
foreach($configuration as $conf)
{
	if (($conf['type']=='ids') && ($modx->db->getValue('Select count(*) from '.$modx->getFullTableName('site_content').' where '.$id.' in ('.$conf[value].')'))) 
	{
		$fields=$conf[fields];
		$default_template = $conf[default_template];
	}
	$template = $modx->db->getValue('Select template from '.$modx->getFullTableName('site_content').' where id='.$id);
	if (($conf['type']=='template') && ($modx->db->getValue('Select count(*) from '.$modx->getFullTableName('site_content').' where '.$template.' in ('.$conf[value].')')))
	{
		$fields=$conf[fields];	
		$default_template = $conf[default_template];
	}

}

и вместо нее просто пишешь:
$fields = 'id,pagetitle,alias,longtitle';

А вот на счет вкладки не понял, она же и так, как вкладка работает...)
avatar
Про вкладку по умолчанию — имел ввиду, что при выборе документа по умолчанию была выбрана вкладка с evoCollection.
Про модуль не совсем понял, т.к. в плагине же ещё обработка событий идёт… х_х
avatar
Просьба — сохраните в UTF8 кодировке текст плагина.
Не разобрался, что нужно вставить в Properties plugin'a, чтобы появились опции конфигурации
Thx
Комментарий отредактирован 2017-10-18 14:02:35 пользователем labasus
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.