Запрет пользователю публиковать более ХХХ нод

Главные вкладки

Аватар пользователя lalex lalex 1 мая 2007 в 19:11

Небольшое лирическое отступление - "XXX" не имеет никакого отношения к сексу с кем или чем либо... Smile

Интересно, что для ограничения публикации нет необходимости писать свой модуль (хотя наверное это было бы правильнее, но это обсуждаемо) в данном примере - все реализовано в тем.
Суть вопроса состояла в том, что пользователи должны вводить максимум 5 нод в сутки определенного типа. При этом нам необходимо оставить возможность редактировать все введенные пользователем ноды (его авторства конечно)
Итак приступим:
нам необходимо вставить эти конструкции в конце template.php для того чтобы подключить собственную форму редактирования ноды для контента content_news
<?php
//Форма добавления
if ((arg(0) == 'node') && (arg(1) == 'add') && (arg(2) == 'content_news')){
function phptemplate_node_form($form) {
return _phptemplate_callback('news_edit', array('user' => $user, 'form' => $form));
}
}
// Форма редактирования
if ((arg(0) == 'node') && (arg(2) == 'edit' && (arg(2) == 'content_news'))){
$node = node_load(array('nid' => arg(1)));
function phptemplate_node_form($form) {
return _phptemplate_callback('news_edit', array('user' => $user, 'form' => $form));
}
}
?>
в качестве комментария - вы можете пропустить проверку arg(2) - тогда у вас будет один шаблон для редактирования любых типов контента. Или вы можете указать отдельный шаблон для добавления или для редактирования даже в одном типе контента. Очень здорово - не правда ли?

А теперь пора создавать шаблон для формы редактирования/Добавления (news_edit.tpl.php):
<?php
if (arg(1) == 'add') {
$edit_title = "Добавление новости";
//делаем что-то при добавлении ноды
global $user;
$sql_usernodes = "SELECT COUNT(n.nid) as nidcounter FROM {node} n WHERE n.uid=".$user->uid." AND FROM_UNIXTIME(n.created)>DATE_SUB(CURRENT_TIMESTAMP(), INTERVAL 24 HOUR) AND n.type = 'content_news' GROUP BY n.uid ";
//запрос выдает нам счетчик нод которые запостил пользователь за последние 24 часа
$qry_usernodes = db_query($sql_usernodes);
if (db_num_rows($qry_usernodes)>0) {
$cntr = db_fetch_object($qry_usernodes);
$ncounter= $cntr->nidcounter;
} else {
$ncounter=0;
}
//$ncounter - количество нод которые опубликовал пользователь,проверяем что не больше пяти
if ($ncounter>5) {
$edit_title = "Ошибка!";
print '

'.$edit_title.'

';
print 'Ограничения не позволяют Вам публиковать более 5 новостей в сутки!';
} else {
print form_render($form);
}

} else {
$edit_title = "Редактирование новости";
//делаем что-то при редактировании ноды
print form_render($form);
}
?>

Помимо таких ограничений вы можете также темизировать формы добавления, редактирования нод. (достаточно поработать с $form), но это уже отдельная тема.

P.S. очень логичным так же выглядит такая проверка с помощью создания модуля который будет проверять кол-во опубликованных нод. Вариант с темами не очень удобен в том плане, что значение которое вы используете как ограничитель - задается жестко. А в модуле вы можете создать страницу с настройками и сохранять это значение в переменной в базе.

Комментарии

Аватар пользователя chup chup 2 мая 2007 в 16:23

О, то что надо! Все думал, как же это реализовать, а тут и ответ Wink Спасибо!
Сейчас поставлю себе, погоняю, может еще что придумается.

Аватар пользователя ola90 ola90 3 мая 2007 в 11:07

Спасибо! Очень полезная функция. А как сделать, чтобы после заполнения формы пользователь сразу уходил на frontpage?

Аватар пользователя SlavviR SlavviR 4 мая 2007 в 9:55

дааа, нужная вещь!

подскажите, мне в перспективе понадобится, чтоб пользователи могли создавать вообще только один нод (именно в отдельном созданном блоге) с возможностью редактирования

например в стандартном блоге - все без границ
а в другом его подобии – ограничение только на один нод

спасибо