Перейти к контенту

Поиск в системе

Результаты поиска по тегам 'события'.

  • Поиск по тегам

    Введите теги через запятую.
  • Поиск по автору

Тип контента


Форумы

  • IBResource
    • Новости IP.Board
    • Коммерческие вопросы
    • Отзывы и пожелания
  • Invision Power Services
    • Новости компании InvisionPowerServices
    • Новости магазина модификаций IPS Marketplace
  • Для клиентов
  • Технические вопросы
    • Общие вопросы по IPB 4
    • Общие вопросы (по IPB 3.4.x)
    • Общие вопросы (по IPB 3.3.x)
    • Общие вопросы (по IPB 3.2.x)
    • Общие вопросы (по 3.0.x и 3.1.x)
    • Общие вопросы по устаревшим версиям
    • IP.Blog
    • IP.Gallery
    • IP.Downloads
    • IP.Content
    • IP.Nexus
    • Документация
    • Конвертирование
    • FAQ
  • Модифицирование
    • Модифицирование продуктов
    • Поддержка модификаций из архива
    • Дизайн и графика
    • Запрос на создание модификации
    • Модификации в разработке
  • Другие продукты и услуги
  • Форумы на других языках
  • Другое
    • Программирование
    • Хостинг
    • Оффтопик
    • Информационные технологии
  • Тех-форумы

