Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

alpotemkin

  • *
  • 22
  • +0/-0
    • Просмотр профиля
Доброго времени суток!

Условие
На сайте есть следующая структура:
Раздел
- Страница 0
- Страница 1
- Страница 2
- Страница 3

На странице "Раздел" выводится карта сайта из его подстраниц макросом %content sitemap('brands', '1', '%pid%')%.

Задача
Надо, чтобы на странице "Раздел" выводились все страницы, КРОМЕ "Страница 0". И вопрос - есть ли такая возможность?
По данному макросу прочитал сдедующее: "В карте сайта отображаются страницы, у которых включена опция "показывать в меню".". Но мне надо, чтобы страница и отображалась в меню, и не выводилась в карте сайта.

P.S. Судя по статье http://wiki.umisoft.ru/Вывод_страницы_в_карте_сайте_с_отключением_вывода_в_меню, что-то такое сделать можно. Как в статье, но наоборот.
Если это возможно - выложите плиз скрипт.
« Последнее редактирование: 02 Ноября 2011, 16:50:18 от alpotemkin »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
готового скрипта нет, но вам идеально подойдет рекурсивный вызов usel протокола на предмет вывода всех страниц у которых нет галочки "не выводить в карте сайта", эту галочку необходимо создать в типе данных "Раздел сайта" тогда она появиться у всех типов страниц и вы сможете проставить их у тех страниц которые не надо выводить, про usel знаете?  работали с ним?

*

alpotemkin

  • *
  • 22
  • +0/-0
    • Просмотр профиля
Хм... стесняюсь сказать, но я знаком с UMI.CMS на уровне обычного пользователя. Просто у нас нет программиста, вот и скинули все вопросы по движку на меня.

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
постараюсь найти старый самописный скрипт, но это не раньше вечера, если не найду отпишу чтобы зря не ждали

*

alpotemkin

  • *
  • 22
  • +0/-0
    • Просмотр профиля
Извиняюсь за навязчивость, но нашли ли скрипт, али нет?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
да, нашел, скрипт старый и скорее всего многое что в нем есть можно было бы оптимизировать, но зато рабочий (пример можно посмотреть тут http://bazamts.ru/promyshlennoe_oborudovanie/sitemap/)

эти кастомы вставляем в /classes/modules/custom.php
		
public function sitemapnew($template = "default", $max_depth = false, $root_id = false) {
if(def_module::breakMe()) return;

if(!$max_depth) $max_depth = getRequest('param0');
if(!$max_depth) $max_depth = 4;

if(!$root_id) $root_id = 0;

if(cmsController::getInstance()->getCurrentMethod() == "sitemap") {
def_module::setHeader("%content_sitemap%");
}

$site_tree = umiHierarchy::getInstance()->getChilds($root_id, false, true, $max_depth - 1);
return self::gen_sitemap($template, $site_tree, $max_depth - 1);
}

public function gen_sitemap($template = "default", $site_tree, $max_depth) {
$res = "";

list($template_block, $template_item) = def_module::loadTemplates("tpls/content/sitemap/{$template}.tpl", "block", "item");

$block_arr = Array();
$items = Array();
if(is_array($site_tree)) {
foreach($site_tree as $element_id => $childs) {
if($element = umiHierarchy::getInstance()->getElement($element_id)) {
if ($element->getValue('ne_vyvodit_v_karte_sajta')==0){
$link = umiHierarchy::getInstance()->getPathById($element_id);

$item_arr = Array();
$item_arr['attribute:id'] = $element_id;
$item_arr['attribute:link'] = $link;
$item_arr['attribute:name'] = $element->getObject()->getName();
$item_arr['xlink:href'] = "upage://" . $element_id;

if($max_depth > 0) {

$item_arr['nodes:items'] = $item_arr['void:sub_items'] = (sizeof($childs) && is_array($childs)) ? $this->gen_sitemap($template, $childs, ($max_depth - 1)) : "";
} else {
$item_arr['sub_items'] = "";
}

$items[] = def_module::parseTemplate($template_item, $item_arr, $element_id);

umiHierarchy::getInstance()->unloadElement($element_id);
}
else continue;
} else {
continue;
}
}
}

$block_arr['subnodes:items'] = $items;
return def_module::parseTemplate($template_block, $block_arr, 0);
}

он работает как обычный макрос %content sitemap()%, теже параметры, только вызывается так %custom sitemapnew()%

Из отличий еще то, что он не выводит страницы которые отмечены галочкой "ne_vyvodit_v_karte_sajta" это в функции gen_sitemap прописано, так что создайте одноименное поле галочкой как я уже писал выше.

Еще учитывайте, что так как он выводит все страницы сайта, то имеет смысл ограничить уровень глубины вывода (параметр $max_depth) так как сайт просто ляжет если у вас разветвленная система товаров огромного количества с большой степенью вложенности. На сайте, который приводился в пример выше, $max_depth=4.

*

alpotemkin

  • *
  • 22
  • +0/-0
    • Просмотр профиля
Все работает, спасибо. А насчет вложенности и разветвленности структуры - мне нужно было только содержимое нескольких страниц вывести на одной. Потому сделал карту макросом %content sitemapnew('default', '1', '%pid%')%.