Вот бился полдня так и не понял, можно ли как-то сделать показ в блоке материалов старее чем текущий, пробовал через Contextual filters получать дату текущего материала, но как его потом применить к фильтрации, так и не понял...
Ответы
Можно попробовать сделать так ...
Оформляете views, чтобы был вывод материалов, дата которых не менее, чем какая-то дата в далеком будущем, например, 01.01.3000 года.
Далее, пишете свой модуль, который перехватывает формирование этого views, если он был вызван на определенных страницах.
С ходу я Вам не назову, какой хук надо перехватывать, вот их список
http://xandeadx.ru/blog/drupal/761
Таким образом, если views вызывается на странице с материалом, то программно в этом хуке определяете дату этого материала и там же меняете дату во views c 01.01.3000 на дату этого материала.
Не думаю, что в результате будет большой код.
Но это в случае, если Вы решили делать это через views.
Можно спокойно сделать и без него. Например, в модуле определить блок с таким-то содержимым, формируя его через db_select, а template для вывода одной строки в блоке можно определить через hook_theme.
Может пригодится мой вариант, но он немного отличается. У меня была глобальная переменная "дата 1", задаваемая модератором, и в каждой ноде поле "дата 2".
Как я делал. Поставил модуль Views Php
После этого в представлении в фильтре появилась возможность добавить условие Global:Php
Дальше в этом фильтре доставал свою глобальную переменную Дата1, сравнивал с значением поля Дата2 и в зависимости от того больше или меньше дата - скрывал/показывал ноду. Для сравнения дат можно их перевести в Unix-формат.
В этом методе надо будет только придумать как достать время текущей ноды и вставить его в этот Global:Php фильтр.
Есть упрощенный вариант для вопроса конкретно в том случае, что описан.
Сравнивать не время а айди ноды, т.к. те, которые младше - всегда с меньшим айди.
Блин, как сложно :)
до конца не ясно, что требуется. если речь про страницы материала, на которых блок, отображающий анонсы старых материалов, я бы тогда взял да и настроил бы контекстный фильтр, чтобы получить nid (из урла, если фигурирует, иначе php кодом)
в обычном, не контекстном, фильтре используем простенький php код, сравнивая, например timestamp'ы
о каких «глобальных переменных» вы говорите? это же бред сивой кобылы. мы можем выполнить, например
node_load($nid)
и получить объект ноды, где есть дата создания. для материалов блока дату создания можно добавить в поля и использовать её для сравнения с датой из объекта ноды, подтянутой через контекстный фильтр. можно DB API
$title = db_query("SELECT created FROM {node} WHERE nid = :nid", array(':nid' => 11111))->fetchField();
использовать, не загружая всю ноду, а выбирая только нужное
.
Спасибо, уже ближе к правде. Просто самому делать, возиться потом с ajax пангинацией.. Не делал никогда. Но по ходу придется :)
Попробуйте с хуком для views.
В этом случае, думаю, вы сможете задействовать средства ajax для views.
Короче сделал, сейчас только вспомнил, что хотел сделать :)