16.02.2009 | 01:00

Данное решение полезно, если на сайте вам нужен блок преамбул случайных статей или отзывов.

Идеология такова: создаем в модуле структура "страницу контента", называем ее, к примеру, - "Статьи" и вкладываем в нее n-ное количество подстраниц (самих статей).

Далее открываем /classes/modules/custom.php и после строчки //TODO: Write your own macroses here вставляем следующий текст (внимание: после второго символа % поставлен пробел, уберите его после вставки в шаблон):

 

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) );
}

 

Затем создаем файл шаблона
/tpls/custom/default.tpl

В него вставляем следующий текст:

 

<?php

$FORMS = Array();

$FORMS['article_block_view'] = <<<END
%items %

END;

$FORMS['article_line_view'] = <<<END
<div class="useful_info_content">
<a href="%link %">%name %</a>
<p>%content %...</p>
</div>

END;

?>

Внутри блока article_line_view можно использовать следующее:

%id % - id страницы
%link % - ссылка на страницу
%content % - содержание страницы
%name % - название страницы

Вызов макроса и параметры:
%custom random_article([element_id, template = 'default',  quantity = '1', char_quantity = '0', $strip_tags = '1']) %

  • element_id - id раздела
  • template - Имя шаблона
  • quantity - количество статей для вывода в блоке
  • char_quantity - количество символов в преамбуле, если 0, то то текст статьи обрезаться не будет
  • strip_tags - если 1, то из текста статьи будут удаляться теги, если 0, то очистка от тегов не будет происходить

Внимание, не включайте обрезку, если  strip_tags = 0, т.к. тут нету проверки на открывающие/закрывающие теги

....Но впринципе не сложно и дописать

Если кому-то нужен модуль "Статьи", представляющий по сути упрощенный модуль новостей, без лент сюжетов и прочего, но с рандомом, в будущем могу выложить.

Читайте также:

Теги

Авторы блога