ORM для встроенных модулей

Пока еще модули Topic, Comment, User… не являются наследниками ORM классов, а зачастую хочется использовать преимущества ORM в плагинах, дополняющих данные модули. Скажем релейшены.

Конечно, можно отредактировать класс модуля жестко:
заменить
extends Module

на
extends ModuleORM

Только придется прописывать еще в методе Init():
parent::Init();

+ сделать тоже самое для сущностей.
Согласитесь, каждый раз при развертывании проекта выполнять эти манипуляции совсем неинтересно. Да и в итоге можно забыть, где и что менять. При чем, при обновлении модуля придется все вставлять заново.

Читать дальше →

ORM и ActiveRecord в 0.5 и выше

Выход версии 0.5 для меня было нечто большим, чем добавление страницы активности и ленты топиков из подписанных блогов. В новой версии реализованы ORM и ActiveRecord. Вместе они дают мощнейший инструментарий для разработчика, избавляя того от кучи однотипного кода, который приходилось писать каждый раз при разработке плагина. Тот-же форум, о котором будет идти речь в статье, после обновления похудел на 2177 строк кода. В этой статье я хочу углубиться в ORM и AR на примере создания плагина для LiveStreet.

Читаем дальше...

Вопрос по ORM

Решил попробовать LSный ORM, возник вопрос сразу по получению сущности
Есть нарпример таблица news и поле в ней news_id
Как вызвать выборку сущности по id? Т.е.

LS::E()->News_GetNewsByNews_Id(1);

Не работает, в силу того, что в __call() делается explode по "_" а механизма маппинга полей в базе я не нашел.
Или ORM диктует систему наименования полей в базе и просто интегрировать не получится?

Связи many to many в ORM

В транковой версии появилась полноценная поддержка связей типа many to many. Это значит, что теперь вся забота о поддержании, например, тегов в ваших плагинах ложится на ОРМ.

Читать дальше →

Плагин "Каталог" для LiveStreet 0.4.*

Плагин каталог для livestreetПредставляю сообществу livestreet новый плагин "Каталог".

Демо-сайт: catalog.lsmods.ru (тест vasya:vasya, по запросу дам админ-логин)
В каталоге плагинов: livestreetcms.com/addons/view/142/

Что есть в плагине:

  • Категории с бесконечной вложенностью
  • Свойства объектов с наследованием (для вложенных категорий) Работают так — при добавлении объекта в определенную категорию появляются дополнительные поля, характерные для этой категории. Типы полей свойств — текстовое поле, числовое поле(целое и с разделителем точка), select с вариантами выбора, ссылка).
  • Аттач файлов с распределением прав на скачивание, возможность указать описание для каждого файла.
  • Аттач фотографий с двумя режимами вывода фото.
  • Избранное
  • Черновики
  • Возможность дать юзерам возможность самим заполнять каталог, или же только администраторам.
  • Отзывы к товарам с отдельной вкладкой эфира
  • Метки для товаров
  • Вывод объектов в одну или две колонки

и еще...со скриншотами

Плагин "Объявления" для svn-версии LiveStreet

Всем добрый день!

Хочу представить вашему вниманию новый плагин для LiveStreet: Ads: Bulletin board / Объявления.

Плагин создает новый тип топика "Объявления", которые можно привязывать к бесконечно вложенным категориям.
Демо-сайт проекта: ads.ajaxy.ru/ads
Стоимость: 2400 руб. или $79
Купить плагин можно в каталоге LS: livestreetcms.com/addons/view/99/

Внимание:
Плагин разработан на основе новых функций svn-овской версии движка (а именно ORM/ActiveRecord) и выполнен без единого ручного SQL-запроса, а также с максимальным использованием технологий наследования, делегирования и ORM-абстракций.
Таким образом для работы плагина вам необходимо обновить ядро LiveStreet до ревизии не ниже 1047. Если у вас версия LiveStreet 0.4.2, вы можете обновить ядро до последней версии по этой ссылке.

Читать дальше →

Модель ORM

Важно: это лишь предлагаемая мною примерная альфа-версия модели, для ознакомления с идеями, скорее всего она будет отличаться от реальной модели, котораябудет введена в LS.

Синтаксис отношений $aRelations.


Существует 4 типа отношений:

belongs_to — связь 1 к 1, или многие к 1. в таблице обязательно наличие foreign key вида relationalias_id. Примеры:
$aRelations = array('belongs_to' =>
  array(
    'User' => 'autor',
    'Blog',
    'PluginBill_ModuleEvent' => 'event'
  )
);
// поля таблицы prefix_topic
topic_id | topic_title | ... | autor_id | blog_id | event_id
// доступные функции:
$oTopic()->getAutor(); $oTopic()->setAutor();
$oTopic()->getBlog(); $oTopic()->setBlog();
$oTopic->Save();

Читать дальше →