TODO для скучающих

Выкладываем свои наработки
Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

TODO для скучающих

Сообщение samdark » 2009.11.09, 17:15

Возникла идея организовать своеобразный TODO для скучающих Yii-программистов.

Все желающие могут как оставить свои заявки на создание какого-либо интересного расширения для Yii, так и взять одну из размещённых заявок.

Уже разрабатываемые идеи отмечены подчёркиванием.

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2009.11.09, 17:26

Commentable
Поведение (behaviour) для моделей + набор формочек и всяких других плюшек, позволяющий через конфиг и самые минимальные правки прицепить комментарии к любой модели.
Расширения: Eav (паттерн Entity Attribute Value)
Даёт возможность хранить в базе объекты с свободным набором полей.
Расширения: Localizable
Даёт возможность прозрачно работать с моделями, хранящими информацию на разных языках.
Расширения: Taggable
Даёт возможность прозрачно назначать теги моделям.
Расширения: NestedSet
Поведение для работы с деревьями, хранящимися как вложенные множества.
Расширения: SoftDelete
Позволяет мягко удалять и восстанавливать записи.
Расширения:

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: TODO для скучающих

Сообщение pirrat » 2009.11.16, 20:35

ShopingCart
Библиотека с базовым функционалом Корзины товаров.
Расширения:
CombineClientScripts
Библиотека для обфускация, слияния и компрессии js и css.
у нас есть метод Yii::app()->clientScript->scriptMap , почему бы не расширить его таким функционалом?!
например как вариант, в конфиге хранить текущую версию скрипта(после изменения клиентских скриптов версию менять вручную в сторону увеличения). scriptMap при запуске,
сверяет версию в конфиге и версию слитого файла, и если они не совпадают, то он должен провести все манипуляции над нужными файлами и слить их заново переписав фаил.
помимо этого scriptMap при вставке ссылке на слитый фаил в html код, дописывает в конце версию (типа all.pack.js?version=5), для того чтоб браузеры обновили кэш этого файла...

TaskQueue
Библиотека для параллельного запуска однотипных задач в бекграунде.
По типу http://dev.kohanaphp.com/projects/task-queue

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: TODO для скучающих

Сообщение pirrat » 2009.12.21, 17:09

Модуль рассылки сообщений по базе получателей, с драйверами: email, ЛС, sms, etc., в первую очередь конечно же для email.

Это не готовое задание ,а идея, которую надо ещё развить...
Основная идея:
В приложении создается рассылка, для каждой рассылки создается очередь получателей .(данные о рассылки и получателях, хранится в бд).
Рассылка может быть как на несколько миллионов получателей(новостная рассылка), так и на одного пользователя(уведомление о комментарии).
У каждой рассылки есть шаблон, приоритет отправки, дата отправки и др параметры.

Отправка рассылки происходит НЕ в момент её создания, а в определенный период:
к примеру кроном каждые 5 минут проверять бд на наличие не отправленных рассылок, выбирать актуальные на данный момент, сортировать их по приоритету и запускать собственно сам процесс рассылки.
По скольку подписчиков может быть несколько миллионов, а сроки рассылки ограниченны - процесс рассылки должен проходить в несколько потоков(процессов).
По окончанию процесса рассылки для записи в бд ставится флаг ,что рассылка законченна.
_________________________________________________
примерный API для создания рассылки:

Код: Выделить всё

$mailing = new Mailing; //создаем новую рассылку
$mailing->setType('news'); //устанавливаем тип. Дополнительная информация(приоритет, откого, etc ) хранится в таблице типов_рассылки.
$mailing->setName('новая рассылка');
$mailing->setTemplate('шаблон');
$users = User::model()->findAll();
$mailing->AddRecipients($users); //добавляем подписчиков
 
В базу добавилась запись о новой рассылке ,а в таблицу подписчиков, добавлен список всех подписчиков этой рассылки.

Далее крон который отрабатывает раз в 5 минут ищет не отправленные рассылки.

Код: Выделить всё

$mailings = mailing::model()->with('mailing_type')->findAll($criteria); //нашли все рассылки актуальные на данный момент, отсортировали по приоритету
для каждой рассылки запускем отдельный рассыльщик
foreach($mailings  as $mailing)
{
$sender = new Sender;
$sender->setName($mailing->name);
$sender->setFrom($mailing->mailing_type->from);
$sender->setRecipients($mailing->getRecipients());
$sender->execute();
//рассыльщик в зависимости от длины очереди, делит её и запускает в несколько потоков.
}
 
Это лишь Примерная архитектура, хочется в первую. очередь услышать предложения по улучшению архитектуры и тд.

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2009.12.21, 17:37

Мысли вроде верные.

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: TODO для скучающих

Сообщение pirrat » 2009.12.21, 18:07

ну мне тоже так кажется, но нужно предусмотреть множество нюансов, и грамотно все спроектировать...
Возможно у кого-то есть наработки на эту тему или просто какие то мысли...
После того как архитектура будет полностью ясна, я (возможно с участием кого то из сообщества) реализуем расширение для yii с таким функционалом...
Есть уже примерная архитектура бд, и почти готовая диаграмма классов...

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2009.12.21, 18:10

