ReadyScript - мультисайтовая платформа. Это означает, что несколькими сайтами может управлять одна копия платформы и соответственно в одной базе могут храниться данные нескольких сайтов. Если модуль имеет разделы в административной панели, то информация в этих разделах должна отображаться в соответствии с выбранным для администрирования сайтом. В клиентской части интернет-магазина, информация также должна соответствовать текущему сайту.
ReadyScript имеет ряд возможностей, которые позволяют разработчику с наименьшими усилиями добавить поддержку мультисайтовости для своего модуля. Рассмотрим их подробнее.
Метод RS::Site::Manager::getSite() - возвращает объект текущего сайта Site::Model::Orm::Site. Метод использует следующий алгоритм:
Пример:
Для привязки любой сущности к сайту, при описании ORM объектов следует объявлять поле site_id. Поле должно иметь тип RS::Orm::Type::CurrentSite. В случае, если site_id не задается явно при записи ORM-объекта в базу, будет подставлен ID текущего сайта.
Пример описания мультисайтового ORM-объекта:
Пример создания сущности, привязанной к сайту:
Такой подход позволяет объявить поле site_id у ORM объекта и далее ReadyScript самостоятельно будет привязывать объекты к сайтам, на которых происходит создание этих объектов.
Визуальные помощники, используемые в административной части активно работают с моделями, обеспечивающими выборки из базы данных.
Чтобы в администартивной части отображались только соответствующие текущему сайту объекты, необходимо сообщить модели о том, что её ORM объект - мультисайтовый, для этого необходимо вызвать метод setMultisite(true) в конструкторе наследника класса RS::Module::AbstractModel::EntityList. Или можно воспользоваться сокращенным синтаксисом:
Пример работы с мультисайтовыми моделями:
Мультисайтовые модели всегда добавляют условие site_id = 'ID сайта' к выборкам объекта из базы
Если в модуле используются прямые запросы на выборку данных, имеющих принадлежность к сайту, например через объект RS::Orm::Request, то обязательно следует дописывать условие, которое будет выбирать данные только для текущего сайта.
Пример:
Поддержку мультисайтовости можно добавить на любом этапе разработки модуля, для этого необходимо добавить поля site_id в ORM объекта, прописать ["multisite" => true] в конструкторе модели и указать фильтрацию по site_id в местах, где используются прямые выборки с помощью RS::Orm::Request.