1 (2015-09-10 22:04:31 отредактировано karankevichs)

Тема: Как организовать случайный вывод страниц ?

Приветствую вас господа !)
Подскажите как можно простенько выводить ссылки на случайные страницы ? на сайте используются обычные страницы без категории... Допустим посетитель читает одну страницу, и снизу почитайте так же: page1 page2 page3....

Можно было бы еще отдельно следующая страница и предыдущая)
что бы получилось примерно так smile
[logo header sitename]
--------PAGE----[menu]
-------------------[menu]
--------------------[menu]
<<<пред........след>>>
Читайте так же:
...........page1..
...........page2..
...........page3..
[copyright 2015]

Поделиться

2 (2015-09-11 06:45:51 отредактировано sergeyterr)

Re: Как организовать случайный вывод страниц ?

Простенько наверное так:
1. Получаешь slug текущей страницы - Page::slug()
2. Затем по slug определяешь id (пользуешься xmldb)
3. Затем получаешь предыдущий id и следующий - соответственно это и будут id предыдущей и следующей страницы
4. Затем пользуетесь функцией $pages = Page::getPages() и получаешь все страницы
5. затем $count = count($pages);
6. это количество страниц, всех, можно выбрать рандомный номер из $count истинный номер естественно будет -1, потому что количество страниц начинается с 0, а индекс в массиве $pages с 0
7. Нужно понимать, что это все страницы с учетом черновиков и для зарегистрированных - наверное, я не уверен, нужно проверять smile
8. Если прогнать через цикл foreach($pages as $i => $page) то на каждом цикле можно иметь
$page['title']
$page['meta_title']
$page['parent']
$page['date']
$page['author']
$page['slug']

9. В этом же цикле можно получить и предыдущую и последующую страницу, чтобы не заморачиваться с xmldb определить предыдущую и последующую можно по $i - соответственно $i-1 это предыдущая
то есть

foreach($pages as $i => $page) {
if($page['slug'] == Page::slug()) {
$current_slug = $page['slug'];
if($i-1 >= 0 ) {
$prevslug = $pages[$i-1]['slug'];
} else {
$prevslug = -1;
}
if(count($pages[$i+1])>0) {
$nextslug = $pages[$i+1]['slug'];
} else {
$nextslug = -1;
}}}

естественно если $nextslug или $prevslug равно -1 - значит текущая страница или первая или последняя

Спасибо говорим плюсиком в репутацию. Так виднее smile

Поделиться

3

Re: Как организовать случайный вывод страниц ?

sergeyterr пишет:
foreach($pages as $i => $page) {
if($page['slug'] == Page::slug()) {
$current_slug = $page['slug'];
if($i-1 >= 0 ) {
$prevslug = $pages[$i-1]['slug'];
} else {
$prevslug = -1;
}
if(count($pages[$i+1])>0) {
$nextslug = $pages[$i+1]['slug'];
} else {
$nextslug = -1;
}}}

естественно если $nextslug или $prevslug равно -1 - значит текущая страница или первая или последняя

Как это дело вставить в шаблон? что бы получилось 2 ссылки ? предыдущая и следующая

Поделиться

4

Re: Как организовать случайный вывод страниц ?

Привожу готовый код:

<?php
<?php
    $slug = Page::slug();
    if( $slug == 'home' ) $slug = '';
    $pages = Page::getPages();
    $count = count( $pages );
    $prev = $next = $rand = '';
    foreach( $pages as $i => $page )
    {
        if ( $page['slug'] == $slug && $page['parent'] == 'blog')
        {
            $rand_ = rand( 0, ( $count-1 ) );
            $rand = '<a href="' . Site::url() . '/' . $pages[$rand_]['slug'] . '">Случайная страница</a>';

            if ( $i > 0)
            {
                $prev = '<a href="' . Site::url() . '/' . $pages[$i-1]['slug'] . '">Назад</a>';
            } else
            {
                $prev = 'Назад';
            }
            if ( $i < ($count - 1) )
            {
                $next = '<a href="' . Site::url() . '/' . $pages[$i+1]['slug'] . '">Вперед</a>';
            } else
            {
                $next = 'Вперед';
            }
        }
    }
?>
<?php echo $prev ?>
<br>
<?php echo $next ?>
<br>
<?php echo $rand; ?>

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

if ( $page['slug'] == $slug && $page['parent'] == 'blog')

на

if ( $page['slug'] == $slug )
Спасибо говорим плюсиком в репутацию. Так виднее smile

Поделиться