Блоги

  • Тестовый блог
  • GPI's Блог
  • sM1Le's Блог
  • Hugo Weaving's Блог
  • Свободное слово
  • GiV'e it to me BaBY
  • sw04 blog
  • IP Blog
  • Borland_delphi_6's Блог
  • Сервак держится на четырех больших черепахах, которые питаются душами забаненных
  • vasyast пишет
  • AirKing's Блог
  • /dev/urandom
  • Hostem's bug
  • mylipetsk's Блог
  • Invision blog
  • PageMaster's Блог
  • Alvor's Блог
  • GrafDragon's Блог
  • Allure's Блог
  • Записки горшечника
  • GUNN's Блог
  • АIR0
  • -=MIF=-'s Блог
  • Anton S Soloviev Blog
  • WinC's Блог
  • Дневник программиста
  • sol's Блог
  • Vanek_MT's Блог
  • Scamp's Блог
  • [Artx5]'s Блог
  • Dvvarf's blog
  • kseny's Блог
  • maxi4u's Блог
  • Док's Блог
  • Блог
  • s-and's Блог
  • Nikolya
  • M-K's Блогнот
  • Roman Borisovich's Блог
  • NtMike's Блог
  • Сочи Блог : Sochi Blog
  • park's Блог
  • Dron Blog
  • Модификации IPB на заказ
  • Magicmedia's блог
  • ozersk's Блог
  • TESmods блог
  • Чердачок xRay'я
  • Jon06's Блог
  • Arqus' Блог
  • RaPl3r's Блог
  • Yama's Блог
  • groove_SQL's Блог
  • Спорт
  • IronMaster's Блог
  • nuclearman's Блог
  • xaber's Блог
  • Lazek's Блог
  • konstz91's Блог
  • oddangel's Блог
  • hil's Блог
  • GOT1
  • Олег «Sannis» Ефимов
  • numaster's Блог
  • bazhen's Блог
  • silenter's Блог
  • Крепость сожаления
  • cthu's Блог
  • NOIP's Блог
  • _Yana_
  • Saratoff-Life Blog
  • Hard_candy's Блог
  • jaxumi's Блог
  • Grins' Блог
  • proc: Anomaly
  • Модернизация VRPG
  • kuzka's Блог
  • Vadim903's Блог
  • Квэнди
  • Президент's Блог
  • Как мы ломали
  • ddvhouse's Блог
  • unixx's Блог
  • ViGOur's Блог
  • BoomerYA's Блог
  • First's Блог
  • Tomahawk's Блог
  • depresnyck's Блог
  • vkray's Блог
  • dallas' Блог
  • user226's Блог
  • bespechnaya333's Блог
  • Smartfon4er's Блог
  • POLICEXPERT
  • Обо всём понемногу.
  • anmakddt's Блог
  • ghenazmei's Блог
  • Интернет магазин для похудения и борьбы с целлюлитом
  • Rostov114's Блог
  • ovod's Блог
  • rejik's Блог
  • olegvs' Блог
  • lunux's Блог
  • Defender123's Блог
  • Форум знакомств
  • Tokarevs' Блог
  • vredina's Блог
  • John's Блог
  • ulaben's Блог
  • domovoy2's Блог
  • LuuR's Блог
  • Блог Гулько ЗлючкО
  • pank's Блог
  • akuzya's Блог
  • mumiya's Блог
  • eastimpex's Блог
  • BenZeR's Блог
  • magness
  • juvio's Блог
  • pivovoz's Блог
  • Zaya's Блог
  • Ravencool's Блог
  • levon's Блог
  • interbody.ru's Блог
  • Farkop's Блог
  • pkMIXER's Блог
  • Gucci Блог
  • ezik's Блог
  • rasetyplit's Блог
  • Elfet's Блог
  • anyba's Блог
  • d2222's Блог
  • Andrey Zentavr's Блог
  • mentolsoft's Блог
  • Dum spiro spero
  • Полезные скрипты для конвертации 2.3.6 > 3.0
  • Shin Akuma's Блог
  • Ancђita's Блог
  • Блог Юзера
  • ocharovanie's Блог
  • Unspoiled's Блог
  • Работы с IPB
  • KVentz's блог
  • Steve Fox
  • dtrex's Блог
  • studentlabinsk's Блог
  • Nadeshda's Блог
  • Dr_body's Блог
  • RealWorld's Блог
  • napoleon21's Блог
  • Зот Малахов (гитарист, композитор
  • foxicate's Блог
  • luna-luna's Блог
  • Свадебный бизнес моя мечта
  • 34V.sehost
  • Блог Миры Лирман
  • vimaster's Блог
  • baumansoft's Блог
  • Блог
  • Chacha's Блог
  • Спортивный блог
  • Reysler's блог
  • Баронеса's блог
  • MDmitry's блог
  • MDmitry's блог
  • Блог, мой блог...
  • Черного и белого, только не Горелова!
  • nikolay2's блог
  • nek2's блог
  • NATTO's блог
  • NATTO's блог
  • VOVER's блог
  • Пишу
  • vint1's блог
  • серж
  • ккк
  • Eliyagu - blog
  • Eliyagu's блог
  • Romp's блог
  • Я клиент IBR
  • Sheridan's блог
  • maxi4u's блог
  • maxi4u's блог
  • =M@X='s блог
  • CloseGL's тест блог
  • tj.anton
  • picapus' блог
  • Описание новых возможностей IP.Board 3.1
  • rapsody120's блог
  • slezinkka's блог
  • Silen
  • Pirs' блог
  • Костик Демидов's блог
  • kellas' блог
  • XoTTa6bI4_'s блог
  • greenjek's блог
  • injury87223's блог
  • cLauzz's блог
  • vania290's блог
  • Janke_Home's блог
  • odetta's блог
  • pops' блог
  • nickostyle's блог
  • makus' блог
  • Максим Антипенко's блог
  • test's блог
  • irina20052's блог
  • SH блог.
  • yurclub's блог
  • Yape's блог
  • DVD Soft
  • ste0phen's блог
  • kagorec's блог
  • Joel35's блог
  • algin's блог
  • shelessta's блог
  • Roggue
  • www.TraderGroup.ru
  • de_coder's блог
  • aig's блог
  • Из жж и вконтакте )
  • naladchik's блог
  • Офелия Картман's блог
  • Использование
  • Ошибки: =+)ъ|"][ и их исправление :-)
  • ~eXtreme~'s блог
  • alexeee's блог
  • Silent Assassin's блог
  • tomgame's блог
  • Массакр бензопилой
  • Ryo's блог
  • yakushin's блог
  • Asin's блог
  • ggggg's блог
  • Tails
  • sofi7666's блог
  • Worldoftanks Мир игр
  • zavorohin's блог
  • Иннокентий's блог
  • Oween's блог
  • forumlkj's блог
  • Новости от разработчиков IP.Board
  • Живые мысли.
  • Maksim Slesarev_89373's блог
  • Nikola12's блог
  • Aspen's блог
  • kazak11's блог
  • Марк_Минаков's блог
  • PONTA's блог
  • Highlight's блог
  • kernel.exe's блог
  • Оптина Пустынь's блог
  • sergay's блог
  • ElenaDuzh's блог
  • blog's
  • Дмитрий Николаев's блог
  • derbi's блог
  • alex ggg's блог
  • AndyBe's блог
  • SergeySV's блог
  • Николай Р
  • Оптина_Пустынь's блог
  • Дмитрий_Николаев's блог
  • Andrey0011's блог
  • v_narure_blog
  • Sh1ning's блог
  • IT
  • Всё для web-мастера...
  • ikea's блог
  • SenjaLp's блог
  • Senja's блог
  • Тестовый блог
  • profits' блог
  • yodas' блог
  • koha777's блог
  • t0rik's блог
  • razerw's блог
  • Блог команды AlterVega
  • markynem's блог
  • AlfOz's блог
  • Romzes24's блог
  • LandofYs.narod.ru
  • OxsanaKorona's блог
  • mishkalom's блог
  • zikadazo's блог
  • Olimnoz's блог
  • SirbuV's блог
  • crudman's блог
  • Марк_Королёв's блог
  • Gennadiy's блог
  • Delplel Blog
  • Алексей_Батурин's блог
  • antigsm's блог
  • bboyblaster's блог
  • Плагины от Smscoin
  • Dinar's блог
  • Syarexs' блог
  • instrumentariy's блог
  • saturn19 blog
  • booi's блог
  • jakki's блог
  • Мой блог
  • артемпапученко's блог
  • L-7's блог
  • Калиф Порния's блог
  • Сергей_Коваленко_127236's блог
  • test-blog
  • Inc.'s блог
  • NCsoft
  • Дима Кавун's блог
  • Инструкции
  • Teaminds_yandex's блог
  • Golemar's блог
  • dimamaster's блог
  • Maxim Petukhov's блог
  • Has
  • Сертификационный центр "Ростест Сибирь"
  • Шпаргалки
  • Интернет магазин одежды RusFashion.net
  • Блог Александра Санина
  • GURU.tm's блог
  • dvd-net.ukrainianforum.net's блог
  • Xolnewola's блог
  • GlobalLux - ремонт квартир Киев
  • Space Ball
  • Сергей Демьянов's блог
  • Мечтательница's блог
  • Nastiazavtra's блог
  • mediagroup's блог
  • MbokSukirman
  • rekanpoker
  • hotwebgames' блог
  • Situs Joker Dealer Online
  • Tangkas HKB
  • Casino Online Indonesia
  • Cara untuk Menang Slot Online
  • Олег Кузьмин
  • Syava's блог
  • Роман Сечин
  • Olivis' блог
  • test

