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

Прислано: lalex

вт, 01/05/2007 - 15:11

Другие статьи по теме:

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

Интересно, что для ограничения публикации нет необходимости писать свой модуль (хотя наверное это было бы правильнее, но это обсуждаемо) в данном примере - все реализовано в тем.
Суть вопроса состояла в том, что пользователи должны вводить максимум 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 
'<h3>'.$edit_title.'</h3>';
        print 
'<p>Ограничения не позволяют Вам публиковать более 5 новостей в сутки!</p>';
        } else {
            print 
form_render($form);
       }

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

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

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

Комментарии


Настройки просмотра комментариев

Выберите нужный метод показа комментариев и нажмите "Применить"
Опубликовано chup в ср, 02/05/2007 - 12:23.

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


Опубликовано ola90 в чт, 03/05/2007 - 07:07.

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


Опубликовано SlavviR в пт, 04/05/2007 - 05:55.

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

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

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

спасибо


Опубликовано alexmethod в сб, 28/11/2009 - 19:21.

deleted


Опубликовано sadmin в ср, 11/02/2009 - 13:09.

Спасибо. Нужно будет подумать для 6ки


Опубликовано alexmethod в сб, 28/11/2009 - 19:20.

deleted


Опубликовано Targrid@drupal.org в сб, 11/04/2009 - 16:08.

Задался поиском решения для Drupal 6 - http://drupal.org/project/node_limit. Также на странице модуля есть ссылки еще на три подобных по функционалу модуля, в том числе и под D5.


Новое на сайте

Ссылки партнёров