[EVO] Переместим админку? Легко

Давно хотел иметь возможность изменять адрес админки и причин тому несколько.
  • Конфликт адреса с ispmanager
  • Безопасность сайта через скрытие инфомрации
  • Руки чесались
И когда я созрел до этого выяснилось, что переместить админку evolution не так уж и сложно. Более того, даже в ядре MODX уже заложена функция MODX::getManagerPath()

function getManagerPath() {
   global $base_url;
   $pth= $base_url . 'manager/';
   return $pth;
}


И первое, что приходит в голову — создать новую переменную в которую и вынести имя папки manager. Но не все так просто, как кажется на первый взгляд.

Несмотря на то, что в ядре есть такая замечательная функция — она нигде не используется. Хотя нет, используется целый аж 1 раз в файле manager/includes/accesscontrol.inc.php для плейсхолдера captcha_image. Но используется она там криво
$modx->setPlaceholder('captcha_image','<a href="'.MODX_MANAGER_URL.'" class="loginCaptcha"><img id="captcha_image" src="'.$modx->getManagerPath().'includes/veriword.php?rand='.rand().'" alt="'.$_lang["login_captcha_message"].'" /></a>');

Смотрим что за MODX_MANAGER_URL (файл manager/includes/config.inc.php)
if (!defined('MODX_MANAGER_URL')) define('MODX_MANAGER_URL', $site_url.'manager/');


Получается, что MODX_MANAGER_URL это тоже самое, что modx::getManagerPath(). Но даже несмотря на это, разработчики пишут код ядра как говорится «кто во что горазд».


MODX_BASE_PATH.'manager/'
$site_url.'manager/'
$base_path.'manager/'
MODX_BASE_PATH."/manager/"
$this->config["base_path"]."manager/"
$modx->config["base_path"]."manager/"
$base_url . 'manager/'
$basePath = $modx->config['base_path']; $basePath.'manager/';
$modx->regClientStartupScript("manager/");
$modx->config['site_url'].'manager/'
<?php echo $base_url?>manager/
<?php echo $base_url?>manager

и т.д. Как видно, если бы они использовали функцию getManagetPath() и константу MODX_MANAGER_URL, можно было бы всего лишь в 1 месте изменить manager на admin. А так, нам приходится все ядро перелопачивать.

Учитывая, что этот момент нигде небыл освещен все пишут свои дополнения как и разработчики ядра: «кто во что горазд». Никто не пользуется функцией и константой.

Поэтому я форкнул димину сборку github.com/AgelxNash/modx.evo.custom и сделал свои небольшие правки
  1. Добавил файл assets/cache/siteManager.php в котором определил новую константу MGR_DIR
  2. Подключил этот файл через include_once в index.php и т.п.
  3. Заменил во всех файлах сборки слово manager на MGR_DIR

Таким образом, теперь чтобы изменить адрес админки нам нужно переименовать папку manager и новое имя папки вписать в значение константы MGR_DIR. Но учтите, что если будете ставить какие-то модули или сниппеты на сайт с измененной админкой, то вам придется править файлы изменяя manager на MGR_DIR и при необходимости подключать файл assets/cache/siteManager.php

Если будете пробовать моим форком обновить свои сайты — то ничего не получится, т.к. файл manager/includes/config.inc.php у меня немного отличается от стандартных файлов других сборок. Но опять таки, отличается он только тем, что там manager изменено на MGR_DIR
Смотрите переменную $configString из файла install/instprocessor.php

Если данные правки обкатаются и багов не будет (а я думаю, что их не будет), то изменения в этом форке можно будет отправить пулл-реквестом в димину сборку оставив админку по умолчанию — manager.

8 комментариев

avatar
Я тоже когда-то решил переместить адмику, это было нечто. Делал правки почти во всех модулях т.к. там было жестко прописан путь к админке
Комментарий отредактирован 2012-12-17 13:11:35 пользователем vanchelo
avatar
Я не пойму, почему Тим не хочет взять эти правки в клиппер? Как он это обосновал?
Комментарий отредактирован 2012-12-17 13:40:36 пользователем Serg28
avatar
1) Без ручных правок config.inc.php нельзя обновить уже существующие сайты
2) Придется править кучу дополнений (хотя тут я не понимаю, т.к. можно просто оставить manager и все будет работать).
avatar
Действительно, при обновлении же можно оставить папку как есть. Странно.
avatar
На тех сайтах, где не используется описанный метод смены адреса админки и не добавлялась данная возможность, как лучше указывать путь к папке менеджера?
$modx->getManagerPath
или
MODX_MANAGER_URL
?
avatar
Это не важно.
avatar
В новой версии ispmanager есть возможность сменить адрес панели, так проще намного стало…
avatar
ага это они психанули когда отключили эту возможность)
хотя как по мне смена админки может преследовать и другие цели ) так что штука полезная в любом случае
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.