УрокОтдельный 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. Оно-то удобно, только я наткнулся на такую вот таблицу совместимости этого селектора с браузерами:
Поэтому какой вариант использовать - решать только вам.
- Spleshka
- 24.10.2010
- 6245
Комментарии
Вот уж не ожидал такой быстрой реакции, да еще и в воскресенье! Спасибо большое, очень сильно помогли, я уже что только не испробовал :)
да, присоединяюсь! Спасибо сэнсей! Очень полезный урок!
+стопицот!
чтобы можно было повесить только на неё свой css.
.node:last-child {
тра та та
}
Спасибо, добавил третий вариант
Хочу сказать, что всё отлично работает! Единственное, пришлось запрос к БД в кавычки заключить. :)
Я просто не тестировал, а писал прямо сюда :) Поэтому извиняюсь за ошибку, поправил
Комментировать