Хлебные крошки в админке MODX

<?php
if ($modx->event->name == 'OnDocFormPrerender') {    
	if (!$id = $modx->controller->resourceArray['id']) {
		return;
	}
	$resources = array();
    foreach ($modx->getParentIds($id, 10, array('context' => 'web')) as $parentId) {
		if ($parentId) array_push($resources, $parentId);		
    }    
	natsort($resources);
	$resources[] = $id;
	
	$setting = $modx->getObject('modSystemSetting', 'settings_version');
    $version = explode('.',$setting->get('value'));
    $url = MODX_MANAGER_URL.'/manager/index.php?a=30&id=';
    if($version[1]==3){
        $url = MODX_MANAGER_URL.'?a=resource/update&id=';
    }
	
	$level = 0;
    $childTemplates = '<a style="color: #333;" href="'.MODX_MANAGER_URL.'">Панель</a> <span style="color: #333;">|</span> ';
    foreach ($resources as $resourceId) {
      $resource = $modx->getObject('modResource', $resourceId);
      if ($resourceId == $id) {
          $childTemplates .= '<span style="color: #333;">'.$resource->get('pagetitle').'</span>';
      } else {
          $childTemplates .= '<a style="color: #333;" href="'.$url.$resource->get('id').'">'.$resource->get('pagetitle').'</a> <span style="color: #333;">|</span> ';
      }
      $level++; 
    }

	
	$modx->controller->addHtml('
	<script>'."
		Ext.onReady(function() {		
			var title = Ext.select('#modx-resource-header');
			var pagetitle = Ext.select('#modx-resource-pagetitle');
			
			title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
			pagetitle.on('keyup', function(){
				title.createChild('<p style=\"padding-bottom: 15px;\">$childTemplates</p>');
			});			
		});					
		</script>	
	".'</script>');
	
	return;
}

Update
(15.10.2014) — Добавлена генерация url в зависимости от версии cms.

Исходный код: github.com/tanaevr/BreadCrumbsManager
Роман Танаев
10 октября 2014, 07:03
modx.pro
8
3 734
+8

Комментарии: 18

Василий Столейков
10 октября 2014, 12:20
0
Класс! Класс! Класс!
Очень нужная функция! Только на днях нервничал из-за их отсутствия, когда подбирал товары по id через адресную строку. Проблема в том, что не знаешь в какой категории он находится — это убивало!
Спасибо! Удобный плагин — буду использовать!
    TempName
    10 октября 2014, 18:31
    0
    Если не сложно — добавьте скриншот для информативности.
    Алексей
    13 октября 2014, 16:24
    0
    А для чего в коде переменная $level?
      Роман Танаев
      13 октября 2014, 16:34
      +1
      Эту переменную можно вывести перед названием ресурса в списке «крошек» и увидеть какой уровень вложенности он имеет. По умолчанию стоит 0.
        Алексей
        13 октября 2014, 16:38
        0
        Это я понял, до меня не сразу дошло, что ее не обязательно выводить то, спасиб.
      Александр Москвин
      14 октября 2014, 14:18
      0
      Хорошо «НО»
      Для модх 2.3.1, которая установлена с нуля ссылки идут в другом формате
      $childTemplates .= '<a style="color: #333;" href="/manager/index.php?a=30&id='.
      $resource->get('id').'">'.$resource->get('pagetitle').'</a> <span style="color: #333;">|</span> ';

      ?a=resource/update&id=4
      И не у всех manager
      Лучше поставить: MODX_MANAGER_URL
      и верстка немного кривоватая, но это уже другое дело.

      Вот так для новой версии:
      $childTemplates .= '<a style="color: #333;" href="'.MODX_MANAGER_URL.'?a=resource/update&id='.$resource->get('id').'">
      Или можно универсально через условие сделать, проверять версию модх
        Илья Уткин
        14 октября 2014, 17:09
        0
        Пришли, пожалуйста, pull-request, автор уже несколько принял. Общими усилиями сделаем симпатичный и нужный компонент.
          Александр Москвин
          15 октября 2014, 17:07
          0
          Я по большей части занимаюсь front-endом.
          Git так и не попробовал. На работе SVN. Могу покопаться и проработать код.
          Выложить изменения в строках сюда или прислать автору.
          А также потестить надо бы это всё.
          Роман Танаев
          15 октября 2014, 18:35
          +1
          Обновил код плагина согласно вашему замечанию. Теперь после проверки версии modx подставляется тот или иной url.
          Павел Левин
          14 октября 2014, 17:34
          0
          Поставил, плагин работает, не знаю на сколько сильно он улучшит юзабилити, посмотрим на практике.
          Спасибо.
            Виталий Киреев
            16 октября 2014, 08:38
            +3
            Сделал на основе MODx.BreadcrumbsPanel, который используется в менеджере пакетов:

            Будет частью modDevTools.
              Іван Клімчук
              20 октября 2014, 14:47
              0
              Виталий, а есть пример кода с панелькой? в modDevTools пока нет, но сейчас очень нужен. Оригинальный плагин слегка с багами
                Виталий Киреев
                20 октября 2014, 15:29
                0
                  Іван Клімчук
                  20 октября 2014, 18:25
                  0
                  Спасибо! Собрал, выглядит круто. Еще заказчик у меня как-то просил добавить кнопку Создать товар наверх, чтобы не лазить и правой кнопкой не жать каждый раз. Если получится сделать адекватный вариант, зашлю PR.
              Павел Левин
              16 октября 2014, 15:05
              0
              Поймал баг, использую Article, если плагин BreadCrumbsManager активен, то "создать статью" невозможно, белая страница.
                Виталий Серый
                17 октября 2014, 17:09
                0
                На гитхабе код обновленный. Возьмите оттуда.
                yani
                21 октября 2014, 10:07
                0
                Класс, мне как раз надо было выводить контекст документа, а я код прописывала в шаблоне админки, что не есть хорошо)
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  18