Вывод списка тегов всех постов блогов — различия между версиями
Kalexey (обсуждение | вклад) (Новая страница: « category:Написание кастомных макросов <p> '''Задача''': </p> <p> Вывести по шаблону список тегов в…») |
(нет различий)
|
Версия 14:02, 27 июня 2012
Задача:
Вывести по шаблону список тегов всех постов блогов.
Решение:
Для решения данной задачи воспользуемся протоколом выборки данных - "Selector". Напишем макрос, который с помощью Selector'a будет формировать список тегов и выводить их по шаблону:
/*
@param String
$template - шаблон вывода тегов
*/
public function tagList($template = 'default') {
if(!$template)
$template = 'default';
$posts = new selector('pages');
$posts->types('hierarchy-type')->name('blogs20', 'post');
$tags = array();
foreach($posts as $post)
$tags = array_merge($tags, $post->tags);
$tags = array_values(array_unique($tags));
list($tags_block, $tags_block_tag, $tags_block_empty) =
def_module::loadTemplates('blogs20/tags/'.$template, 'tags_block', 'tags_block_tag', 'tags_block_empty');
$count = count($tags);
if($count > 0) {
$lines = array();
for($i = 0; $i < $count; $i++) {
$line_arr = array();
$line_arr['tag'] = $tags[$i];
$lines[] = def_module::parseTemplate($tags_block_tag, $line_arr, $tags);
}
$block_arr = array();
$block_arr['void:lines'] = $lines;
return def_module::parseTemplate($tags_block, $block_arr);
} else {
return $tags_block_empty;
}
}
Код макроса необходимо поместить в файл "/classes/modules/blogs20/__custom.php" после строки "//TODO: Write here your own macroses". После этого нам нужно добавить разрешения для макроса. Для этого создадим файл в той же директории файл "permissions.custom.php" со следующим содержанием:
<?php
$permissions = Array(
'common' => array('tagList')
);
?>
Осталось сделать шаблон, по которому будет организован вывод тегов. В папке "/tpls/blogs20/" необходимо создать папку "tags", а в ней создать файл "default.tpl" и написать в нём следующий текст:
<?php
$FORMS = Array();
$FORMS['tags_block'] = <<<END
<div>%lines%</div>
END;
$FORMS['tags_block_tag'] = <<<END
<span> - <b>%tag%</b> - </span>
END;
$FORMS['tags_block_empty'] = <<<END
<b>Пусто!</b>
END;
?>
Блок "tags_block" - контейнер списка тегов, "tags_block_tag" - блок отдельно взятого тега, текст тега доступен через макрос %tag%. Блок "tags_block_empty" подставляется в том случае, если список тегов пуст.