Fi1osof 12 июля 2013 0 14
Для начала смотрим видео, а потом милости просим под кат.


В общем, как я и обещал, я таки сел писать свою социалку… Но хотя я думал выпустить первый релиз уже через пару дней, первый релиз я все-таки публикую только сегодня, не смотря на то, что за дело я взялся в тот же самый день. А дело в том, что первые дни практически полностью ушли на обдумывание модели. Я все время был в поиске такой золотой середины, чтобы и просто все было (раз-два, все встало, и работает), и при этом не имело каких-то жестких ограничений. Этот момент я разъясню подробней: вот у нас есть отдельно MODX, и отдельно Livestreet. MODX мы все любим за то, что на нем можно сделать что угодно. Это отличная платформа для проектов любого уровня. А вот Livestreet хорош тем, что на нем можно за несколько минут развернуть собственный аналог Хабрахабра. У MODX минус — отсутствие готовых решений, которые можно было бы кучу накидать как в Livestreet, и все они дружно бы работали без лишних хаков (не будем о багах). А в LS минус — узкопрофильность. Много хороших готовых компонентов, дружных и не очень, но когда дело доходит до тюнинга, вот тут начинаются серьезные проблемы (попробуйте на LS магазин замутить).

Так вот, вот эту золотую середину я и хотел найти, чтобы и логика готовая была, и гибкость. И здесь я пришел к выводу, что нельзя делать один компонент. Здесь должно быть минимум два. Этот момент тоже разъясню: MODX отлично подходит для создания сайтов-визиток, корпоративных сайтов, новостных лент и магазинов. Почему? Потому что элементарная информационная сущность этих ресурсов — документ (страница). Документ имеет поля (заголовок, контент, дату создания и т.п.). Просто документ позволяет реализовать бОльшую часть структуры и логики. А там, где не хватает какого-то поля, на помощь приходят TV-шки. Но давайте взглянем на тот же LS: у нас есть блоги, топики и пользователи. Блоги и топики имеют много статистической информации (просмотры, голоса, рейтинги и т.п.), и пользователи (кто за него голосовал, за кого голосовал и т.п.). В целом все это можно было бы и на TV-шках и прочих MODX-плюшках сделать, но сами знаете, что это и большая нагрузка, и много элементов, и целостность обеспечить надо… В общем тут много всего, и MODX-а как-то не хватает (именно каких-то базовых сущностей).
Если еще и на форумы посмотреть, то там тоже много общего с сущностями ливстрита есть: разделы — это блоги, топики — они и в Африке топики, и в свойствах пользователей есть общие моменты.

В общем, я думал-думал, и придумал: один пакет будет устанавливать именно недостающие MODX-у сущности: Блог, Топик, Юзер. Блог и Топик — это модифицированные объекты modResource (подробнее о CRC читаем здесь, если с буржуйским нормально). А Юзер — это модифицированный modUser (об этом даже почитать нечего, разве что только мои эксперименты
Поправка. Оффмануала: rtfm.modx.com/display/revolution20/Extending+modUser
В свое время неправильно перевел некоторые части статьи и думал, что там пример только с данными пользователей в отдельной таблице, а не в modx_users.).

Эти объекты и их дополнительные таблицы легли в основу базового пакета modSociety. Устанавливая этот пакет, вы получаете эти сущности в своей системе, но их наличия практически вообще не ощутите. Разве что появятся новые типы документов.


По задумке объекты этого пакета должны обеспечить основу для любых типов социалок, форумов и т.п.

А вот второй пакет (modBlog) — вот это уже модель готового сайта со своей уникальной логикой. Хотя пакет еще очень сырой, и это пока только заготовка, наверняка у многих, кто посмотрел видео, ассоциации возникли с Хабром или Ливстритом. Да, я хочу сделать свой вариант хабра-движка. И это будет готовое решение, которое будет устанавливаться в пару кликов, со всей структурой, готовым шаблоном и т.п. Но так же планируется, что будут появляться и другие пакеты, устанавливающие свои специализированные сайты. При этом для всех этих сайтов основа будет — modSociety. То есть если появляется какая-то сущность, которая может понадобиться большинству таких типовых движков, эта сущность переходит в modSociety. Если сущность специфическая для конкретного пакета, то там она и развивается, и устанавливается с конкретным пакетом. Таким образом будем держать такой баланс, чтобы и основа была богатая, и при этом ядро не сильно разрасталось.

А теперь перечислю некоторые фишки своих пакетов. Сразу скажу, что эти пакеты — сосредоточение всех моих знаний о MODX Revolution, и пока я их писал, в поисках оптимальных решений я такие фишки Ревы ковырял, что просто прозревал. Уверен, что освоив хотя бы малую часть этого, многие, кто до сих пор еще не решился перейти на Реву, всерьез об этом задумаются…

1. Пользовательские типы ресурсов (производные от modResource). Я об этом уже говорил выше, но хочу отдельно об этом рассказать.
Пользовательские ресурсы не только позволяют просто добавить какие-то свойства базовым объектам, а позволяют в принципе создавать совершенно другие объекты, и полностью менять логику. К примеру в моем пакете modBlog переопределяется папка контроллеров документов SocietyBlog и SocietyTopic, и при создании или обновлении этих ресурсов через админку как обычных документов, запросы отправляются не на системный коннектор самого MODX-а, а на коннекторы моего пакета, и там я уже дополнительно творю, что хочу. (Конечно и без этого можно обойтись, но очень яркий пример).

2. Переопределяемые контроллеры базовых классов SocietyBlog и SocietyTopic. Это вообще ураган! Хотя, как я и говорил выше, SocietyBlog и SocietyTopic — это базовые объекты, которые будут фигурировать в разных специализированных сайтах, логика этих объектов может отличаться. К примеру в своем Хабра-движке у меня будет какое-то ограничение на количество символов в топике (к примеру), а в другом типовом сайте у меня этого ограничения не будет, или оно просто будет отличаться. Так вот, используя то, что нам дает MODX, мы можем переопределять контроллеры этих объектов. К примеру в одном контексте одна папка контроллеров будет, а в другом другая. И на уровне контроллеров и процессоров я уже могу рулить логику при сохранении объектов, обновлении и т.п. При этом логика может быть или общая и для бэкэнда и для фронтэнда, или отличаться. К примеру, я хочу, чтобы ограничения на количество символов учитывались и в паблике, и в админке. Я могу это сделать, и даже в админке через редактор документов пользователь не сможет сохранить документ с нарушением правил, и получит соответствующие сообщения об ошибках.
При этом мы не плодим объекты или таблицы, у нас все единое, просто логика различается в разных пакетах.

3. Шаблонизация. Я много раз говорил, что MODX-шаблоны — это не шаблоны, а чанки-контроллеры. Реальной же шаблонизации нет в MODX. Я сразу заложил основу под шаблонизации в пакете modBlog, потому можно будет легко менять скины сайта.

4. Инсталяха с менюшкой. Вот эта часть наверно самая сильная здесь. Я наверно выжал возможности менеджера пакетов MODX-а на 120%. У меня не только пакет устанавливает все политики безопасности, группы пользователей, контексты, структуру, элементы и т.п., но еще и позволяет на этапе установки выбрать какие-то особые действия, к примеру создать новый контекст, или обновить существующий. То есть даже имея несколько разных сайтов на разных контекстах с разной логикой, можно накатить новый пакет с обновлением уже существующих отдельных контекстов. В общем слов нет, одни слюни.
А 120% — это потому что сам по себе менеджер пакетов не предусматривает исполнение javascript-а на этапе установки пакетов, но я использовал одну хитрость, которая позволила это.

5. 100% MODX-технологии. Да, все это — 100% функционал Рево из коробки. Да, свои объекты я дописал, но они используют таблицы, контроллеры, процессоры и т.п. самой Ревы. То есть ядро я не зацепил ни на байт, и ничего со стороны не взял.

А теперь самое главное: Исходники обоих пакетов я выложил на гитхабе:
github.com/Fi1osof/modSociety
github.com/Fi1osof/modBlog

Я рассчитываю на то, что заинтересованные члены сообщества так же подключатся к доработке этих пакетов. Самое главное — основу — я уже заложил и ее и буду развивать. Но есть полно задач, которые можно разбить. К приму скины для него нужны и т.п. То есть все мы сможем создать отличный движок, который наверняка сможет стать ключом для MODX в мир блого-социальных движков.

Гарантирую каждому участнику огромный опыт на выходе.
14 комментариев
Ivan1
Ivan 12 июля 2013г в 22:37 #
Николай, здравствуйте!

Как раз зарегистрировался на сайте чтобы узнать у Вас про форум для MODX, и тут такая интересная новость. Однозначно нужно вынести на главную.

