Центр документации
Карта сайта

Создай визитку сам!


Самоучитель по интеграции дизайна и настройке Amiro.CMS на примере демонстрационной версии пакета Визитка »


Несколько моделей одного модуля

Архитектура Amiro.CMS предполагает, что один модуль может иметь только одну модель.

Пример работы с несколькими источниками данных.

Абстрактный модуль учета почтовых отправлений inst_postmod.
Таблица cms_postmod содержит данные отправлений, такие как дата получения отправления, отправитель, получатель, почтовое отделения получателя.

CREATE TABLE `cms_inst_postmod` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `sender_name` VARCHAR( 64 ) NOT NULL,
    `receiver_name` VARCHAR( 64 ) NOT NULL,
    `destination_id` INT( 11 ) NOT NULL,
    `date_created` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP,
    INDEX ( `destination_id` )
) ENGINE = MYISAM;

Таблица cms_inst_postmod_offices содержит справочник почтовых отделений, с индексами и адресами.

CREATE TABLE `cms_inst_postmod_offices` (
    `id` INT( 11 ) NOT NULL AUTO_INCREMENT PRIMARY KEY,
    `post_index` VARCHAR( 6 ) NOT NULL,
    `address` VARCHAR( 64 ) NOT NULL,
    `phone` VARCHAR( 10 ) NOT NULL
) ENGINE = MYISAM ;

Связь осуществляется по условию cms_inst_postmod_offices.id = cms_inst_postmod.destination_id

Решение

Будем считать, что для модели работы с данными таблицы cms_inst_postmod_offices есть отдельный модуль inst_postmod_offices.
Этому модулю не нужен ни функциональный код, ни шаблоны. Фактически, он даже не должен быть объявлен в системе. Достаточно создать файл содержащий классы модели этого модуля.
При этом, имя файла с классами должно соответствовать формату {$modIdCamelCase}_Table.php

_local/modules/code/InstPostmodOffices_Table.php:

<?php
 
class InstPostmodOffices_Table extends AMI_ModTable{
}
 
class InstPostmodOffices_TableItem extends AMI_ModTableItem{
}
 
class InstPostmodOffices_TableList extends AMI_ModTableList{
}

Теперь модуль inst_postmod сможет обращаться к модели с данными почтовых отделений используя ресурсы:

$oOffceModel = AMI::getResourceModel('inst_postmod_offices/table');

А так же устанавливать связь с основной моделью используя зависимости.

Установка и настройка Руководство пользователя Интеграция дизайна Разработчикам (API)
 2000 – 2021 © Amiro.CMS Все права защищены.