Пишу фильтр и что то никак не могу найти где можно получить дату последнего редактирования (или создания, если редактирования не было) ноды или комментария. Фильтр должен обрабатывать документы только измененные (или созданные) после определенной даты. Что то уже все перепробовал - ничего не получается. Как правильно?
Комментарии
Не знаю какой фильтр, где, и как вы пишите. Но в views можно выбрать фильтр -
Материал: Дата обновления
Материал: Дата обновления/комментирования
В друпале пишу свой модуль-фильтр, который затем добавляется в фильтры формата ввода. Сорри, если изначально непонятно написал. Так вот фильтр написан и работает, но как выяснилось уже после того как он был написан работает он "слишком глобально", сайт существует давно и новый фильтр должен обрабатывать не все, а только тексты изменения которых произошли после установки данного фильтра (дата выставляется в настройках фильтра).
Это я знаю. Спасибо! Только совсем непонятно как до них достучаться. У меня не получается даже определить, что в данный момент фильтр обрабатывает ноду, коммент или что то другое...
т.е. если я правильно понимаю вопрос делится на три части:
1. Как определить что обрабатывается фильтром (нода или коммент).
2. Далее видимо нужно загрузить весь массив с помощью node_load или _comment_load. Но для этого нужны входные параметры (если нода, то nid, если коммент, то cid.) Тоже не понимаю где их можно узнать.
3. Обратиться в массиве к нужной ячейке и сравнить с заданной датой - с этим все понятно.
Может я не тем путем иду? Может можно как то проще, потому как таким образом пока не понятно.
Заранее Спасибо!
в нодах дата создания и редактирования хранится в полях created и changed соответственно
а что за фильтр вообще? хук фильтр? в какой момент от перехватывает контент для фильтрации. А то непонятно что вы используете.
нет такого, в фильтры не передаётся контекст, только выцеплять nid по arg()
Можно чуть поподробнее? Я правильно понимаю, что до того как выцеплять nid, еще нужно понять, что это нода, а в комменте соответственно выцеплять cid?
<?php
if (arg(0) == 'node' && is_numeric(arg(1))) {
$query = db_fetch_object(db_query("SELECT n.changed FROM {node} n WHERE n.nid == %d", arg(1)));
}
?>
$query->changed будет дата последнего изменения в формате unixstamp. Если ноду не редактировали - равна дате создания. Работать будет на странице просмотра и редактирования ноды.
Ну а сами условия показа варианта фильтра для элемента формы делайте через hook_form_alter(), в качестве одного из аргументов он принимает ID формы. Сможете решить в каких именно полях какой формы ваш фильтр показывать.
== MySQL это не ест )
очепятка))
И даже запрос можно не делать
Спасибо! Через arg() получить номер, а затем и время ноды на конкретной странице можно, но вот незадача, на этой же странице помимо самой ноды есть и комментарии к ней и у них своя дата и у каждого своя... либо я не понял всего изящества данного решения, либо оно неприемлемо к поставленной задаче. Либо я не совсем доходчиво объяснил задачу, потому как половину того, что мне тут написали я не понимаю куда в моей задаче можно приложить.
Попробую написать что мне надо на примере.
на странице /admin/settings/filters/1 есть список фильтров, я к нему добавляю еще один свой, который, допустим, в текстах заменяет слово "редиска" на словосочетание "нехороший человек". Но должен он это делать не во всех текстах, а допустим, только в текстах измененных после 1 января 2012 года,и во всех местах, где используется данный формат ввода (в моем случае как в нодах, так и в комментариях). т.е. если нода создана в декабре прошлого года, то слово "редиска" в ней остается без изменений, а в комменте к этой ноде, написанном 2го января оно должно замениться.
Есть решение данной задачи или это в принципе противоречит хитрой логике Друпала и в нем невозможно?
Хорошенько поразмыслив пришел к выводу, что данный путь не является оптимальным для решения поставленной задачи, намного более правильный путь логически понятен, но совсем непонятно как его реализовать, а именно:
Все роли до даты "Х" используют одни форматы ввода, а после данной даты другие (с этим фильтром).
т.е. не просто поменять форматы ввода для ролей, а чтобы при обнулении кэша старые документы обрабатывались старым набором фильтров,а новые новым. Такое реально?
Можно сделать в шаблоне ноды. Выводить содержимое любого поля / body в зависимости от даты создания/изменения. В node-тип.tpl.php вывести что-то в духе:
<?php
if ($node->changed < 234534535) {
print check_markup($node->field_нужноеполе[0]['value'], 1)
} else {
print check_markup($node->field_нужноеполе[0]['value'], $node->field_нужноеполе[0]['format'])
}
?>
Ну и соответственно вместо 1 поставить ID нужного формата ввода, а в настройках отображения поля отключить вывод в переменную $content. В таком случае выбранный формат а форме создания/редактирования ноды будет игнорироваться для нод с датой изменения ранее 234534535, т.к. вы выводите его в нужном формате принудительно. И это нужно проделать для всех полей ноды, для которых нужно изменить этот самый формат без ручного переключения.
Хотя не совсем понимаю, как у вас возникла такая странная задача. Опишите детальней зачем вам это нужно, может есть более простое решение.