Категории

  • Файлы
    • IP.Board 3.4.X
    • IP.Board 3.2.x
    • IP.Board 3.0.x-3.1.x
    • IP.Board 2.2.x-2.3.x
    • IP.Board 2.1.x
    • IP.Board 2.0.x
    • IP.Board 1.x.x
  • Модификации модулей
    • IP.Blog
    • IP.Gallery
    • IP.Downloads
    • IP.Content
    • IP.Nexus
  • Стили IP.Board
    • IP.Board 3.2.x
    • IP.Board 3.0.x-3.1.x
    • IP.Board 2.2.x-2.3.x
    • IP.Board 2.1.x
    • IP.Board 2.0.x
    • IP.Board 1.x.x
  • Языковые пакеты
    • IP.Board 3.2.x
    • IP.Board 3.0.x-3.1.x
    • IP.Board 2.2.x-2.3.x
    • IP.Board 2.1.x
    • IP.Board 2.0.x
    • IP.Board 1.x.x
    • IP.Board 3.4.x,
  • Графика для форумов
  • Community Resources
  • Модификации для IPB 4

Группы продуктов

  • Test
  • Готовый форум на базе IP.Board 3
  • Форум на базе InvisionPower Community Suite 4

Искать результаты в...

Искать результаты, которые...


Дата создания

  • Начать

    Конец


Последнее обновление

  • Начать

    Конец


Фильтр по количеству...

Зарегистрирован

  • Начать

    Конец


Группа


О себе


MSN


Заголовок


ICQ


Yahoo


Jabber


Skype


Город


Интересы

