We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 26734
    • 23 Posts
    Здравствуйте.

    Пользуя Wayfinder для построения менюхи, столкнулся со следующей проблемой: понадобилось исключить документы потомков указанных пунктов. Т.е. попользовать что-то вроде параметра excludeDocs, но с тем условием, что список его аргументов - родители. А исключаются - их дети. Такое действо нужно, когда в родительском контенте вызывается Ditto, собирающий контент деток. А сами детки не попадают в подпункты строящегося Wayfinder’ом меню. При этом, количество деток - есть число динамическое.
    Недолго ковырявшись в коде Wayfinder’а, равно как и не сильно оптимизируя оный, соделал нижеописанное решение.

    1. к параметрам Wayfinder’а ( $wf->_config = array... ) добавил параметр excludeChildren.
    $wf->_config = array(
    	...
    	'excludeChildren' => isset($excludeChildren) ? $excludeChildren : 0,
    	...
    


    2. в файле wayfinder.inc.php подшаманил:
    метод getData
    после строк
    if ($this->_config['excludeDocs']) {
    	$menuWhere .= " AND (sc.id NOT IN ({$this->_config['excludeDocs']}))";
    }
    

    добавляем:
    if ($this->_config['excludeChildren']) {
    	$parentIDs = array();
    	$parentIDs = explode(',',$this->_config['excludeChildren']);
    	if (!empty($parentIDs)) {
    		foreach ($parentIDs as $parentID) {
    			$childIDs = array();
    			$childIDs = $modx->getChildIds($parentID,$this->_config['level']);
    			if (!empty($childIDs)) {
    				$children = implode(",",$childIDs);
    				$menuWhere .= " AND (sc.id NOT IN ($children))";
    			}
    		}
    	}
    }
    


    3.Вызов Wayfinder’а:
    [[Wayfinder? &startId=`23` &level=`2` &excludeChildren=`25,30`]]
    


    В заключение:
    1. признаю, что ковырять чужой код не всегда приятно/этично/безопасно/красиво.
    2. признаю, что наспех наваяное мной чудо надо подвергнуть детальному просмотру/анализу/тестированию.
    3.признаю, что предложенный мной код не является оптимальным с точки зрения построения запроса в части WHERE.
    4. просю ответственных товарищей, общающихся с автором Wayfinder’а, предложить вышеобозначенному автору внести изменения в код Wayfinder’а, дабы подобный функционал присутствовал в официальных версиях.
    5. заранее прошу извинения за причиненные неудобства.

    Спасибо.
      • 17459
      • 268 Posts
      оффтопик...

      я не люблю Wayfinder... медленный... что-то в нём ещё не хватает... не помню уже что... вообщем сделал на дитте когда потребовалось... дитта в дитте