Камрады, подскажите элегантное решение проблемы:
Мне необходимо, чтобы в ленте новостей каждая пятая нода выделялась стилем. Каким образом и куда прикрутить счётчик, чтобы он автоматически отсчитывал пять нод и применял опцию. Всё это с учётом случайности выводимых нод: мне нужно не привязка к определенным нодам, а действие с шагом.
А то мозги уже совсем не варят.
Спасибо.
Комментарии
Выводи новости вьюсом, добавь поле счетчика (во вью 3 есть), добавь custom_field с выводом признака. Ну а дальше это все можно темизировать...
Да, забыл уточнить, в данной ситуации приходится обходиться без сск и вьювов. Заказчику это почему-то очень критично. Приходится искать именно костыли.
Поубивал бы таких "грамотных" заказчиков.
Если заказчик знает как надо делать, значит пусть он и делает.
Если заказчик придёт к строителям и скажет "сваи этой многоэтажки будем делать не из бетона, а из дерева - так сейчас моднее", думаете строители кинуться сосны в землю забивать?
С другой стороны, если вы это оговорили ранее, то теперь вам и выкручиваться
Ну а по теме проблем не вижу: делаешь выборку какую надо, потом в коде считаешь каждый пятый вывод. Где застрял?
Если заказчик платит за смену ТЗ и за новые условия - это редкий, прям таки золотой заказчик...
Не понял. А что, при изменении ТЗ и условий, цену менять не надо?
Эдак я вам закажу простой блог, а в процессе работы поменяю ТЗ, вписав туда задание на новостной портал. Будете спокойно делать?
Думаю это вполне нормальная ситуация, что в процессе разработки у заказчика возникают дополнительные желания. Продолжая аналогию со строительством, если мне захочется в придачу к строящемуся дому построить и детскую площадку, вполне ожидаемо, что подрядчик выставит мне дополнительную смету на неё, так ведь?
Тут весь вопрос в организации работы. А она проста. Написали ТЗ, согласовали сроки и цены, все дополнения/изменения согласуются отдельно. Да, это бюрократия, но сэкономленные время и деньги того стоят.
Аналогично с вашей ситуацией. Если не оговаривалось, что надо делать без CCK и Views, значит реализация на усмотрение исполнителя (т.к. читать мысли не умеем и понятие "я имел ввиду то-то" в технической документации отсутствует). Если у заказчика вдруг возникли мысли по способу реализации, то это уже, по сути, изменения в ТЗ.
Тю, вам что ни разу не попадались люди, которые после заверенного ТЗ начинали канючить "а сюда кнопочку добавьте, чего вам стоит" или "рамки сделайте пошире, я хочу больше воздуха". И обижаются...
А тут человек сразу: сколько вам нужно доплатить чтобы вы...
Я всего лишь говорю что ТАКИХ заказчиков мало. И всё тут.
Пардон, я не понял, что у вас адекватный заказчик
Так ещё раз, в чём проблема? Вам нужно изменить стандартный вывод нод?
Идём сюда: node_menu, видим что для вывода нод используется ф-ция node_page_default
Делаем hook_menu_alter для изменения стандартного обработчика вывода нод, на свой, по образу и подобию node_page_default, всё что нужно изменить в нашем обработчике, так это код:
$num_rows = FALSE;
while ($node = db_fetch_object($result)) {
$output .= node_view(node_load($node->nid), 1);
$num_rows = TRUE;
}
, вставив счётчик, о котором вы и спрашивали. Ещё можно в объект ноды вставить флаг, что это пятая нода, примерно так:
$node_obj = node_load($node->nid);
$node_obj->five_flag = ($count == 5);
$output .= node_view($node_obj), 1);
$count = ($count >= 5)? 0 : $count + 1;
$num_rows = TRUE;
...
Если вы уже писали свои модули, то никаких сложностей по моему mini-howto у вас возникнуть не должно )
Занятный вариант. А если удалять промежуточные ноды
(1,2,3,4,5!,6,7,8,9,10!) => (1,3,5,6,7!,9,11,15,16!)
флаги сами перепрыгнут из 5-10 на 7-16?
если туплю - бейте ногами. нехватка здорового сна в организме сказывается...
node.tpl.php
$class = '';
if (++$GLOBALS['nodecounter'] == 5) {
$class = 'five';
$GLOBALS['nodecounter'] = 0;
}
?>
<div class="node <?php echo $class; ?> ...>
...
</div>
можно static переменную в preprocess_node завести
$GLOBALS['nodecounter'] - именно то что надо. Спасибо.
Только надо иметь ввиду, что это будет работать во всех списках, которые используют шаблон node.tpl.php, например в терминах таксономии.
Пока что ограничусь тизерами.
if ($teaser) {} - спасает.