В модуле каталогер, сделала категорию, подкатегорию и элемент. Необходимо выводить на страницу только категории и подкатегории. Как в шаблоне вывода можно сделать, чтобы у категорий и подкатегорий были разные стили (сейчас они выводятся в одном стиле). Например:
Hats //категория
Fashion hat //подкатегория
Work Hats//подкатегория
clothers //категория
Fashion clothers//подкатегория
Work clothers//подкатегория
Использую шаблон:
{$title}
{section name=numimg loop=$image_url_array}{/section}
{$notes}
{if $hasnav == 1}
{$prev}{$navstr}{$next}
{/if}
{section name=numloop loop=$items}
{$items[numloop].title}
{/section}
{if $hasnav == 1}
{*
The number that is without a link (a href) have a {$prev}{$navstr}{$next}
{/if}
Для вывода:
{cms_module module='Cataloger' action='all' sub_template='cat' alias='/' items_per_page='6' recurse='categories_one'}
по модулю cataloger
Re: по модулю cataloger
Сложное программирование смарти-шалонов - это жуткая вещь...
Я бы лучше плагином сделал. Например, что-то вроде такого:
А на нужной странице просто {children_list}
Я бы лучше плагином сделал. Например, что-то вроде такого:
Code: Select all
function smarty_cms_function_children_list($params, &$smarty)
{
global $gCms;
$manager =& $gCms->GetHierarchyManager();
$thisPage = $gCms->variables['page_name'];
$currentNode = &$manager->sureGetNodeByAlias($thisPage);
$nodes = $currentNode->getChildren();
if ($currentNode->hasChildren()) {
foreach ($nodes as $node) {
$content = $node->getContent();
if ($content instanceof CatalogCategory) {
echo "<div class=\"1\"><a .... >...</a></div>";
// .... if ($content->hasChildren() ...
}
}
}
}
Re: по модулю cataloger
Спасибо за помощь:) ))
Я никогда не устанавливала плагины, так что поправьте меня, если что не так.
Вставила код в раздел теги пользователя, на нужной странице пишу:
{cms_module module='Cataloger' action='all' sub_template='cat' alias='/' recurse='mixed_all' items_per_page='6'} {children_list}
Все отображается по прежнему (категории и саб категории одним стилем). Новый класс к саб категориям не применился.
Может что-то не так сделала...
Я никогда не устанавливала плагины, так что поправьте меня, если что не так.
Вставила код в раздел теги пользователя, на нужной странице пишу:
{cms_module module='Cataloger' action='all' sub_template='cat' alias='/' recurse='mixed_all' items_per_page='6'} {children_list}
Все отображается по прежнему (категории и саб категории одним стилем). Новый класс к саб категориям не применился.
Может что-то не так сделала...
Re: по модулю cataloger
Да, что-то не так )
Чтобы добавить свой плагин, нужно:
1. В папке plugins создать файл function.children_list.php.
2. В этом файле реализовать функции:
function smarty_cms_function_children_list($params, &$smarty)
function smarty_cms_help_function_children_list()
function smarty_cms_about_function_children_list()
3. Уже после этого в нужном месте вставлять тег {children_list}.
Категории и подкатегории - это элементы контента, которые обычно имеют один корневой элемент (например, разделитель), у которого есть свой алиас. Если задача вывести все категории и подкатегории от конкретного корневого элемента, необходимо при вызове нашего плагина передавать ему алиас корневого элемента. Например, так: {children_list root='hats-catalog'}. Тогда в реализации плагина можно будет взять элемент с этим алиасом и сканировать его вложенные элемента, выискивая категории и подкатегории..
Вот рабочий пример реализации функции плагина (smarty_cms_function_children_list), который выводит все дочерние категории и подкатегории, указав им классы 'category' и 'subcategory':
Чтобы добавить свой плагин, нужно:
1. В папке plugins создать файл function.children_list.php.
2. В этом файле реализовать функции:
function smarty_cms_function_children_list($params, &$smarty)
function smarty_cms_help_function_children_list()
function smarty_cms_about_function_children_list()
3. Уже после этого в нужном месте вставлять тег {children_list}.
Категории и подкатегории - это элементы контента, которые обычно имеют один корневой элемент (например, разделитель), у которого есть свой алиас. Если задача вывести все категории и подкатегории от конкретного корневого элемента, необходимо при вызове нашего плагина передавать ему алиас корневого элемента. Например, так: {children_list root='hats-catalog'}. Тогда в реализации плагина можно будет взять элемент с этим алиасом и сканировать его вложенные элемента, выискивая категории и подкатегории..
Вот рабочий пример реализации функции плагина (smarty_cms_function_children_list), который выводит все дочерние категории и подкатегории, указав им классы 'category' и 'subcategory':
Code: Select all
function print_categories(&$root, $cat_class_name, $sub_cat_class_name) {
if (isset($root) && $root->hasChildren()) {
$nodes = $root->getChildren();
foreach ($nodes as $node) {
$content = $node->getContent();
if ($content instanceof CatalogCategory) {
/*
// вариант со ссылками на страницы категорий:
echo "<div class=\"$cat_class_name\">\n";
echo '<p><a href="'.$content->GetURL().'">'.$content->Name()."</a></p>\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
echo "</div>\n";
*/
echo "<div class=\"$cat_class_name\">".$content->Name()."</div>\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
}
}
}
}
function smarty_cms_function_children_list($params, &$smarty)
{
global $gCms;
$manager = &$gCms->GetHierarchyManager();
if (isset($params) && isset($params['root'])) {
$rootAlias = $params['root'];
}
else {
/* Если параметр root не задан, берем текущую страницу
(с который был вызов плагина) как корневой элемент */
$rootAlias = $gCms->variables['page_name'];
}
/* Получаем ссылку на корневой контент */
$rootNode = &$manager->sureGetNodeByAlias($rootAlias);
print_categories($rootNode, 'category', 'subcategory');
}
Last edited by Fenik17 on Wed Jul 14, 2010 12:13 am, edited 1 time in total.
Re: по модулю cataloger
Спасибо,
опять ничего не изменилось...
1. в папке плагинс создала файл function.children_list.php
2. поместила в него код:
"
hasChildren()) {
$nodes = $root->getChildren();
foreach ($nodes as $node) {
$content = $node->getContent();
if ($content instanceof CatalogCategory) {
/*
// вариант со ссылками на страницы категорий:
echo "\n";
echo 'GetURL().'">'.$content->Name()."\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
echo "\n";
*/
echo "".$content->Name()."\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
}
}
}
}
function smarty_cms_function_children_list($params, &$smarty)
{
global $gCms;
$manager = &$gCms->GetHierarchyManager();
if (isset($params) && isset($params['root'])) {
$rootAlias = $params['root'];
}
else {
/* Если параметр root не задан, берем текущую страницу
(с который был вызов плагина) как корневой элемент */
$rootAlias = $gCms->variables['page_name'];
}
/* Получаем ссылку на корневой контент */
$rootNode = &$manager->sureGetNodeByAlias($rootAlias);
print_categories($rootNode, 'category', 'subcategory');
}
function smarty_cms_help_function_children_list() {
echo lang('help_function_children_list');
}
function smarty_cms_about_function_children_list() {
?>
Author: XXX<info@mail.ru>
Version: 1.0
Change History:
None
"
3. на страницу вставила {children_list} (без указания root)
опять ничего не изменилось...

1. в папке плагинс создала файл function.children_list.php
2. поместила в него код:
"
hasChildren()) {
$nodes = $root->getChildren();
foreach ($nodes as $node) {
$content = $node->getContent();
if ($content instanceof CatalogCategory) {
/*
// вариант со ссылками на страницы категорий:
echo "\n";
echo 'GetURL().'">'.$content->Name()."\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
echo "\n";
*/
echo "".$content->Name()."\n";
if (isset($sub_cat_class_name))
print_categories($node, $sub_cat_class_name, null);
}
}
}
}
function smarty_cms_function_children_list($params, &$smarty)
{
global $gCms;
$manager = &$gCms->GetHierarchyManager();
if (isset($params) && isset($params['root'])) {
$rootAlias = $params['root'];
}
else {
/* Если параметр root не задан, берем текущую страницу
(с который был вызов плагина) как корневой элемент */
$rootAlias = $gCms->variables['page_name'];
}
/* Получаем ссылку на корневой контент */
$rootNode = &$manager->sureGetNodeByAlias($rootAlias);
print_categories($rootNode, 'category', 'subcategory');
}
function smarty_cms_help_function_children_list() {
echo lang('help_function_children_list');
}
function smarty_cms_about_function_children_list() {
?>
Author: XXX<info@mail.ru>
Version: 1.0
Change History:
None
"
3. на страницу вставила {children_list} (без указания root)
Re: по модулю cataloger
А если закомментировать строку
и соответствующую закрывающую фигурную скобку?
Возможно тип контента вложенных страниц не того типа. Должен быть - "Страница категории". А может класс CatalogCategory не подгружается.
Я проверял на CMSMS 1.7.1 + Cataloger 0.7.7 - у меня работает.
И какая версия php? instanceof появилось в php 5.0. Причем в 5.1 работа немного отличается.
Code: Select all
if ($content instanceof CatalogCategory) {
Возможно тип контента вложенных страниц не того типа. Должен быть - "Страница категории". А может класс CatalogCategory не подгружается.
Я проверял на CMSMS 1.7.1 + Cataloger 0.7.7 - у меня работает.
И какая версия php? instanceof появилось в php 5.0. Причем в 5.1 работа немного отличается.
Last edited by Fenik17 on Wed Jul 14, 2010 8:12 pm, edited 1 time in total.
Re: по модулю cataloger
Большое спасибо, заработало
Разобралась.
