В некоторых случаях в Simpla скрипт неверно определяет локальный адрес текущей страницы, и в частности, локальную папку, в которую установлена CMS.
В файле view/View.php есть строка
$subdir = substr(dirname(dirname(_FILE__)), strlen($_SERVER['DOCUMENT_ROOT']));
Она используется для определения типа страницы.
Такое действие предполагает, что значения _FILE__ и $_SERVER['DOCUMENT_ROOT'] начинаются от одного корня. Однако это работает не на всех хостингах. Встретился недавно случай, когда эти значения таковы
/usr/home/b/domains/...
/home/b/domains/...
Из-за этого неверно определяется $this->page со всеми вытекающими последствиями...
Вообще в Simpla в процессе формирования страницы скрипт дважды определяет локальный адрес текущей страницы, и в частности, локальную папку, в которую установлена CMS.
Первый раз в api/Config.php, второй - в файле view/View.php
Почему-то это делается разными способами. В первом случае
// Вычисляем DOCUMENT_ROOT вручную, так как иногда в нем находится что-то левое
$localpath=getenv("SCRIPT_NAME");
$absolutepath=getenv("SCRIPT_FILENAME");
$_SERVER['DOCUMENT_ROOT']=substr($absolutepath,0,strpos($absolutepath,$localpath));
// Адрес сайта - тоже одна из настроек, но вычисляем его автоматически, а не берем из файла
$script_dir1 = realpath(dirname(dirname(_FILE__)));
$script_dir2 = realpath($_SERVER['DOCUMENT_ROOT']);
$subdir = trim(substr($script_dir1, strlen($script_dir2)), "/\\");
Во втором
// Текущая страница (если есть)
$subdir = substr(dirname(dirname(_FILE__)), strlen($_SERVER['DOCUMENT_ROOT']));
$page_url = trim(substr($_SERVER['REQUEST_URI'], strlen($subdir)),"/");
if(strpos($page_url, '?') !== false)
$page_url = substr($page_url, 0, strpos($page_url, '?'));
Результат их действия этих двух способов не всегда одинаков. Даже несмотря на то, что первом случае скрипт исправляет суперглобальную переменную
$_SERVER['DOCUMENT_ROOT'], а во втором она испрльзуется уже в исправленном виде.
Явно имеем некоторую путаницу.
Возможно, стоило бы значение $page_url определять сразу же в api/Config.php и записывать для хранения в $this->vars.
Или запоминать как-то еще, если не хочется хранить этот значение рядом с фундаментальными настройками.
Во всяком случае, определять значения надо ОДИН РАЗ в одном месте. Как известно, повтор кода - риск дополнительных ошибок...