Добрый день.
подскажите, как можно выводить ссылку на случайную страницу с сайта или случайную страницу из указанного раздела?
К примеру есть раздел "Фрукты", в нем страница "Апельсин", внизу страницы надо вывести:
читайте также:
(линк на)Мандарин
(линк на)Яблоко
Для зебры 1.х решение здесь: http://zebrum.ru/for...p?showtopic=431
1
Похожие страницы
Автор
blacktop
, 16.12.2009, 09:32
Сообщений в теме: 2
#1
Отправлено 16.12.2009, 09:32
#2
Отправлено 16.12.2009, 13:09
Один из возможных вариантов:
Этот же код можно оформить в виде виджета, создав файл zcontent/extensions/zebrum/randompages.php со следующим содержимым:
Здесь в качестве папки для расширения была выбрана папка zebrum и, соответственно, название виджета содержит приставку zebrum_.
Вызывать виджет в шаблоне (или page.php) можно либо из сайдбара, либо напрямую (одна ссылка на рандомную страницу из раздела /news):
Результат:
Вызов:
Результат (отступы были добавлены для наглядности представления результата):
<?php $page = null; function only_section_news ($value) { return strpos($value, '/news/') === 0; } $pages = array_filter(zengine::repository()->getTaxonomy('time')->fetch(), 'only_section_news'); while (count($pages)) { $i = array_rand($pages); $page = zengine::getPage($pages[$i]); if (!$page || $page->getTime() > zdate::time()) { unset($pages[$i]); $page = null; } else { break; } } if ($page) { echo '<a href="' . $page->getLink() . '">' . htmlspecialchars($page->getTitle()) . '</a>'; } ?>
Этот же код можно оформить в виде виджета, создав файл zcontent/extensions/zebrum/randompages.php со следующим содержимым:
<?php class zebrum_randompages extends zwidget_abstract { /** * Отображает содержимое виджета */ public function displayContent () { $pages = zengine::repository()->getTaxonomy('time')->fetch(); $this->params['childs_of'] = rtrim($this->params['childs_of'], '/'); if (!empty($this->params['childs_of'])) { $this->params['childs_of'] .= '/'; $pages = array_filter($pages, array($this, 'filter')); } $number = 0; $htmlParts = array(); while (count($pages)) { $i = array_rand($pages); $page = zengine::getPage($pages[$i]); if ($page && !($page->getTime() > zdate::time())) { $htmlParts[] = '<a href="' . $page->getLink() . '">' . htmlspecialchars($page->getTitle()) . '</a>'; if (++$number >= $this->params['number']) { break; } } unset($pages[$i]); } if (!$number) { return; } echo $this->params['before'] . implode($this->params['separator'], $htmlParts) . $this->params['after']; } /** * Возвращает true, если страница $pagepath находится в разделе $this->params['childs_of'] * * @param string $pagepath * @return boolean */ protected function filter ($pagepath) { return strpos($pagepath, $this->params['childs_of']) === 0; } /** * Опции виджета по умолчанию * * @var array */ protected $defaults = array( 'childs_of' => '', 'number' => 5, 'before' => '<ul><li>', 'separator' => '</li><li>', 'after' => '</li></ul>', ); }
Здесь в качестве папки для расширения была выбрана папка zebrum и, соответственно, название виджета содержит приставку zebrum_.
Вызывать виджет в шаблоне (или page.php) можно либо из сайдбара, либо напрямую (одна ссылка на рандомную страницу из раздела /news):
<?php $widget = new zebrum_randompages(null, array( 'childs_of' => '/news', 'number' => 1, 'before' => '', 'after' => '', 'before_widget' => '', 'after_widget' => '', )); echo $widget->display(); ?>
Результат:
<a href="/news/versiya-1.0.3/">Версия 1.0.3</a>
Вызов:
<?php $widget = new zebrum_randompages(null, array( 'childs_of' => '/news', 'number' => 5, 'before_widget' => '<p><strong>Ссылки по теме:</strong></p>', 'after_widget' => '', )); echo $widget->display(); ?>
Результат (отступы были добавлены для наглядности представления результата):
<p><strong>Ссылки по теме:</strong></p> <ul> <li><a href="/news/versiya-1.0.4/">Версия 1.0.4</a></li> <li><a href="/news/versiya-1.0.3/">Версия 1.0.3</a></li> <li><a href="/news/versiya-1.0.6/">Версия 1.0.6</a></li> <li><a href="/news/versiya-1.0.14/">Версия 1.0.14</a></li> <li><a href="/news/versiya-1.0.9/">Версия 1.0.9</a></li> </ul>
#3
Отправлено 17.12.2009, 00:56
Огромное спасибо!
Всегда был высокого мнения о команде Zebrum, теперь я только укрепился в своих взглядах.
Всегда был высокого мнения о команде Zebrum, теперь я только укрепился в своих взглядах.
Количество пользователей, читающих эту тему: 1
0 пользователей, 1 гостей, 0 скрытых пользователей