Перейти к содержимому


* * * * * 1 Голосов

Вывести список дочерних страниц - сначала только тайтлы, потом тизеры


  • Авторизуйтесь для ответа в теме
Сообщений в теме: 6

#1 blacktop

blacktop

    Активный участник

  • Пользователи
  • PipPipPip
  • 51 сообщений

Отправлено 04.08.2011, 06:54

Добрый день.

Как можно сделать, чтобы в разделе сначала выводились только тайтлы всех дочерних страниц, а потом - все тизеры?

пробовал использовать в listpages.php последовательно два цикла
<?php while (z_nextpage()) : ?> .... <?php if (z_havepages()) { echo '<div class="delimiter"></div>'; } endwhile; ?>
но первый проходит, выводит тайтлы, а второй, который должен вывести тизеры - не стартует, потому что перебор страниц уже закончен, как я понимаю.

Как сбросить "счетчик"? Либо есть какие-то еще решения?

Спасибо.

#2 blacktop

blacktop

    Активный участник

  • Пользователи
  • PipPipPip
  • 51 сообщений

Отправлено 04.08.2011, 13:31

Ответ:
просто вставить в нужное место в шаблон listpages.php
<?php z_listpages(); ?>

Еще один вопрос: каким образом передать параметр сортировки?
Я конечно в движке поменял в файле zwidget\listpages.php
'order' => 'time asc'
на
'order' => 'time desc'
Но как это сделать корректнее?

#3 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 05.08.2011, 04:09

Просмотр сообщенияblacktop (04.08.2011, 13:31) писал:

Еще один вопрос: каким образом передать параметр сортировки?
Я конечно в движке поменял в файле zwidget\listpages.php
'order' => 'time asc'
на
'order' => 'time desc'
Но как это сделать корректнее?

<?php
$sidebar->addWidget(new zwidget_listpages('id', array(
	'order' => 'time desc'
)));
?>


#4 blacktop

blacktop

    Активный участник

  • Пользователи
  • PipPipPip
  • 51 сообщений

Отправлено 05.08.2011, 06:07

Спасибо за ответ!

Еще вопрос.

Упрощенная структура pages.txt

##Главная

##Отечественный автопром

###Легковые

####Жигули
контент про Жигули

####Москвич
контент про Москвич

###Грузовые

####Камаз
контент про Камаз

####Маз
контент про Маз

###Джипы

####УАЗ
контент про УАЗ

####ЛУАЗ
контент про ЛУАЗ

####Нива
контент про Нива


Задача: при выводе, например, страницы "отечественный автопром", организовать следующим образом:

Легковые <= просто подзаголовок
Жигули <= ссылка на страницу про Жигули
Москвич <= ссылка на страницу про Москвич

Грузовые <= просто подзаголовок
Камаз <= ссылка на страницу про Жигули
Маз <= ссылка на страницу про Жигули

Джипы <= просто подзаголовок
УАЗ <= ссылка на страницу про УАЗ
ЛУАЗ <= ссылка на страницу про ЛУАЗ
Нива <= ссылка на страницу про Нива

=====

Или, другими словами, как сделать так, чтобы
zmodule_listpages, учитывая структуру родительских и вложенных страниц и на их основе формируя подзаголовки, выводил тайтлы (или тизеры) дочерних страниц всех (или n) уровней

#5 blacktop

blacktop

    Активный участник

  • Пользователи
  • PipPipPip
  • 51 сообщений

Отправлено 05.08.2011, 07:29

Опять получается: сам спросил - сам ответил)
Вариант, правда, похож на анальную ампутацию гланд, но без рабирательств в коде не смог придумать ничего лучше:
1. Немного изменяем структуру контента:
##Главная

##Отечественный автопром

###Жигули
@@podrazdel=Легковые
контент про Жигули

###Москвич
контент про Москвич

2. Добавляем в первую страницу подраздела пользовательское свойство, например @@podrazdel=Легковые (как указано в п.1 - Жигули)

3. В шаблоне в файле listpages.php добавляем код
$podrazdel = z_page()->getProperty('podrazdel');
if ($podrazdel != NULL) { %вывод_подраздела_в_соответствии_с_шаблоном% }

Отмечу, что в этом случае необходимо жестко следить за порядком публикации подстраниц (я использую @@time для каждой)

Несмотря на частичное решение задачи, вопрос из предыдущего поста актуален.

#6 support

support

    Активный участник

  • Главные администраторы
  • PipPipPip
  • 1 140 сообщений

Отправлено 05.08.2011, 09:58

Просмотр сообщенияblacktop (05.08.2011, 06:07) писал:

Или, другими словами, как сделать так, чтобы
zmodule_listpages, учитывая структуру родительских и вложенных страниц и на их основе формируя подзаголовки, выводил тайтлы (или тизеры) дочерних страниц всех (или n) уровней
Ну, во-первых, модуль лучше создать свой, чем изменять входящий в дистрибутив лайта.

Что касается вывода, то можно попробовать обойтись и без изменения модуля. Можно изменить шаблон listpages (опять же, можно создать отдельный шаблон, а модулю указать, чтобы он использовал его вместо стандартного).

Используя функцию z_page() можно получить объект страницы, информацию о которой необходимо выводить. Перебрать все дочерние страницы можно следующим циклом:

<ul><?php
foreach (z_page()->getPageInfo() as $child) {
	echo '<li><a href="' . $child->link . '">' . $child->name() . "</a></li>";
}
?></ul>

$child->name() --- выводит название пункта меню

Для вывода названия страницы можно использовать более медленный путь: $child->getPage()->getTitle().

Код я не проверял, если возникнут проблемы, пишите.

#7 blacktop

blacktop

    Активный участник

  • Пользователи
  • PipPipPip
  • 51 сообщений

Отправлено 06.08.2011, 03:20

Спасибо, получилось очень гибкое решение.




Количество пользователей, читающих эту тему: 5

0 пользователей, 5 гостей, 0 скрытых пользователей