Releases: AgelxNash/DocLister
2.7.5
Full Changelog: 2.7.4...2.7.5
2.7.4
Full Changelog: 2.7.3...2.7.4
2.7.3
Поддержка TV-параметров пользователей в Evo 3.
2.7.0
Исправления для PHP 8.1.
Формат даты в dateFormat теперь задается как для функции date, но и старый формат (как для strftime) тоже должен работать.
2.6.5
version update
2.5.2
add verified field to modUsers
2.5.1
2.5.1
2.5.0
Merge pull request #357 from 64j/master fix undefined variable 'where'
2.4.0
История изменений
- [Add] Добавлена поддержка шаблонизатора Blade
- [Add] Поддержка массивов параметром prepare (PR #323)
- [Add] Добавлен фильтр isnotnull (PR #330)
- [Add] Метод AssetsHelper::registerScript теперь поддерживает подключение удаленных скриптов, путь к которым начинается с //
- [Fix] Метод AssetsHelper::registerScript некорректно подключал файлы в имени которых встречалось http
- [Fix] Корректная работа фильтров для NULL значений в выборке (PR #330)
- [Fix] На уровне чанка не работали глобальные плейсхолдеры (Issue #321)
- [Fix] Убрано экранирование (добавлено при решении Issue #276) WHERE условий (Issue #322)
- [Fix] Обработка "(, ), ;" в фильтрах. Решение может вызвать конфликт обратной совместимости из-за смены имен подключаемых таблиц (Issue #276)
- [Fix] Если фильтр containsOne получает пустой список, то на выходе получался некорректный SQL запрос (PR #328)
- [Refactor] Класс DLTemplate теперь не использует метод $modx->getChunk()
Конфликты обратной совместимости
Изменение имен таблиц подключаемых фильтрами
Если вы используете фильтры tv:testA:is:A;tv:testB:is:B
то раньше сниппет DocLister формировал имена для подключаемых таблиц следующим образом
LEFT JOIN site_tmplvar_contentvalues as `dltv_testA_1` ON `dltv_testA_1`.`contentid`=`c`.`id` AND `dltv_testA_1`.`tmplvarid`=1 LEFT JOIN site_tmplvar_contentvalues as `dltv_testB_2` ON `dltv_testB_2`.`contentid`=`c`.`id` AND `dltv_testB_2`.`tmplvarid`=2
А в условия добавлялась строка
(`dltv_testA_1`.`value` = 'A' AND `dltv_testB_2`.`value` = 'B')
Теперь же, вместо dltv_testA_1 мы получим dltv_testA_2. Вместо dltv_testB_1 соответственно будет dltv_testB_2
/* JOIN */
LEFT JOIN site_tmplvar_contentvalues as `dltv_testA_2` ON `dltv_testA_2`.`contentid`=`c`.`id` AND `dltv_testA_2`.`tmplvarid`=1 LEFT JOIN site_tmplvar_contentvalues as `dltv_testB_1` ON `dltv_testB_1`.`contentid`=`c`.`id` AND `dltv_testB_1`.`tmplvarid`=2
/* WHERE */
(`dltv_testA_2`.`value` = 'A' AND `dltv_testB_1`.`value` = 'B')
Данное изменение скорее всего никак не повлияет на работу вашего сайта, если только вы не использовали имена формируемых таблиц для подстановки в запрос через настраиваемые параметры selectFields, addWhereList или groupBy
Изменение порядка подключаемых фильтров
Если раньше вы использовали фильтр tvd:testA:is:A;tv:testA:is:B
, то в первую очередь срабатывал tvd фильтр и в результате получали такой результат
/* JOIN */
LEFT JOIN site_tmplvar_contentvalues as `dltv_testA_1` ON `dltv_testA_1`.`contentid`=`c`.`id` AND `dltv_testA_1`.`tmplvarid`=1 LEFT JOIN site_tmplvars as `d_dltv_testA_1` on `d_dltv_testA_1`.`id` = 1
Теперь разбор фильтров начинается с конца, поэтому результат будет таким
LEFT JOIN site_tmplvars as `d_dltv_testA_1` on `d_dltv_testA_1`.`id` = 1 LEFT JOIN site_tmplvar_contentvalues as `dltv_testA_1` ON `dltv_testA_1`.`contentid`=`c`.`id` AND `dltv_testA_1`.`tmplvarid`=1
На порядок формирования условий это не повлияло. Результат будет не изменным
(IFNULL(`dltv_testA_1`.`value`, `d_dltv_testA_1`.`default_text`) = 'A' AND `dltv_testA_1`.`value` = 'B')
Изменение фильтрации по таблицам с NULL значениями
Если запрос выглядит как filed != 1
, а значением filed является NULL, то эти строки всё-равно игнорируются. Таким образом, происходит двойная фильтрация на уровне поведения базы данных. Чтобы этого избежать, теперь формируется запрос следующего вида
(`field` != 1 OR `field` IS NULL)
Раньше этот запрос был таким
`field` != 1
Это изменение не повлияет на работу вашего приложения, если вы производите фильтр только по стандартным таблицам EvolutionCMS.
Подключение таблицы ТВ без фильтрации
В результате исправления #328 появилась особенность в работе фильтров containsOne. Если использовать фильтр tv:testA:containsOne:
то DocLister к запросу подключит таблицу ТВ параметров testA. При этом фильтрацию по этой таблице производить не будет
LEFT JOIN site_tmplvar_contentvalues as `dltv_testA_1` ON `dltv_testA_1`.`contentid`=`c`.`id` AND `dltv_testA_1`.`tmplvarid`=1
Эту особенность можно использовать для построения нестандартных запросов через параметры selectFields, addWhereList или groupBy
Пропуск необработанных плейсхолдеров
Если раньше вызов метода
DLTemplate::getInstance($modx)->parseChunk('@CODE:[+test+]', array());
Возвращал пустой результат, т.к. плейсхолдер test был не задан, то теперь данный код вернет строку [+test+]
. Чтобы этого избежать необходимо дополнительно вызвать метод DLTemplate::cleanPHx()
$tpl = DLTemplate::getInstance($modx);
$tpl->cleanPHx($tpl->parseChunk('@CODE:[+test+]', array()));
Глобальные изменения
Добавлена поддержка шаблонизатора Blade
Внедрить поддержку шаблонизатора можно через плагин EvoBlade
Чтобы включить поддержку Blade во всех сниппетах, которые используют шаблонизатор DLTemplate, достаточно добавить префикс @B_
Таким образом, вам становятся доступны операторы шаблонизации
@B_FILE:
, @B_CODE:
и т.д.
2.3.15
Исправлены ошибки в modResource.
Добавлено кэширование совместно с evoTwig.