pdoTools
pdoTools copied to clipboard
ElementhPath when using @FILE can not be outside of MODX_BASE_PATH
When using @FILE to include tpl files, MODX_BASE_PATH is alway's added, and ../ does not work because those are also stripped.
if (strpos($path, MODX_BASE_PATH) === false && strpos($path, MODX_CORE_PATH) === false) { $path = MODX_BASE_PATH . $path; }
Our Elements are outside the MODX_BASE_PATH, on the same level as our CORE_Path. There is no way for us now, to reach those elements when using @FILE...
Any suggestions?
My suggestion would be that this MODX_BASE_PATH replacements must be a option maybe? if there is a setting to disable this or add other Constance to use there, Or remove the part where all dots are removed, so that we can use ../ to go one folder up.
Any suggestions?
Может быть использовать функцию realpath?
Например, код:
echo realpath(MODX_BASE_PATH.'/core/../assets/');
на выходе дает:
/home/modx.local/public_html/assets
Т.е. в итоге код получится такой (насколько понимаю):
if (strpos($path, MODX_BASE_PATH) === false && strpos($path, MODX_CORE_PATH) === false) {
$path = realpath(MODX_BASE_PATH . $path);
}
Соответственно, если написать в path: ../elements/,
тогда реальное значение будет: /home/modx.local/elements/.
MODX_BASE_PATH: /home/modx.local/public_html/
@EMDM45 Две точки позволяют выйти на любой уровень. Чем здесь поможет realpath?
@EMDM45 Две точки позволяют выйти на любой уровень. Чем здесь поможет realpath?
Как я понял, что как раз таки у автора две точки не работают почему-то:
and ../ does not work
А realpath преобразует все точки, случайные двойные // и прочее в правильный абсолютный путь. И еще проверяет на существование файла. Поэтому и предложил... ну вдруг поможет :) Возможно где-то в другом месте кода...
2 точки не работают по причине того, что pdoTools не разрешает выходить за пределы сайта. А автор топика вынес файловые элементы выше корня сайта.
П.С. На самом деле каждый может написать свой вариант. Для этого нужно расширить класс pdoTools и указать его в системных настройках.
This is still the problem, the strange thing is that this check for MODX_BASE_PATH or MODX_CORE_PATH is only in the @FILE part, but when you use and file: {include 'file:elements/chunk/structure/head.tpl'} this check is not done, and our elements path works fine, I think that this check in @FILE should be removed. there is no need for it, because if you use file: for includes you need to set the whole path anayway.