Правим проблему работы кастомного класса mFilter2 при выносе папки core за корневой каталог
На днях обнаружил в mSearch2 при вызове сниппета mFilter2 и выставлении в настройке «mse2_filters_handler_class» кастомного класса (соответственно создав в необходимой директории файл и расширив в нем стандартный класс филтров), при вынесении папки core за корневой каталог (к примеру на уровень выше), то мы получаем неправильные пути для поиска файлов кастомных классов в mFelter2, поэтому наш кастомный класс не работает. Вот к примеру:
modx_core_path у нас:
Т.е. если папка core у нас находится на уровень выше, чем modx_base_path, а не находится в нем, то путь до папки с кастомными файлами mSearch2 склеивается с modx_base_path и на выходе мы получаем, что файлы кастомных классов ищутся в несуществующем каталоге:
Хотел написать в ТП на modstore, чтоб Василий поправил это в последующих версиях, но там уже закончился срок поддержки, а продлевать нет необходимости, т.к. проблему решил сам, но хотелось бы, чтоб в следующей версии это было решено из коробки, так что под катом выкладываю временное решение для тех, кто с этим тоже столкнется и в надежде, что Василий тоже увидит и поправит в следующих версиях.
Решение
В файле:
Раз уж опубликовал этот пост в раздел пошаговые инструкции, то немного описания)
В данном изменении мы плюсом добавляем еще одно условие, в котором ищем вхождение подстроки MODX_BASE_PATH в MODX_CORE_PATH если да, то склеиваем, если нет, то оставляем.
Простыми словами, если базовый путь:
Внимание!!! Эти изменения ВОЗМОЖНО могут повлиять на что то другое в работе mSearch2, т.к. у меня не было времени разобрать, при каком условии у нас $customPath будет не полным путем, но у меня пока всё работает без проблем. Ну и не забываем, что, пока эта проблема не исправлена Василием, то при обновлениях все затрется.
Ну и чтоб не было лишних вопросов, от тех, кто не в курсе, типа «зачем вообще может понадобиться выносить папку core за корневую директорию?», скажу сразу, что для безопасности (как это сделано во многих фреймворках «из коробки», к примеру в laravel), а еще ее плюсом, даже там лучше переименовать (перенос и переименование для меня уже, как правило для своих проектов, ну еще конечно не забываем про правильные права доступа).
Как расширять класс фильтров есть на docs.modx.pro
modx_core_path у нас:
/home/s12187/core/
modx_base_path у нас: /home/s12187/www/
Получаем ошибку в логе:[2017-12-14 08:53:22] (ERROR @ /home/s12187/core/components/msearch2/model/msearch2/msearch2.class.php : 243) [mSearch2] Custom path is not exists: "/home/s12187/www/home/s12187/core/components/msearch2/custom/filters"
Т.е. если папка core у нас находится на уровень выше, чем modx_base_path, а не находится в нем, то путь до папки с кастомными файлами mSearch2 склеивается с modx_base_path и на выходе мы получаем, что файлы кастомных классов ищутся в несуществующем каталоге:
/home/s12187/www/home/s12187/core/components/msearch2/custom/filters
Хотел написать в ТП на modstore, чтоб Василий поправил это в последующих версиях, но там уже закончился срок поддержки, а продлевать нет необходимости, т.к. проблему решил сам, но хотелось бы, чтоб в следующей версии это было решено из коробки, так что под катом выкладываю временное решение для тех, кто с этим тоже столкнется и в надежде, что Василий тоже увидит и поправит в следующих версиях.
Решение
В файле:
/core/components/msearch2/model/msearch2/msearch2.class.php
На 231 строке меняем:if (strpos($customPath, MODX_BASE_PATH) === false) {
$customPath = MODX_BASE_PATH . ltrim($customPath, '/');
}
на:if (strpos($customPath, MODX_BASE_PATH) === false && strpos(MODX_CORE_PATH, MODX_BASE_PATH) === true) {
$customPath = MODX_BASE_PATH . ltrim($customPath, '/');
}
Раз уж опубликовал этот пост в раздел пошаговые инструкции, то немного описания)
В данном изменении мы плюсом добавляем еще одно условие, в котором ищем вхождение подстроки MODX_BASE_PATH в MODX_CORE_PATH если да, то склеиваем, если нет, то оставляем.
Простыми словами, если базовый путь:
/home/s12187/www/
Содержится в пути папки core:/home/s12187/www/core/
То всё работает как раньше, а если папка core вынесена за базовый путь, как в нашем случае, то /home/s12187/www/
не будет найдена в /home/s12187/core/
и склейки не будет.Внимание!!! Эти изменения ВОЗМОЖНО могут повлиять на что то другое в работе mSearch2, т.к. у меня не было времени разобрать, при каком условии у нас $customPath будет не полным путем, но у меня пока всё работает без проблем. Ну и не забываем, что, пока эта проблема не исправлена Василием, то при обновлениях все затрется.
Ну и чтоб не было лишних вопросов, от тех, кто не в курсе, типа «зачем вообще может понадобиться выносить папку core за корневую директорию?», скажу сразу, что для безопасности (как это сделано во многих фреймворках «из коробки», к примеру в laravel), а еще ее плюсом, даже там лучше переименовать (перенос и переименование для меня уже, как правило для своих проектов, ну еще конечно не забываем про правильные права доступа).
Как расширять класс фильтров есть на docs.modx.pro
Комментарии: 3
но хотелось бы, чтоб в следующей версии это было решено из коробкиСпасибо, исправлю.
Исправил, выложил обновление.
Спасибо
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.