Блог Робина

Сниипет для использования alias вместо ID в Modx Revolution

11.12.2015
5064 просмотра

Столкнулся с проблемой, решения которой в интернете найти не смог, пришлось обращаться за помощью к знатокам Modx, в результате чего и родился этот сниппет. В чем суть проблемы?

Большинство плагинов Modx Revo используют в качестве источников для вывода значений, сортировки и т.п. ID ресурсов. Но как быть, когда хочется использовать не безликие ID, а понятные alias? Например указать в PdoMenu что мы хотим получить вывод из категории "Хлебные изделия" документов лепешка и пирожок? Раньше надо было писать что то типа:

 pdoMenu? &level=`1` &parents=`75` &resources=`218, 436`

где все цифры надо было выискать глазами в дереве ресурсов. С помощью плагина, представленного ниже, это можно сделать как:

 pdoMenu? &level=`1`&parents=`имя_сниппета &alias=`hleb`&resources=`имя_сниппета &alias=`lepeshka pirozhok`

А вот и код самого плагина:

 <?php if(!isset($scriptProperties['alias'])){ return ""; } if(!isset($scriptProperties['regSepFrom']) || empty($scriptProperties['regSepFrom'])){ $scriptProperties['regSepFrom'] = "/\s+/"; } if(!isset($scriptProperties['sepTo']) || empty($scriptProperties['sepTo'])){ $scriptProperties['sepTo'] = ","; } $scriptProperties['alias'] = preg_split($scriptProperties['regSepFrom'], trim($scriptProperties['alias'])); $alias = $scriptProperties['alias']; foreach($alias as $k => & $v){ $v = trim($v); if(empty($v)){ unset($scriptProperties['alias'][$k]); } } if(!isset($scriptProperties['context']) || empty($scriptProperties['context'])){ $scriptProperties['context'] = $modx->resource->get('context_key'); } if(empty($scriptProperties['alias'])){ return ""; } $aliasRes = $modx->getCollection('modResource', array('alias:IN' => $scriptProperties['alias'], 'context_key' => $scriptProperties['context'])); $result = array(); if($aliasRes){ foreach($aliasRes as $res){ $result[] = $res->get("id"); } $result = implode($scriptProperties['sepTo'], $result); } return $result;

Оптимизировано для работы в рамках контекста!

Оставьте комментарий