Два потока на одной странице

Привет коллеги!

Подскажите плиз, как найти решение такой задачи:

на одной странице шаблона надо выводить два потока информации:
1) посты определенной категории (с анонсами)
2) общая лента постов (с анонсами)

эти потоки разнесены "в пространстве" – располагаются в разных дивах

заранее благодарен!

Чтим Кодекс! Множественные Циклы

Чтим Кодекс! Множественные Циклы

спасибо за оперативность! пошел читать!

by the way = а плагина нет на данный счет?

правильно ли я понял? =

1) в одном диве мы мы вставим

<?php if (have_posts()) : ?>
               <?php while (have_posts()) : the_post(); ?>    
     <!-- атрибуты записи ... -->
     <?php endwhile; ?>

2) во втором слое будет

<?php rewind_posts(); ?>
 
  <?php while (have_posts()) : the_post(); ?>
    <!-- получить записи... -->
  <?php endwhile; ?>

То есть с помощью

<?php rewind_posts(); ?>

мы сбросим тот факт, что уже запустили один цикл?

Смотрите, перед каждым циклом вывода должен быть сформирован список постов. Это делает функция query_posts. Она выполняется неявно движком перед вызовом шаблона. Поэтому Цикл в обычном шаблоне выводит то что заказано (на что урл показал) без явного вызова query_posts. Если нам нужен другой список, то мы должны явно вызвать query_posts с нужными нам параметрами, а уже потом крутить Цикл. А то, как Вы написали, будет бегать по одному и тому же списку. Это имеет смысл, скажем, если в одном диве выводятся картинки от всех постов, а в другом – заголовки с анонсами тех же постов. Но Вы-то хотите разные списки? Значит, и формирование должно выполняться два раза – по одному на каждый Цикл вывода.

Тут, кстати, есть один интересный момент из серии "от перемены мест слагаемых…" Если сначала (по коду, не по лейауту страницы) выводить то что и должно быть, что урл прописал, то выборки постов (запросов к базе) будет две. А если сначала вывести дополнительную выборку – то три. Почему? Потому что мы 1)игнорируем результат первого запроса, 2)запрашиваем доп. список и 3)снова формируем основной список, который похерили в п.1.

Тогда получается так =

В первом диве выводим посты из категории history, 10 штук

<?php query_posts(’category_name=history&showposts=10’); ?>
<?php if (have_posts()) : ?>
<?php while (have_posts()) : the_post(); ?>
<?php the_content(''); ?>
<?php endwhile; ?>

Во втором диве выводим все посты, изо всех категорий количеством управляем из админки

<?php query_posts(); ?>
<?php rewind_posts(); ?>
<?php while (have_posts()) : the_post(); ?>
<?php the_content(''); ?>
<?php endwhile; ?>

Теперь правильно?

Близко.
1. Если это хозяйство находится в шаблоне рубрики history, то первый query_posts не нужен – движок его уже выполнил.
2. У меня есть сомнения, что query_posts() выбирает все посты из всех категорий. Что Кодекс говорит по этому поводу? 😉
3. rewind_posts() – зачем "перематывать", если и так указатель на начале списка? Указатель сдвигается на следующую запись запросом the_post().

хм… что-то я никак не воткну с

<?php rewind_posts(); ?>

= вот же указание

Для того чтобы второй раз использовать цикл, с таким же запросом, вызовите функцию rewind_posts(). 
Она сбросит счетчик цикла и позволит вам выполнить другой цикл.

вот отсюда

ну-у-у-у тогда для шаблона history – это Вы имели ввиду рубрику хистори? но ведь если это будет шаблон уникальный шаблон основанный на page.php – тогда все-таки надо!

про кодекс = в англоязе я не волоку, но что-то мне подсказывает :lol:, что придется, хотя бы, исключить одну категорию – ту же хистори

...с таким же запросом...

…таким же… Ну, ловите?

уникальный шаблон основанный на page.php

Да пофиг на чем основан, главное – на какой урл он отзывается.

Anonymous
Отправить
Ответ на: