Сниипет для использования alias вместо ID в Modx Revolution
Столкнулся с проблемой, решения которой в интернете найти не смог, пришлось обращаться за помощью к знатокам 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;
Оптимизировано для работы в рамках контекста!
Оставьте комментарий