Есть желание сделать такую штуку:
При отправке создаваемого материала/комментария он должен проверяться на определенные условия, например наличие в нем подстроки (цензура?) И, если эта подстрока в нем окажется, выдавать ошибку и не сохраняться.
Вопрос: как это сделать?
Есть ощущение, что надо использовать Форматы ввода - фильтрацию входящего текста, но фильтры только обрабатывают текст и сохраняют его в любом случае.
Или надо как-то использовать триггеры/действия, но действие срабатывает уже после опубликования, и там нет действия "удалить".
Что тут можно придумать?
drupal 6
Комментарии
С фильтрами поиграться можно, но они не позволят запретить сохранение материала, если в нем найдены ошибки, они позволят, например, удалить или заменить часть строки.
http://api.drupal.ru/api/file/developer/examples/filter_example.module/6
.
Вот недавно делал себе проверку на одинаковые значения поля cck node reference:
<?php
function _my_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch ($op) {
case 'validate':
switch ($node->type) {
case 'b':
_validate_unique_fileds_nodereference($node, field_b_author);
break;
}
break;
}
}
// Сама функция проверки по имени поля
function _validate_unique_fileds_nodereference($n, $filed_name) {
if (isset($n->$filed_name) && count($n->$filed_name) > 0) {
$nids = array();
$errFields = array();
foreach ($n->$filed_name as $key => $val) {
if (is_numeric($val[nid])) {
if (in_array($val[nid], $nids))
$errFields[] = $val[_error_element];
$nids[] = $val[nid];
}
}
foreach ($errFields as $errField)
form_set_error($errField, t("Повторяющиеся значения недопустимы!"));
}
}
?>
Это в модуле пишется, только не спрашивайте что это такое
Спасибо за идею глянуть наконец в сторону написания своего модуля, а то как-то у меня руки не доходили.
Разбирался к хуками, часа 3 убил, пытаясь понять, почему hook_validate не срабатывает, потом решил попробовать hook_nodeapi, и сразу все получилось
Сделал себе модуль из 1-й функции, потом по мере возникновения задач буду туда же дописывать все, что мне нужно.
Выкладываю код своего файла ilfeatures.module:
// $Id$
function ilfeatures_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
switch($op)
{
case 'validate':
// Convert the node to an object, if necessary.
$node = (object)$node;
$type = node_get_types('type', $node);
if(strstr($node->body,'та_подстрока_которую_надо_запретить'))
form_set_error('ilfeatures', t('The body of your type contains substring that is not allowed.', array('type' => $type->name)));
break;
default:
}
}
И еще дополнение для комментария:
switch($op)
{
case 'validate':
if(strstr($a1['comment'],'та_подстрока_которую_надо_запретить'))
form_set_error('ilfeatures', t('The body of your type contains substring that is not allowed.', array('type' => 'Comment')));
break;
default:
}
}
Модуль в тему