[+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; } ?>