Крошки для админа

Как-то попался запутанный сайт и стало напрягать, что открыв ресурс для редактирования или нажав «создать дочерний» не видно, кто же собственно «папа» :) Так, по быстрому родился плагин adminNav на событие OnDocFormRender, который отображает путь к нашему ресурсу.


/**
 * adminNav
 *
 * Крошки для админа
 *
 * @author      webber (web-ber12@yandex.ru)
 * @category    plugin
 * @version     0.1
 * @license     http://www.gnu.org/copyleft/gpl.html GNU Public License (GPL)
 * @internal    @events OnDocFormRender
 * @internal    @properties &use_menutitle=Подставлять menutitle;text;0
 * @internal    @installset base, sample
 * @internal    @modx_category Manager and Admin
 */

$e = &$modx->Event;
if ($e->name == 'OnDocFormRender') {
	$id = $e->params['id'];
	$out = '<b>' . $modx->config['site_name'] . '</b>';
	$tmp = array();
	if ($id) {
		//редактируем известный документ
		$tmp = $modx->getParentIds($id);
	} else if (isset($_GET['pid'])) {
		//знаем только родителя и это не корень сайта
		$id = (int)$_GET['pid'];
		$tmp = $modx->getParentIds($id);
		array_unshift($tmp, $id);
	} else {
		//родитель - корень сайта
		$id = 0;
		
	}
	$tmp = array_reverse($tmp);
	$parents = implode(',', $tmp);
	if (!empty($parents)) {
		$orderBy = " FIND_IN_SET(id, '" . $parents . "') ";
		$q = $modx->db->query("SELECT id, " . ($use_menutitle == '1' ? " IF(menutitle='', pagetitle, menutitle) as " : "") . " pagetitle FROM " . $modx->getFullTableName("site_content") . " WHERE id IN (" . $parents . ") ORDER BY " . $orderBy);
		while ($row = $modx->db->getRow($q)) {
			$out .= " → <a href='index.php?a=27&id=" . $row['id'] . "'>" . htmlentities($row['pagetitle'], ENT_QUOTES, $modx->config['modx_charset']) . "</a>"; 
		}
	}
	
$out = '
<script type="text/javascript">
	$j(document).ready(function(){
		var content = "' . $out . '";
		$j("#create_edit h1").append("<div style=\"font-size:11px;\">" + content + "</div>");
	})
</script>
';
$e->output($out);
}


На выходе должно получится примерно так



Примечание:
1. требует установленного managermanager (сейчас он стоит у всех по умолчанию)
2. должен вызываться после вызова managermanager в «порядок вызова плагинов при наступлении события».

Возможно уже есть подобные решения, но я что-то не нашел.

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

avatar
В мемориз! Спасибо огромное!
avatar
СПАСИБО! Это просто шик-модерн ;-)
  • tmih
  • 0
avatar
Круто. Пригодиться.
avatar
Прикрепите ссылку на гит, если все ок может в репозиторий Дмитрий закинет. Думаю всем пригодится. Сам иногда зная только ИД и найдя через поиск ресурс не знаешь в какой папке он лежит, а тут сразу все на лицо))
avatar
Наверное стоит скрестить с этим дополнением — modx.im/blog/addons/1294.html (:
avatar
А еще лучше — добавить в ядро и отключать через настройку.
avatar
Удобная штука. Бывает, найдешь поиском страницу, и начинаешь идти вверх по родителям, чтобы понять, где находится.
  • Shin
  • 0
avatar
Удобная штука. Такие ништяки надо в ядро сразу)
avatar
поддерживаю)
avatar
а еще можно сделать альтернативных текст, если заполнено «пункт меню», то выводить его, если нет — то «заголовок»

актуально, когда сайт оптимизирован под сео и в заголовке длинное название :)
avatar
Обновил с опциональным параметром use_menutitle. Если 1 — использовать menutitle (если заполнен), в любом другом случае — использовать только pagetitle. По умолчанию 0 — использует только pagetitle
avatar
спасибо)
avatar
тогда можно и JS дополнить)) чтобы менять заголовок и понимать что за ресурс открыт

function keyUpPagetitle(a) {
	if (a.val()) $j("#create_edit h1").text(a.val() + " ('.$content['id'].')");
	else $j("#create_edit h1").text("")
}

keyUpPagetitle($j("input[name=pagetitle]"));
$j("input[name=pagetitle]").keyup(function() {
	keyUpPagetitle($j(this))
});
  • 64j
  • +1
avatar
можно так и до вкладок дойти :)
если скажем сохранять форму при переходе в локалстораже :)
avatar
Супер! А в Рево как так сделать?
avatar
Вот, оно же тут и тут
avatar
Спасибо! Хорошие ссылки!
avatar
Почему этого плагина нет в екстрасе? или он уже включается в настройках и вшит?
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.