joomla 1.6, component: Как сделать компонент, чтобы связать 2 таблицы с m2m и отобразить список на странице редактирования? - PullRequest
0 голосов
/ 01 апреля 2011

Я новичок в Joomla! а также новичок в разработке компонентов.

Я хочу создать компонент, который сможет связывать 2 таблицы.

Joomla v 1.6:

Структура стола:

CREATE TABLE `#__a` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

Структура стола B:

CREATE TABLE `#__b` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

Структура AB таблицы:

CREATE TABLE `#__ab` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`id_a` int(11) NOT NULL,
`id_b` int(11) NOT NULL,
PRIMARY KEY  (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=0 DEFAULT CHARSET=utf8;

Предположим, что мы уже создали базовое действие создания, редактирования страницы и удаления с помощью MVC для A и B (, созданный из компонента hello world ). Из учебного пособия hellow world мы могли бы четко понять структуру файлов и папок и код компонента, но в учебном пособии есть только 1 таблица, но здесь есть 2 таблицы, а также новая таблица идентификаторов идентификаторов.

Так что это означает, что в компоненте, который мы здесь разрабатываем, есть 2 подменю.

На странице редактирования или новой

  1. Есть блок деталей, имя которого мы можем заполнить. (Сделано из учебника)

  2. Существует блок связывания B, который мы можем выбрать B (выбрать опцию, можно выбрать более 1), чтобы добавить в A а также отобразить список B мы добавили. В каждом элементе списка есть кнопка удаления или ссылка для отмены связи между A и B.

Есть идеи, как это сделать, пожалуйста?

Спасибо и С наилучшими пожеланиями Друзья,

Rithy

1 Ответ

0 голосов
/ 07 июля 2011

Во-первых, вам нужна логика, которая сохранит результаты в справочной таблице, а вторая часть - получение данных, которые будут отображаться на стороне пользователя. Вам нужна модель:

class CompControllerA extends JControllerForm { 
   // Here put your save code
   //....
   function save() {
     $formData = JRequest::getVar('jform');
     $bRecords = $formData['bRecords'];
     $aRecordId = $formData['id'];
     $referenceModel->delete($aRecordId); // Delete all records that has same ID as current record
     foreach($bRecords as $row) {
        $data['id']=0;
        $data['a_id']=$aRecordId;
        $data['b_id']=(int)$row;
        $bModel->save($data);
     }

     // dont forget to call parent method
     parent::save();
   }
}

Следующим шагом будет создание for, просто возьмите результаты из справочной таблицы и покажите правильные результаты в форме.

Вот пример кода компонента, который я построил.

class IbookModelExtra extends JModelAdmin
{
    protected function loadFormData()
    {
        $db =& $this->getDbo();
        $query = $db->getQuery(true);
        $query->select('b_id')->from('#__table_a_b')->where('a_id='.$data->id);
        $db->setQuery((string)$query);
        $data->b = $db->loadResultArray();
    }
} 
...