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


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

Похожие страницы


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

#1 blacktop

blacktop

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

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

Отправлено 20.05.2009, 05:20

Здравствуйте,
подскажите, как можно выводить ссылку на случайную страницу с сайта или случайную страницу из указанного раздела?

К примеру есть раздел "Фрукты", в нем страница "Апельсин",
внизу страницы надо вывести "читайте также: "(линк на)Мандарин", "(линк на)Яблоко"

#2 blacktop

blacktop

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

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

Отправлено 25.05.2009, 05:49

все еще актуально

#3 support

support

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

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

Отправлено 25.05.2009, 10:38

Просмотр сообщенияblacktop (20.5.2009, 9:20) писал:

Здравствуйте,
подскажите, как можно выводить ссылку на случайную страницу с сайта или случайную страницу из указанного раздела?

К примеру есть раздел "Фрукты", в нем страница "Апельсин",
внизу страницы надо вывести "читайте также: "(линк на)Мандарин", "(линк на)Яблоко"
В качестве отправной точки можно использовать следующий PHP-код:

<?php
$page = null;

$pages = array_values(zengine::zsource()->getAllPages('/'));
while (count($pages)) {
	$i = array_rand($pages);
	$page = zpage::load($pages[$i]);
	if (!$page || $page->getProperty('publish') > ZENGINE_NOW) {
		unset($pages[$i]);
		$page = null;
	} else {
		break;
	}
}
if ($page) {
	echo '<a href="' . $page->getLink() . '">' . htmlspecialchars($page->getTitle()) . '</a>';
}
?>
Скрипт получает список страниц на сайте, выбирает случайную страницу, дата публикации которой уже наступила и выводит ссылку на страницу.

Его можно либо добавить сразу в шаблон, либо создать свою функцию для вывода ссылки, либо свой виджет.

В качестве аргумента функция getAllPages() принимает путь страницы дочерние страницы которой будут выбираться, поэтому вместо слеша можно указать путь к разделу, например /news :
...
$pages = array_values(zengine::zsource()->getAllPages('/news'));
...


#4 blacktop

blacktop

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

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

Отправлено 25.05.2009, 10:50

Спасибо, код работает.

#5 blacktop

blacktop

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

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

Отправлено 29.05.2009, 02:44

А куда можно вставить вышеуказанный код, чтобы получить "похожие страницы" на этапе парсинга файла pages.txt?
Опять же забота о производительности системы, чтобы не работать со скриптом каждый раз а получать статическую ссылку непосредственно в ходе парсинга.

#6 support

support

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

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

Отправлено 29.05.2009, 05:32

Просмотр сообщенияblacktop (29.5.2009, 6:44) писал:

А куда можно вставить вышеуказанный код, чтобы получить "похожие страницы" на этапе парсинга файла pages.txt?
Опять же забота о производительности системы, чтобы не работать со скриптом каждый раз а получать статическую ссылку непосредственно в ходе парсинга.
Для этого потребуется написать свой скрипт, который будет перебирать все страницы и прописывать для каждой из них пользовательское свойство, например, @@_samepageshtml с html-кодом ссылки вида: <a href="~/path/to/page.html">Текст</a>. В шаблоне выводить это свойство кодом <?php echo $this->zpage->getProperty('__samepageshtml'); ?>.

#7 blacktop

blacktop

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

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

Отправлено 29.05.2009, 11:28

Спасибо.




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

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