воскресенье, 24 октября 2010 г.

Создадим самый простой компонент. Часть 2. БД, JTable, модель

Теперь давайте разберёмся с базой данных. Создадим простую таблицу. Пусть она состоит всего из 3-ёх полей(идентификатор, id пользователя, сообщение).

CREATE TABLE `joomla`.`jos_counter` (




`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
`user_id` INT NOT NULL ,
`content` VARCHAR( 250 ) NOT NULL
) ENGINE = MYISAM ;

Теперь, когда у нас есть таблица, нам нужна модель, чтобы мы могли отображать данные. Давайте добавим 2-3 записи в таблицу (пока что не будем связывать таблицу с пользователями, поэтому в столбцах пишем то, что захотим)

Давайте создадим файл модели, который будет получать эти данные из таблицы и передавать их представлению. Прежде чем мы это сделаем, мы должны подумать, как же мы будем получать данные из базы данных. Я нактнулся на статью, о создании класса таблицы. В общем я создал
файл в /administrator/components/com_counter/tables/counter.php:

<?
defined('_JEXEC') or die('Доступ запрещен');

class TableCounter extends JTable
{
var $id = null;
var $user_id = null;
var $content = null;

function __construct(&$db)
{
parent::__construct('#_counter', 'id', $db);
}
}
?>

*Про класс JTable написано здесь.

Теперь создадим класс модели, которая получит все записи из таблицы
файл /components/com_counter/models/counter.php


<?
defined('_JEXEC') or die('доступ запрещен');
class CounterModelCounter extends JModel
{
function getComments( $options=array() )
{
JTable::addIncludePath(JPATH_ADMINISTRATOR.DS.'components'.DS.'com_counter'.DS.'tables');
$row = &$this->getTable('counter');
$row->load(1);
return $row;
}
}
?>

Если мы передадим эти данные в представление, которая в свою очередь передаст это шаблону, то мы увидим 1 запись. Нафига нам 1 запись? неужели класс JTable такой бесполезный. Полчаса разбирался с этим классом =/ По крайней мере других методов я не наблюдаю, да и чего ждать от этого класса. Придётся копать класс JDatabase, или просто внедрять свои классы для работы с БД (но это потом, сейчас нужно выучить joomla и написать на на ней заказ)

Код представления:

<?php
defined('_JEXEC') or die();
jimport( 'joomla.application.component.view');
class CounterViewCounter extends JView
{
function display ($tpl = null)
{
$model = &$this->getModel();
$rows = $model->getComments();
$this->assignRef('greeting', $rows->content);
parent::display($tpl);
}
}
?>

Шаблон остался неизменным. Не будем падать духом, в 3-ем шаге мы получим данные любой ценой. будь то хоть mysql_query =))





Создадим самый простой компонент. Часть 4. Заключительная

Комментариев нет:

Отправить комментарий