Skip to content

Releases: AgelxNash/DocLister

2.7.5

20 May 21:16
72a8751
Compare
Choose a tag to compare

Full Changelog: 2.7.4...2.7.5

2.7.4

14 Jan 09:33
1c74d64
Compare
Choose a tag to compare

Full Changelog: 2.7.3...2.7.4

2.7.3

19 Nov 02:16
5506b6c
Compare
Choose a tag to compare

Поддержка TV-параметров пользователей в Evo 3.

2.7.0

05 Apr 09:21
122e94b
Compare
Choose a tag to compare

Исправления для PHP 8.1.
Формат даты в dateFormat теперь задается как для функции date, но и старый формат (как для strftime) тоже должен работать.

2.6.5

05 Apr 09:04
ed9a64e
Compare
Choose a tag to compare
version update

2.5.2

25 Dec 18:47
e9bcdc8
Compare
Choose a tag to compare
add verified field to modUsers

2.5.1

25 Dec 18:14
d55c0b2
Compare
Choose a tag to compare
2.5.1

2.5.0

09 Nov 08:08
ad09477
Compare
Choose a tag to compare
Merge pull request #357 from 64j/master

fix undefined variable 'where'

2.4.0

01 Nov 14:07
f299379
Compare
Choose a tag to compare

История изменений

  • [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

28 Apr 10:44
Compare
Choose a tag to compare

Исправлены ошибки в modResource.
Добавлено кэширование совместно с evoTwig.