УрокОтдельный css для последней ноды

Задача такая: есть страница с выводом всех нод. Надо повесить на последнюю ноду дополнительные классы, чтобы можно было повесить только на неё свой css.

Теперь о решении

Вариант номер раз

Говорю сразу - не самый лучший вариант. Зато явно самый простой. Заключается в следующем - просто последнюю ноду отмечать галочкой "Закреплять вверху списков" (Sticky at top of list). Далее в шаблоне ноды node.tpl.php в первой строчке написать:

<div id="node" class="<?php if ($sticky && $teaser) echo 'sticky';?>">

Теперь последняя нода будет с дополнительным классом "sticky".

Вариант номер два

Более автоматизированный вариант - делать запрос к базе и смотреть, не является ли текущая нода последней.

Реализация:

1. открываем в нашей теме файл template.php и пишем туда такую функцию:

function имяТемы_preprocess_node(&$variables) {
 
  //получаем ноду, которую сейчас будем выводить
  $node = $variables['node'];
 
  //делаем запрос к базе, чтобы получить nid последней ноды
  $nid = db_result(db_query_range('SELECT nid FROM {node} ORDER BY created DESC', 0, 1));
 
  //создаём переменную, по которой будем отслеживать, 
  //является ли текущая нода последней. По умолчанию
  //не является
  $variables['is_last'] = FALSE;
 
  //если у последней ноды в базе и у текущей совпадают
  //nid, то наша нода - последняя
  if ($node->nid == $nid) {
    $variables['is_last'] = TRUE;
  }
}

Далее открываем шаблон node.tpl.php и верхней строчкой прописываем следующее:

<div id="node" class="<?php if ($is_last && $teaser) echo 'last';?>">

И у последней ноды автоматически появится класс "last". Готово.

Если надо будет выводить последнюю ноду только из опубликованных статей, и только из конкретных типов материалов, то запрос к базе будет такой (вместо того, что написан немного выше):

$nid = db_result(db_query_range('SELECT nid FROM {node} WHERE type IN ('page', 'story') AND status = 1 ORDER BY created DESC', 0, 1);

Не забываем поменять в функции имяТемы_preprocess_node слово "имяТемы" на реальное название своей темы, описанное в info-файле. Так же после выполнения второго варианта надо почистить кэш (кто забыл - admin/settings/performance).

Третий вариант выбора последней ноды

Любезно предложенный анонимом. Как он верно заметил - можно просто отобрать css селектором :last-child. Оно-то удобно, только я наткнулся на такую вот таблицу совместимости этого селектора с браузерами:

css.JPG

Поэтому какой вариант использовать - решать только вам.

Комментарии

Аватар пользователя s0ber
s0ber написал:

Вот уж не ожидал такой быстрой реакции, да еще и в воскресенье! Спасибо большое, очень сильно помогли, я уже что только не испробовал :)

24.10.2010 15:20
Аватар пользователя D.Choomc
D.Choomc написал:

да, присоединяюсь! Спасибо сэнсей! Очень полезный урок!
+стопицот!

24.10.2010 19:20
Аватар пользователя Тайный поклонник
Тайный поклонник написал:

чтобы можно было повесить только на неё свой css.

.node:last-child {
тра та та
}

25.10.2010 23:26
Аватар пользователя Spleshka
Spleshka написал:

Спасибо, добавил третий вариант

26.10.2010 01:47
Аватар пользователя s0ber
s0ber написал:

Хочу сказать, что всё отлично работает! Единственное, пришлось запрос к БД в кавычки заключить. :)

26.10.2010 12:03
Аватар пользователя Spleshka
Spleshka написал:

Я просто не тестировал, а писал прямо сюда :) Поэтому извиняюсь за ошибку, поправил

26.10.2010 13:00

Комментировать