Доработки Simpla: модерация комментариев
Дата: 03 Дек ' 10 Автор: mart Рубрики: Программирование
В рамках правок очередного магазина, реализованного на Симпле стояла задача публикации комментариев после модерирования. По катом инструкция о том как это сделать.
Первым шагом будет создание поля «включить-выключить» в таблице products_comments. Выполним запрос
ALTER TABLE `products_comments` ADD `enabled` TINYINT( 1 ) NOT NULL DEFAULT '0' AFTER `comment` |
Далее правим вывод комментариев во фронтенде — в файле Storefront.class.php находим код (примерно 311 строка)
$query = sql_placeholder("SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM products_comments WHERE product_id=? ORDER BY comment_id DESC", $product->product_id); |
И изменяем его на следующий вид — вводим понятие «включено-выключено» (WHERE enabled=1)
$query = sql_placeholder("SELECT *, DATE_FORMAT(date, '%d.%m.%Y') as date FROM products_comments WHERE enabled=1 AND product_id=? ORDER BY comment_id DESC", $product->product_id); |
Ну и последний и самый сложный шаг — непосредственно сама модерация.
Открываем файл admin/Comments.admin.php и примерно на 49-50 строке перед закрывающей скобкой метода prepare() (внутри метода в конце)
# Сделать комментарий видимым if(isset($_GET['set_enabled'])) { $this->check_token(); $id = intval($_GET['set_enabled']); $query = sql_placeholder('UPDATE products_comments SET enabled=1-enabled WHERE comment_id=?',$id); $this->db->query($query ); $get = $this->form_get(array()); if(isset($_GET['from'])) header("Location: ".$_GET['from']); else header("Location: index.php$get"); } |
Далее в этом же файле в конце на ходим строки
if($items) { foreach($items as $key=>$item) { $items[$key]->delete_get = $this->form_get(array('act'=>'delete','item_id'=>$item->comment_id, 'token'=>$this->token)); } } |
и заменяем все на
if($items) { foreach($items as $key=>$item) { $items[$key]->delete_get = $this->form_get(array('act'=>'delete','item_id'=>$item->comment_id, 'token'=>$this->token)); $items[$key]->set_enabled_get = $this->form_get(array('set_enabled'=>$item->comment_id, 'token'=>$this->token)); //передаем действие на включение/выключение } } |
Теперь непосредственно само отображение в админке данного функционала. Открываем файл admin/templates/comments.tpl, находим вывод кнопки удаления комментария (примерно 80 строка)
<a class="fl" onclick="if(!confirm("{$Lang->ARE_YOU_SURE_TO_DELETE}")) return false;" href="index.php{$item->delete_get}"><img src="./images/delete.jpg" alt="" /></a> |
и после нее сразу добавляем код кнопки модерирования
<a class="fl" href="index.php{$item->set_enabled_get}"><img title="Активность" src="./images/{if $item->enabled}lamp_on.jpg{else}lamp_off.jpg{/if}" alt="Активность" /></a> |
Вот в-принципе и все действия.
4 комментария
-
06|Дек|2010
1
Все отлично работает, но есть замечания:
1. Когда посетитель пишет комментарий — нигде не отображается, что «сообщение будет опубликовано после модерации» (или что-то подобное).
2. Было бы превосходно, если бы о том, что новый комментарий ожидает проверки, приходило бы сообщение (или RSS с комментариями).Безусловно, второе замечание больше имеет отношение вообще к движку…
-
антон
14|Апр|2011 2Соглашусь с Алексеем, первое замечание может как-то возможно реализовать в шаблоне?
-
Евгений
09|Июн|2011 3и третий вариант, чтобы админ мог удалить сообщение!
его не возможно удалить с админки.
-
Евгений
09|Авг|2014 4Добрый день!
сейчас в симпле модерируется только первый коммент.
как сделать что-бы все шли на модерацию?