У меня есть подобный набор классов. Отписал в личку.

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: TODO для скучающих

Сообщение pirrat » 2009.12.21, 18:16

Sam Dark писал(а):У меня есть подобный набор классов. Отписал в личку.
мм, спасибо!, но ни чего не приходило в ЛС! или у нас тут рассылка по ЛС, тоже по крону делается?)

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2009.12.21, 18:25

Отправил код почтой. При отправке ЛС я промахнулся кнопкой…

pirrat
Сообщения: 193
Зарегистрирован: 2009.04.03, 09:41

Re: TODO для скучающих

Сообщение pirrat » 2009.12.21, 18:29

спасибо, получил! Будем изучать.
Как будет что то более менее готовое(хотя бы по архитектуре) создам отдельный топик для расширения, где уже будем обсуждать конкретную реализацию.

ram0973
Сообщения: 54
Зарегистрирован: 2010.06.12, 22:18
Откуда: Набережные Челны
Контактная информация:

Re: TODO для скучающих

Сообщение ram0973 » 2010.10.17, 19:32

Есть такой сайт - racios.com. Использует идеи GTD http://ru.wikipedia.org/wiki/Getting_Things_Done Но он платный и довольно дорогой. Может кто в качестве обучения сделает на Yii нечто подобное? :D В общем-то сложного для опытного программиста там ничего нет. А штука очень полезная.

aliaksej
Сообщения: 14
Зарегистрирован: 2010.04.02, 18:29

Re: TODO для скучающих

Сообщение aliaksej » 2010.11.22, 19:43

Не хватает Yii одного поведения:

SortableBehaviour

Чтобы можно было сохранять сортировку элементов.

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2010.11.22, 21:29

То есть сохранять?

aliaksej
Сообщения: 14
Зарегистрирован: 2010.04.02, 18:29

Re: TODO для скучающих

Сообщение aliaksej » 2010.11.22, 23:19

Sam Dark писал(а):То есть сохранять?
К примеру, выводится список статей, и они должны быть именно в определённом порядке (в списке).
Для того, чтобы они всегда были в нужном порядке, должна быть возможность их сортировать.
По умолчанию GridView такой возможности не предоставляет. Но если прикрутить к таблице плагин UI.Sortable, то строки можно сортировать.
Это довольно распространённая задача, поэтому я с предлагаю написать поведение Sortable, у которого был бы метод - saveSort, или просто триггер, который бы сохранял нужный порядок, и была настройка имени поля, в котором хранится порядок.

Аватара пользователя
BuCeFaL
Сообщения: 447
Зарегистрирован: 2010.03.17, 21:22
Откуда: Kiev
Контактная информация:

Re: TODO для скучающих

Сообщение BuCeFaL » 2011.02.25, 21:07

Комманда для автоматических генериций миграция на основе существующей схемы бд и уже проделаных миграций.

Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Re: TODO для скучающих

Сообщение long » 2011.03.05, 21:16

pirrat писал(а): 3)TaskQueue библиотека для параллельного запуска однотипных задач в бекграунде
уже реализовал, но нужно вычленить из проекта и причесать код - в ближайших планах

Аватара пользователя
long
Сообщения: 8
Зарегистрирован: 2011.03.05, 12:11

Re: TODO для скучающих

Сообщение long » 2011.03.21, 19:37

в рамках одного из проектов необходима реализация мобильного приложения (html5+css), есть мысль использовать для работы http://jquerymobile.com/ с разработкой соответствующего расширения. на вскидку не нашел реализаций. я плохо искал или пока действительно не существует расширения для создания мобильных приложений? не хочется велосипед изобретать

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2011.03.22, 20:06

Для jquerymobile вроде нет.

lexand
Сообщения: 58
Зарегистрирован: 2012.01.17, 19:56

Re: TODO для скучающих

Сообщение lexand » 2012.01.18, 13:19

вот еще TODO
добавить нативную поддержку для тегирования кешей
что бы все не повторять http://www.yiiframework.com/forum/index ... %82%D0%B5/
По поводу тегирования кешей.
У нас почти все кеши имеют "вечное время жизни", и инвалидируються вручную.
Cache dependencies которые есть в Yii, да а те которые я успел выше написать - это не совсем то что нужно.

В текущем исполнении если зависимости кеша не проходят проверку Yii не возвращает кеш вообще. Нам же нужно что бы даже если зависимость (версия тега) не прошла проверку, Yii вернул старые данные при этом уведомив получателя о том что кеш устарел. А получатель тогда уже решит что ему делать, попытаться обновить кеш или использовать устаревшие данные.

Написать отдельную штуку для такого можно, но хочеться что бы она гармонично вписалась в Yii, сохранив при этом все стандартные способы использования йиишного компонента кеша.

Аватара пользователя
samdark
Администратор
Сообщения: 9242
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: TODO для скучающих

Сообщение samdark » 2012.01.21, 19:14

У меня в блоге была ссылка на реализацию. Зачем оно нативно нужно я не особо представляю, если честно.

Ответить