Skip to content

Instantly share code, notes, and snippets.

@AgelxNash
Created October 19, 2012 07:32
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AgelxNash/3916738 to your computer and use it in GitHub Desktop.
Save AgelxNash/3916738 to your computer and use it in GitHub Desktop.
HtmlFromNabor
<?php
/**************************************/
/** HtmlFromNabor snippet for MODX Revo
*
* @version 0.2
* @author Borisov Evgeniy aka Agel Nash (agel-nash@xaker.ru)
* @date 18.12.2012
*
* @category snippet
* @internal @modx_category System
*
* @cangelog
* version 0.2 [18.12.2012]
* - Получение значения параметра (subparam) из набора параметров имя которого указано в значении другого параметра (param) набора параметров (id)
* - Получение сразу нескольких значений параметров
* - Действия (сложение чисел и текстов) над значениями (запрещается использовать символ :)
*
* version 0.1 [10.10.2012]
* - Получение значения параметра (param) из набора параметров (id)
*
*
* @example
* [[HtmlFromNabor? &id=`aero` &param=`money`]]
* взять значение параметра money из набора aero
*
* [[HtmlFromNabor? &id=`aero,product` &param=`money`]]
* взять значение параметра money из наборов aero и product, а результат вывести слитным текстом (без разделителей и пробелов)
*
* [[HtmlFromNabor? &id=`aero,product` &param=`money` &sep=`, `]]
* взять значение параметра money из наборов aero и product, а результат вывести через разделитель ", "
*
* [[HtmlFromNabor? &id=`aero` &param=`money` &action=`math:2`]]
* взять значение параметра money из набора aero и сложить с числом 2
*
* [[HtmlFromNabor? &id=`aero` &param=`money` &action=`math:-2`]]
* взять значение параметра money из набора aero и сложить с числом -2
*
* [[HtmlFromNabor? &id=`aero` &param=`money` &action=`text:Стоимость - `]]
* взять значение параметра money из набора aero и добавить в начало текст "Стоимость - "
*
* [[HtmlFromNabor? &id=`aero` &param=`money` &action=`text:Стоимость|.. `]]
* взять значение параметра money из набора aero и добавить в начало текст "Стоимость: "
*
* [[HtmlFromNabor? &id=`aero` &param=`money` &action=`text:Стоимость - : рублей`]]
* взять значение параметра money из набора aero и добавить в начало текст "Стоимость - " , а в конец " рублей"
*
* [[HtmlFromNabor? &id=`aero` &param=`product` &subparam=`money` &action=`math:2`]]
* запустить сниппет [[HtmlFromNabor? &id=`взять значение из параметра product из набора aero` &param=`money` &action=`math`]]
* а результат сложить с числом 2.
*
*/
/*************************************/
$id = isset($id) ? $id : '';
$param = isset($param) ? $param : '';
$subparam = isset($subparam) ? $subparam : '';
$action = isset($action) ? $action : ''; //Символ : используется только в служебных целях
$sep = isset($sep) ? $sep : ''; //разделитель для action='text'
$data=array();
if($id!='' && $param!=''){
$id=explode(",",$id);
foreach($id as $name){
$propSet = $modx->getObject('modPropertySet',array('name'=>$name));
if($propSet!==NULL){
$value = $propSet->getProperties();
$data[]=isset($value[$param])?$value[$param]:'';
}
}
}
if($action !=''){
$action=explode(":",$action);
}
if($subparam!=''){
$name=$data;
$data=array();
foreach($name as $item){
$data=$modx->runSnippet("HtmlFromNabor", array("id"=>$item,"param"=>$subparam,"sep"=>$sep,"action"=>$action[0]));
}
}
switch($action[0]){
case 'math':{
if(!is_array($data)) $data=array($data);
$out = isset($action[1]) ? $action[1] : 0;
foreach($data as $item){
$out=eval('return (int)$item+(int)$out;');
}
break;
}
case 'text':
default:{
if($modx->resource->get('id')==267){
print_r($out);
}
$out = isset($action[1]) ? $action[1] : '';
$out .= implode($sep,$data);
$out .= isset($action[2]) ? $action[2] : '';
$out=str_replace("|..",":",$out);
}
}
return $out;
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment