Архитектура 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' );
|
А так же устанавливать связь с основной моделью используя зависимости.
|