[+param+]'.
* Доступные плейсхолдеры:
* [+param+] - название параметра для выборки;
* [+value+] - значение параметра для выборки;
* [+desc+] - краткое описание;
* [+selected+] - место для вывода атрибута selected для запоминания выбранных значений (см. &selectedValue);
*
***** 1. Пример использования в backend (административной панели) *****
* Сниппет сформирует список в виде: параметр1==значение1||параметр2==значение2
* Создайте TV-параметр с типом ввода DropDown List Menu
* В возможных значениях укажите:
* @EVAL return $modx->runSnippet('ListChild', array('docid' => 10, 'where' => 'isfolder = 1 and hidemenu = 0'));
* Отобразит все опубликованные и неудаленные дочерние контейнеры папки 10, которые отмечены для показа в меню.
*
* Или так:
* @EVAL return $modx->runSnippet('ListChild', array('docid' => '10,11,12', 'depth' => 2));
* Отобразит все опубликованные и неудаленные дочерние документы, в том числе и контейнеры, папок 10, 11 и 12 до второго уровня вложенности.
*
***** 2. Пример использования в frontend (пользовательской части) *****
* Сниппет сформирует список в виде:
* Разместите в шаблоне следующий код:
*
* Отобразит в виде раскрывающегося списка все опубликованные и неудаленные дочерние документы папки 10, до второго уровня вложенности, которые не являются контейнерами.
*
***** 3. Пример c использованием шаблона в frontend (пользовательской части) *****
* Задача - вывести не в виде раскрывающегося списка, а в виде переключателей, с запоминанием выбранного значения
* Разместите в шаблоне следующий код:
* [[ListChild? &docid=`10` &name=`country` &tpl=`countryTpl` &selectedValue=`checked` &emptyfield=`0`]]
* Шаблон countryTpl: ' [+param+] '
* Отобразит в виде переключателей все опубликованные и неудаленные дочерние документы папки 10, без пустого поля в начале списка.
*
***** 4. Вывод количества найденных документов *****
* Разместите в шаблоне следующий код:
* [[ListChild? &docid=`10` &count=`1`]]
* Отобразит количество опубликованных и неудаленных дочерних документов папки 10.
*
***** 5. Вывод идентификаторов найденных документов *****
* Разместите в шаблоне следующий код:
* [[ListChild? &docid=`10` &tpl=`idTpl` &emptyfield=`0` &separator=`,`]]
* Чанк idTpl:
* [+value+]
* Отобразит список id всех опубликованных и неудаленных дочерних документов папки 10, разделенных запятой.
* Или так:
* [[ListChild? &docid=`10` &tpl=`idTpl` &emptyfield=`0` &separator=`, ` &value=`pagetitle`]]
* Отобразит заголовки всех опубликованных и неудаленных дочерних документов папки 10, разделенных запятой с пробелом. Чанк idTpl такой же.
**/
$docid = (isset($docid))? $docid: $modx->documentIdentifier;
$depth = (isset($depth))? $depth: 1;
$where = (isset($where))? $where: '';
$where = str_replace('@eq', '=', $where);
$published = (isset($published))? $published: 1;
$deleted = (isset($deleted))? $deleted: 0;
$param = (isset($param))? $param: 'pagetitle';
$value = (isset($value))? $value: 'id';
$desc = (isset($desc))? $desc: 'introtext';
$sort = (isset($sort))? $sort: $param;
$dir = (isset($dir))? $dir: 'ASC';
$limit = (isset($limit))? $limit: '';
$count = (isset($count))? $count: 0;
$separator = (isset($separator))? $separator: '';
$emptyfield = (isset($emptyfield))? $emptyfield: '1';
$name = (isset($name))? $name: '';
$selectedValue = (isset($selectedValue))? $selectedValue: 'selected="selected"';
if (!isset($tpl)) $useTpl = true;
if (!isset($tpl)) $tpl = '';
if (!function_exists('parseString')) {
function parseString($tpls,$data,$prefix = '[+',$suffix = '+]') {
foreach($data as $k => $v) {
$tpls = str_replace($prefix.(string)$k.$suffix, (string)$v, $tpls);
}
return $tpls;
};
}
// превращаем список папок в массив
$docid = explode(',', $docid);
// убираем пробелы
foreach ($docid as $key => $val) {$docid[$key] = trim($val);}
// создаем массив
$childID = array();
//получаем список ID дочерних документов для всех указанных папок
for ($x=0; $xgetChildIds($docid[$x], $depth);
$childID = array_merge($childID,$childID1);
}
//получаем массив документов
$childs = $modx->getDocuments($childID, $published, $deleted, $param . ',' . $value . ',' . $desc, $where, $sort, $dir, $limit);
//получаем количество найденных документов
$countChild = count($childs);
// добавляем пустое поле в начале списка
if ($emptyfield) {
array_unshift($childs, "");
}
$out = array();
// формируем список
switch($count){
case 0:
if ($modx->isBackend())
{
foreach($childs as $child) {
$out[] = $child[$param] . '==' . $child[$value];
}
return implode('||', $out);
}
else {
foreach($childs as $child) {
if ($_REQUEST[$name]==$child[$value]) {$selected = $selectedValue;} else {$selected = '';}
if ($useTpl) {
$out[] = parseString($tpl,array('param'=>$child[$param],'value'=>$child[$value],'selected'=>$selected));
} else {
$out[] = $modx->parseChunk($tpl,array('param'=>$child[$param],'value'=>$child[$value],'desc'=>$child[$desc],'selected'=>$selected),'[+','+]');
}
}
return implode($separator, $out);
}
break;
case 1: // выводим количество документов
return $countChild;
break;
}
?>