Инструменты пользователя

Инструменты сайта


// MODx Wayfinder: неконсистентность hereClass и hereTpl

Без лишней теориотизации, настроения нет.

Есть иерархия документов, которые образуют различную вложенность меню:

  1. Пункт бокового меню
    1. Подменю 1
    2. Подменю 2
      1. Подменю в папке 1
      2. Подменю в папке 2 ← этот документ выбран
    3. Подменю 3

В этой схеме отмечено, какой документ выбран, т.е. открыт, так вот, у всего, что выделено жирным - будет установлен класс, заданный в hereClass, но только у того который обозначен жирным курсивом - будет применен hereTpl.

Причина - бага (или фича) в Wayfinder, из-за которой темплект применяется только если ID документа соответствует выбранному пункту. Вот патч который решает эту проблему:

--- wayfinder.inc.php.orig	2010-02-15 23:14:08.000000000 +1000
+++ wayfinder.inc.php	2010-02-15 23:57:03.000000000 +1000
@@ -152,7 +152,7 @@
             $usedTemplate = 'parentRowHereTpl';
         } elseif ($resource['id'] == $modx->documentObject['id'] && $this->_templates['innerHereTpl'] && $resource['level'] > 1) {
             $usedTemplate = 'innerHereTpl';
-        } elseif ($resource['id'] == $modx->documentObject['id'] && $this->_templates['hereTpl']) {
+        } elseif ($this->isHere($resource['id']) && $this->_templates['hereTpl']) {
             $usedTemplate = 'hereTpl';
         } elseif ($resource['isfolder'] && $this->_templates['activeParentRowTpl'] && ($resource['level'] < $this->_config['level'] || $this->_config['level'] == 0) && $this->isHere($resource['id'])) {
             $usedTemplate = 'activeParentRowTpl';

Т.е. простое сравнение заменяем на поиск того, что Id документа есть среди потомков при построении вышестоящих пунктов меню.

А эта бага меня часа 4 упорно уверяла, что я тупее паровоза.

Комментарии