Найдено 1 результат

  1. Не надо обладать десятилетним опытом создания интернет сообществ, чтобы понимать простую истину - коробочный продукт разрабатывается для удовлетворения требований большинства потребителей. А значит, задача по расширению стандартных возможностей системы возникнет перед каждым владельцем сообщества. Мы приложили все наши знания и опыт в создании и сопровождении сообществ для эффективного решения этой задачи. Проблемы модификации в современных платформах Будучи активными разработчиками сообществ на основе готовых решений (vBulletin, IP.Board, phpBB) мы постоянно сталкивались с проблемами в разработке, но, пожалуй, самая досаждающая из них - отсутствие возможности безболезненно для ядра системы вносить изменения в ее базовое поведение. Решение данной проблемы, как правило, выливается в необходимость внесения изменений в файлы самой системы, что влечет за собой проблемы при обновлениях. Если такие изменения глобальны, то актуализация скриптов ядра системы становится фактически непосильной задачей (прощайте исправления ошибок, оптимизации и новые возможности). http://altervega.ru/forums/upload/forum/2012/03-19/a42fb8aa9cffc5937fe0c2a5de5f7d85.jpeg Есть проблемы и поменьше, вроде отсутствия удобного внутреннего API, запутанности логики приложения и отсутствия документации. Но они не так сильно влияют на разработку, как выше описанная. Конечно, перечисленные решения представляют механизмы расширения, однако, они являются несколько инородными, так как изначально не закладывались в архитектуру системы, а добавлялись уже в готовую. Итак перед нами стояла задача сделать AlterVega гибкой и расширяемой настолько, чтобы разработчик мог ее улучшить без последствий для самой системы. Первые шаги в решении этой задачи были предприняты еще на этапе проектирования архитектуры системы. В качестве основы мы выбрали идею реализации веб-приложения на основе паттерна Model-View-Controller (MVC). А при дизайне классов системы мы придерживались SOLID принципов и необходимых уровней их связанности (Low Coupling and High Cohesion). После того как у нас появился работающий прототип системы, мы попробовали нарастить его возможности, при этом не нарушив концепции, заложенной в архитектуру приложения. В результате чего у нас появился Dependency Container. Dependency Container (DC) Контейнер предоставляет внешние зависимости программному компоненту системы. Контейнер гибко настраивается, что позволяет разработчикам управлять зависимостями в ходе расширения системы. Например, при построении списка тем у нас выводится их рейтинг. Работа с рейтингом вынесена в отдельный программный компонент, потому для компонента вывода списка тем он является внешней зависимостью. /* Получение рейтинга темы и проверка голосования за неё */ $rating_service = $this->_services->get( 'forum.thread.rating' ); $rating_service->fill( array( $thread ) ); Здесь сервис рейтинга получается из контейнера. В настройках контейнера есть запись: <service id="forum.thread.rating.strategy" shared="false"/> <service id="forum.thread.rating"> <argument type="service" id="forum.thread.rating.strategy"/> </service> Разработчик может просто поменять описание сервиса рейтинга, например, добавив кеширование: <service id="forum.thread.rating.strategy" shared="false"/> <service id="forum.thread.rating.base"> <argument type="service" id="forum.thread.rating.strategy"/> </service> <service id="forum.thread.rating"> <argument type="service" id="core.cache" /> <argument type="service" id="forum.thread.rating.base"/> </service> При условии, что класс MyPlugin_Service_Cached_Rating будет реализовывать необходимый для сервиса рейтинга интерфейс, система начнет работать уже с кешируемым рейтингом. Как видно, настройка контейнера позволяет изменять базовые классы системы, что дает возможность без изменения базового кода, менять базовое поведения системы. Следующим шагом стало добавление инструментария для расширения возможностей системы. Если на шаге с внедрением контейнера мы преследовали возможность изменить существующее поведение, то на этом - добавить новое. Здесь уже нужна система не подмены существующих классов и объектов, а их расширение. Система расширения классов Мы отталкивались от того, что расширений даже для одной конкретной возможности может быть несколько, а авторы могут не знать друг о друге. Замена имени класса в настройках DC обеспечивает возможность существования только одного расширения. Это нам не подходит. Мы усовершенстовали наш контейнер, добавив возможность расширять базовый класс, классами расширений. Выглядит это так: <service id="user"> <argument type="service" id="user.mapper"/> <extended by="Author1_MyPlugin_Service_User"/> <extended by="Author2_MyPlugin_Service_User"/> <extended by="Author3_MyPlugin_Service_User"/> </service> В итоге базовый класс сервиса User_Service_User будет обладать наряду со своими обычными возможностями и всеми возможностями из классов Author1_MyPlugin_Service_User, Author2_MyPlugin_Service_User и Author3_MyPlugin_Service_User. Имеющиеся методы модифицирования позволяют изменять и добавлять новые возможности. Однако такие изменения работают на основе полиморфизма, а значит, если нам потребуется поменять поведение метода класса, например, в середине, то нам потребуется скопировать части базового кода. В результате появляется зависимость модификации от базового кода, что при изменении этого кода приведет к поломке или неверной работе модификации. Для решения данной проблемы мы сделали еще один шаг в развитии нашей системы модифицирования - добавили событийную систему в базовые классы приложения. Система событий Идея заключается в том, что при изменении состояния одного из объектов все зависящие от него оповещаются об этом событии. Соответственно зависящие объекты при наступлении определенных событий могут выполнять какие-то действия. Например, при добавлении нового комментария в тему, в систему событий поступает уведомление об этом. На событие добавления комментария подписаны модуль рассылки уведомлений и модуль пересчета рейтинга, которые рассылают уведомления подписавшимся на тему, и пересчитывают рейтинг авторам темы и комментария, соответственно. В коде это выглядит так: Порождение сигнала о создании нового входящего сообщения в личной почте $signals->emit( 'user.before.message.inbox.created', $message ); Один из подписчиков на данное событие, уведомляющий пользователя о создании личного сообщения и заносящий это событие в ленту обновлений /** * Класс слушателя событий личных сообщений */ class User_Class_Signal_Listener_Message extends jE_Signal_Listener_Abstract { /** * Запись события в ленту обновлений * * @param jE_Signal $signal Данные для обработки сигнала или объект сигнала * @return jE_Signal */ public function afterCreate( jE_Signal $signal ) { $message = $signal->getData(); $dc = jE::dc(); $dc->get( 'user.message.log' )->logEvent( $message ); $dc->get( 'user.message.notify' )->notify( $message ); return $signal; } } Подписчики на события добавляются разработчиками через конфигурационный файл /_protected/resources/configs/listeners.php. Указывается событие, класс обработчика и метод класса для обработки события 'user.after.message.inbox.created' => array ( 'User_Class_Signal_Listener_Message' => 'afterCreate', ), Порождение сигналов сделано в основных местах создания, изменения, удаления сущностей. К сожалению, внесение инструкций для порождения сигналов требует измений в базовом коде, поэтому мы открыты для добалений таких точек в базовый код. Как вы видите, AlterVega обладает рядом существенных способов изменения и расширения базового поведения системы без редактирования кода базовых классов. До недавнего времени они оставались всего лишь способами, но мы сделали описательный формат, позволяющий собирать изменения в модификации, и внедрили механизм подключения модификаций из директории ресурсов. Поставка модификаций Файлы классов модификации должны храниться в папке /_protected/resources/plugins/. Каждая модификация хранится в отдельной директории с именем модификации. Модификация поставляется с конфигураций config.xml, расположенный в директории модификации. Пример файла конфигурации: <?xml version="1.0" encoding="UTF-8"?> <plugin> <name>Название модификации</name> <author>Автор модификации</author> <config> <signals> Список обработчиков системных сигналов </signals> <services> Список новых объектов контейнера служб </services> <extensions> Список расширяемых объектов контейнера служб </extensions> <includes> Список модификаций шаблонов </includes> <tasks> Список новых задач </tasks> <settings> Список новых настроек </settings> </config> </plugin> Для дистрибуции модификации достаточно запаковать директорию с классами и ресурсами модификации. Администраторы сообществ через администраторский центр смогут импортировать данный архив с модификацией и он автоматически будет развернут и подключен к системе. Администратор также сможет отключать или полностью удалять установленные модификации. Прототип интерфейса можно увидеть на скриншоте http://altervega.ru/forums/upload/forum/2012/03-19/ebe0e2cdb73909cc385093475f748a03.png Планы Система модификаций уже внедрена в основную ветку разработки и будет выпущена в версии 1.1. С помощью модификаций вы сможете изменить большую часть классов компонентов системы, в дальнейших планах у нас доведение этого показателя до 100%. И, конечно же, мы хотим выслушать все вопросы, предложения и пожелания по данной системе, а так же точкам обработчиков системных событий.
×
×
  • Создать...

Важная информация

Находясь на нашем сайте, вы соглашаетесь на использование файлов cookie, а также с нашим положением о конфиденциальности Политика конфиденциальности и пользовательским соглашением Условия использования.