Процессор для breadcrumbs
Dec 20, 2014
Давно подумывал о замене стандартных компонентов breadcrumbs, процессоры MODX привлекают меня гораздо больше, да и когда работаешь в одном окружении (smarty), необходимость переключаться на другой синтаксис слегка нервирует. И вот это случилось. Представляю на ваш суд процессор для вывода цепочки родителей.
Процессор breadcrumbs.class.php я кинул в папку (modxsite)site/web <?php
class modSiteWebBreadcrumbsProcessor extends modProcessor{
public function initialize(){
$this->setDefaultProperties(array(
'startId' => 0,
'excludeDocs' => array(),
'showHidden' => true,
'showUnpub' => false,
'showDeleted' => false
));
return parent::initialize();
}
public function process() {
$bc_path = array();
$resource = $this->modx->resource;
//стоим в голове, нечего выводить
if($resource->get('id')==$this->getProperty('startId')){
return array(
'success' => true,
'message' => '',
'object' => array()
);
}
//соберем цепочку родителей
$r=$resource->toArray();
unset($r['content']);
$bc_path[]=$r;
while($resource = $resource->getOne('Parent')) {
if (in_array($resource->id, $this->getProperty('excludeDocs'))
|| !$this->getProperty('showHidden') && $resource->hidemenu
|| !$this->getProperty('showUnpub') && !$resource->published
|| !$this->getProperty('showDeleted') && $resource->deleted
){
continue;
}
$r=$resource->toArray();
unset($r['content']);
array_unshift($bc_path,$r);
if($resource->id==$this->getProperty('startId'))
break;
}
return array(
'success' => true,
'message' => '',
'object' => $bc_path,
);
}
} return 'modSiteWebBreadcrumbsProcessor'; для вывода использовал шаблон {$params=['startId'=>37]} {* это голова нужной ветки *} {processor action='site/web/breadcrumbs' ns=modxsite params=$params assign=result}
Буду благодарен любым советам по доработке.