Забыл про проверку, если в шаблоне указывать большее кол-во страниц, чем есть в структуре и про то что не должны выводиться отключенные страницы. Итоговый код вот этот... правда без проверки на открывающиеся/закрывающиеся теги при обрезке
public function random_article($element_id, $template = 'default', $quantity = '1', $char_quantity = '0', $strip_tags = 1) {
list($template_block, $template_line) = def_module::loadTemplates("./tpls/custom/{$template}.tpl", "article_block_view", "article_line_view");
$lines = Array();
$childs = Array();
$childs = umiHierarchy::getInstance()->getChilds($element_id, false, false);
if (count($childs) < $quantity) $quantity = count($childs);
if ($quantity > 0) $rand_element_id = (array) array_rand($childs, $quantity);
else $rand_element_id = (array) $childs;
foreach($rand_element_id as $element_id) {
$article = u miHierarchy::getInstance()-> ;getElement($element_id)->g etObject();
$article_content = $article->getValue('content');
if ($strip_tags == 1) $article_content = strip_tags($article_content);
if ($char_quantity > 0) $article_content = $this->CutStr($article_content, ' ,.;nr>', $char_quantity);
$line_arr = Array();
$line_arr['attribute:id'] = $element_id;
$line_arr['attribute:link'] = umiHierarchy::getInstance()->getPathById($element_id);
$line_arr['attribute:name'] = $article->getName();
$line_arr['node:content'] = $article_content;
$lines[] = def_module::parseTemplate($template_line, $line_arr);
}
$block_arr['subnodes:items'] = $lines;
return def_module::parseTemplate($template_block, $block_arr);
}
public function CutStr($S, $Chars, $FromPos = 0) {
if (strlen($S) <= $FromPos) return $S;
$p = 0;
for ($i = 0; $i < strlen($Chars); $i++) {
$pos = strpos($S, $Chars[$i], $FromPos);
if (is_int($pos)) {
$p = $i == 0 ? $pos : min($p, $pos);
}
}
return substr($S, 0, max($p, $FromPos) );
}