Установлю и попробую запустить. Есть ли какие-либо обязательные расширения для того, чтобы все заработало? (GetResources и.т.п?)
Fi1osof1
Fi1osof 13 июля 2013г в 01:31 #
Доброго времени суток, Иван!
Топик вынес на главную. Но вообще это старая тема, просто переношу свои старые топики с коммунити.
А вообще тема требует развития, и оно обязательно будет. Просто сейчас я плотно развиваю eCommerce в лице shopModx, но движок для социалок также в обязательном порядке будет доведен до ума.
Есть ли какие-либо обязательные расширения для того, чтобы все заработало? (GetResources и.т.п?)
Нет. Ничего такого не требуется. Но подобные пакеты так же могут вам в чем-то помочь. Это все равно, как вы можете и без getResources обойтись, и самостоятельно вывести список дочерних документов, но все равно используете getResources, просто потому что так легче. Но в целом все мои решения рассчитаны все-таки на использование API MODX.
Ivan1
Ivan 21 июля 2013г в 14:46 #
Привет Николай! Установил и поигрался немного с modSociety и modBlog.

Все таки оказалось, что дополнительные расширения нужны (если ставить на чистый MODX):
Login для авторизации :)
— включенные Friendly URLs с параметром use_alias_path = Yes
Тогда все работает как надо.

Единственное, не получилось дать ума modBlog при установке в новый контекст. Пытался сделать это на Dev облаке MODXCloud. Если устанавливать в контекст web — работает нормально и блоги создаются. Но если при установке указать «Создать новый контекст» (допустим Forum) то странички этого контекста не открываются, а открывается контекст web. Я уверен, что что-то не так настроено в облаке. Не подскажите, что? (Ставил на чистое облако)
Fi1osof1
Fi1osof 21 июля 2013г в 15:57 #
Добрый день.
Да, Login надо ставить (я стараюсь не раздувать пакеты лишними кодами), ЧПУ тоже включать самостоятельно (может кому-то не надо).
Про контексты — здесь все как обычно. Смотрите index.php, там инициализируется контекст web ($modx->initialize('web');). Или меняйте там на свой контекст вместо web, или плагин вешайте на событие OnHandlerRequest и делайте $modx->switchContext($ctx);
den991
den99 12 июля 2013г в 22:44 #
Зажигаешь. Даже не успеваю всё поставить и проверить, но я попробую =)
Fi1osof1
Fi1osof 13 июля 2013г в 01:32 #
Да это старая тема :) ShopModx по своей природе более поздний продукт.
den991
den99 13 июля 2013г в 11:54 #
То есть надо сразу щупать ShopModx?
Fi1osof1
Fi1osof 13 июля 2013г в 12:03 #
Вообще да. Причем сразу лучше эту готовую сборку, так как там уже настроены на совместную работу modxSite, shopModx, phpTemplates, modxSmarty и прочие тонкости. Эти пакеты сами по себе очень не плохие, но максимальный эффект именно от совместного использования получаешь.
А там уже технологии освоишь и без проблем в modSociety разберешься, потому что принципы те же используются.
den991
den99 13 июля 2013г в 13:03 #
Прикольными скачками я тебя догоняю. phpTemplates, modxSmarty уже мною используется.
По поводу ShopModx сборки, то ты там пугаешь слегка — «Внимание!!! Не пытайтесь это установить на готовый сайт! Все затрется нафиг.». Начну с модулей. Направление изучения понял. Спасибо.
Fi1osof1
Fi1osof 13 июля 2013г в 13:11 #
По поводу ShopModx сборки, то ты там пугаешь слегка
И не напрасно. Кто-нить как попробует накатить это на боевой сайт, и затрет его нафиг. И кто будет виноват? Конечно я, а не тот, кто бекапы не делает перед обновлением и вообще.
den991
den99 13 июля 2013г в 14:44 #
Я врубился, что не зря. А то чуть не накатил поверх рабочего=)
(шутка)
Ivan1
Ivan 21 июля 2013г в 14:39 #
Del
den991
den99 29 июля 2013г в 21:29 #
Попробовал поставить модуль, он убил юзера admin. В базе поставил ему: admin SocietyUser.
В логах modx запротоколировал Could not load class: SocietyUser from mysql.societyuser.
Fi1osof1
Fi1osof 29 июля 2013г в 21:38 #
Ты что-то не то сделал.
В логах modx запротоколировал Could not load class: SocietyUser from mysql.societyuser.
Пользователь физически должен быть. Это MODX не может найти класс пользователя. Проверь добавлен ли extension package на настройки системы.
Можешь в личку прислать логин и пароль к админке и phpMyAdmin, я гляну.
Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.