Данное решение полезно, если на сайте вам нужен блок преамбул случайных статей или отзывов.
Идеология такова: создаем в модуле структура "страницу контента", называем ее, к примеру, - "Статьи" и вкладываем в нее 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, т.к. тут нету проверки на открывающие/закрывающие теги
....Но впринципе не сложно и дописать
Если кому-то нужен модуль "Статьи", представляющий по сути упрощенный модуль новостей, без лент сюжетов и прочего, но с рандомом, в будущем могу выложить.
Комментирование доступно только авторизованным пользователям.
Пожалуйста, зарегистрируйтесь или войдите на сайт.
Выложите, пожалуйста, свой модуль "Статьи". Мне, как новичку, очень интересно посмотреть, тем более, что примеров модулей в открытом коде очень не хватает. В идеале хотелось бы почитать статью "QuickStart" по написанию простенького модуля "с нуля" без уходов в дебри и комментарием к каждой строке. То, что есть в документации по API - просто кошмар. Объясните, пожалуйста, в общем архитектуру данных в системе? Уж очень сложно понять, что имеют в виду разработчики, употребляя термин "Тип данных" на страницах "Главная страница \ Шаблоны данных \ Типы данных" и "Главная страница \ Шаблоны данных \ Настройки модуля" - всё как-то сумбурно. А ещё есть какой-то базовый тип. Что даёт наследование типов данных? И чем отличается объект от страницы? И как всё это доступно из API?
Главный недостаток UMI.CMS - ужасная недокументированность и беспримерность.
Надежда только на Вас :-)
Ещё раз спасибо.
В частности, ответы на большинство ваших вопросов вы найдете в небольшом видеофильме, который так и называется "Архитектура UMI.CMS" - http://www.umi-cms.r.../arhitektura_umicms/.
Кроме того, 27 февраля состоится онлайн-семинар, на котором другой наш партнер будет рассказывать о написании и внедрении собственного модуля для UMI.CMS - вы можете зарегистрироваться здесь http://www.umi-cms.r.../webinar_ecommerce/.
По поводу терминов: (буду давать не совсем точные, для наглядности определения)
1. Чем отличаеться обьект от страницы?
- страница(элемент) - это обьект, имеющий урл
2. Что такое тип данных?
- контейнер, содержащий набор полей обекта
3. Что дает наследование?
- наследование позволяет создавать дерево типов данных, где при создании, каждый вложеный тип имеет теже поля что и родитель
4. Что такое "метод" в настройках модуля шаблонов данных?
- метод - это посути PHP функция, в файле class.php модуля
К разработчикам - господа, а сложноли в АПИ добавить описалово по def_module?
Да, стоит задокументировать некоторые методы def_module, т.к. его наследуют все модули системы и там есть несколько полезных методов.
Я тоже за модуль статьи. Интересно посмотреть.
Пишите пожелания о необходимых решениях, задумках, можно на почту umi@jeket.ru
Вместе подумаем, как сделать ЮМИ лучше
Чтоб проще было отлаживать добавьте в корень файл debug
Причем опера показывает нормально а мозилла с эксплорером упорно в вин1251 показывают, убираешь макрос становится все нормально: страницу отображает правильно в utf-8. У тебя Jeket не было таких проблем???
Прописал в htaccess:AddDefaultCharset UTF-8
и все встало на свои места. Теперь буду по полной использовать твой полезный скриптик,спасибки!!!
По убирал пробелы вставил мактос на страницу:
и меня вообще страничка перестала грузится.
Может подскажите в чем причина.
Очень велика вероятность ошибки из за того, что нельзя было опубликовать статью с правильным синтаксисом. Если сами не сможете разобраться в чем ошибка, напишите на umi@jeket.ru Обещаю помочь )))
пробовал
перестает грузится