Powered by CodeIgniter

Каталог

(10)
7
7 голосов
Сообщество для публикации релизов файлов в каталоге продуктов.
Подписка на сообщества Рад представить вашему вниманию новую шестеренку, довольно простую, но полезную. При публикации топика в сообщество, все его участники получают оповещение на контактный адрес электронной почты. Под катом я расскажу вам о том, как создавалась шестеренка, и сколько времени на ушло на ее создание.
Как обычно, времени ушло около получаса с учетом того, что 20 минут я занимался дебаггингом :-)
Прежде чем приступать к работе следует поставить

Цель

Шестеренка должна отправлять участникам сообщества оповещение на почту, если в нем был опубликован новый топик.

Ресурсы

Гибкая система хуков движка позволяет проникнуть в момент создания ноды извне, с целью произвести необходимые операции в нужный момент времени.

Решение задачи

Создаем папку /gears/community_subscription со следующей структурой:
_hooks.php — файл с хуками
img/
community_subscription.png — иконка PNG 64x64 пикс
lang/
ru.lng — файл с текстами перевода
community_subscription.info — настройки шестеренки

Листинг файла конфигурации /gears/community_subscription/community_subscription.info:
title = "Community Subscription" description = "Send email about new post to every community member" core = 1.x version = 1.0 group = "plugins" enabled = TRUE
Листинг файла перевода /gears/community_subscription/lang/ru.lng:
[gears] community_subscription = "Рассылка сообщества" community_subscription_description = "Отправляет письма всем участникам сообщества при публикации новых топиков в нем" [community_subscription] subject = "Топик ''%s'' в сообществе ''%s''" body = "Привет, <b>%s</b>! В сообществе «<a href=''%s''>%s</a>», участником которого вы являетесь, только что был опубликован новый топик:<p><a href=''%s''>%s</a></p>" messages_send = "Письма успешно отправлены всем членам сообщества."
Листинг файла хуков /gears/community_subscription/_hooks.php:
<?php /** * Community subscription hooks * * * * @author Dmitriy Belyaev <admin@cogear.ru> * @copyright Copyright © 2010, Dmitriy Belyaev * @license http://cogear.ru/license.html * @link http://cogear.ru * @package Community subscription * @subpackage Hooks * @version $Id$ */ /** * Hook form model save method to catch node post moment. * If node is posted to community — system sent email to it's members with notification. * * @param object $Form Form model. * @param boolean $result Operation result. * @param string $table Database table name. * @param array $data Saved data. * @return void */ function community_subscription_form_save_after_($Form,$result,$table,$data){ $CI =& get_instance(); // Check conditions — our form, result is positive and community is defined if($Form->name == 'node_createdit' && $result && !empty($data['cid'])){ // Set language departure d('community_subscription'); // Get community object by id $community = $CI->community->get($data['cid']); // Get node by database last insert ID $node = $CI->node->get($Form->insert_id)->row(); // Create form link $node->link = $CI->node->create_link($node); // Get all community users from database $users = $CI->db->select('community_users.uid as id')->get_where('community_users',array('cid'=>$community->id))->result(); foreach($users as $user){ // Get user info by ID $user = $CI->user->info($user->id); // Form mail letter and post it $CI->mail->to($user)->from()->subject(t('subject',$node->name,$community->name)) ->body(array(t('body', $user->name, 'http://'.$CI->site->url.'/community/'. $community->url_name.'/', $community->name, $node->link, $node->name))) ->go()->clear(); } // Add notification message msg(t('messages_send')); // Set language departure to previous — to avoid conflicts with other hooks system d(); } }

Результат

За 30 минут работы мы получили полезный и функциональный компонент.

Удачи в разработке!
16:16 ← 24 июля 2010 Отправить в Твиттер adminadmin  RSS comments 11
Название Разработчик Информация Размер Количество загрузок
Подписка на сообщества
После публикации топика в сообщество, каждый его участник получит оповещение на почту.
admin admin
Версия продукта: 1.0
Отзывов: 0
Добавлено:
15:50 ← 24 июля 2010
Обновлено:
15:50 ← 24 июля 2010
0.01 Мб 92 download

Комментарии (11) ↓

inetlover inetlover time 16:41 ← 24 июля 2010 #
Спасибо!

Как раз увидел у себя в почте, что-то новое от Сogear и пришел по этому приглашению.
Wave Wave time 16:53 ← 24 июля 2010 #
Хотелось бы иметь возможность подписываться-отписываться на такие рассылки, а не в принудительном порядке получать на почту всё подряд.
Ещё предложение по доработке — иметь возможность подписаться на произвольное сообщество.
И вопрос: я правильно понял, что рассылка будет также в случае редактирования существующего топика в сообществе?
inetlover inetlover time 16:55 ← 24 июля 2010 #
А новая кнопочка опубликовать а контакте — это шестеренка Freemа Опубликовать ВКонтакте
inetlover inetlover time 16:57 ← 24 июля 2010 #
Кстати, исчезло меню для редактирования комментария и предпросмотр работает как отправить.
Автор
admin admin time 17:06 ← 24 июля 2010 #
Все пофиксил. Это из-за обновления мутулсов было — старые файлы не удалил, поэтому и конфликтовали скрипты.
Автор
admin admin time 17:02 ← 24 июля 2010 #
Поставил дополнительных шестеренок сюда, ищу причину бага.
dezmax dezmax time 19:46 ← 24 июля 2010 #
Спасибо за шестерню. Кулл!
Автор
admin admin time 19:50 ← 24 июля 2010 #
Пожалуйста.
BaNru BaNru time 13:29 ← 25 июля 2010 #
Пишу тут, так как это в срочном порядке…
Ха, кажется я убил блоги :-)
Вот что значит защита… в заголовке темы написал <скрипт> и [ремовед] естественно по английски и убил блоги :-)
Правьте баг, но не удаляйте мою тему!
dezmax dezmax time 13:31 ← 25 июля 2010 #
я уже в личку админу о проблемме написал!!!
BaNru BaNru time 13:32 ← 25 июля 2010 #
спасибо