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

Создадим самый простой компонент. Часть 1. Точка входа, контроллер, представление, шаблон

Вот думаю я как подытожить всё то, что мы уже прошли и добавить немного нового материала.
Давайте создадим простейший, бесполезнейший компонент)) Суть компонента заключается в следующем: у нас будут хранится отзывы в базе данных. Думаю по функционалу пояснять ничего не надо

Первым делом нужно придумать название компоненту.. Пусть counter(сначала я другой компонент хотел, написал полстатьи, теперь переделывать не хочется.. хотите, пусть ваш называется votes).

Значит создаём 2 папочки:

  • administrator/components/com_counter/
  • components/com_counter/

В этих папках создадим по точке входа

  • administrator/components/com_counter/admin.counter.php
  • components/com_counter/counter.php
Вообщем-то прямо сейчас можно перейти по http://localhost:8080/joomla/index.php?option=com_counter (это в моём случае) и мы увидим наш компонент(он пустой). По сути мы можем написать в этих файлах свой код, например <? for($i=0;$i<10;$i++) echo "FUCK"; ?> и он выполнится, но не будем отступать от стандартов и выдумывать всякий бред. С другой стороны, получается, что можно не учить все эти классы, а написать свою программу по старинке, она всё равно выполнится. Делайте как знаете, я буду писать стандартами, хотя это тоже достаточно интересная особенность.  

Первым делом, надо запомнить, что в каждом вновь создаваемом файле мы должны писать первым же делом  defined( '_JEXEC' ) or die( 'Доступ запрещен' );.. всё это делается для того, чтобы быть уверенным, что ваш файл не вызывается на прямую(т.е. не из джумлы). Почитал я http://www.tungusov.ru на этом там всё и заканчивается)) Далее идёт регистрация в базе данных и тому подобное. Я начну проще. Давайте всё-таки опишем точку входа. Она будет создавать контроллер и передавать ему задание.

Начнём с пользовательской части
Напишем в точке входа стандартный код(отсюда):

/components/com_counter/counter.php
<?
defined('_JEXEC') or die('Restricted access');
require__once (JPATH_COMPONENT.DS.'controller.php');
$controller = new CountController();
$controller- >execute( JRequest::getVar('task'));
$controller- >redirect();
?>

Думаю с этим кодом всё ясно, теперь нам нужно писать контроллер. Давайте подумаем, какие задания должен выполнять наш контроллер. Думаю он должен добавлять новый отзыв, удалять существующий, а также показывать все отзывы. т.е. он должен иметь методы для 3-ёх различных task

//component/com_counter/controller.php
<?
defined('_JEXEC') or die();
jimport('joomla.application.component.controller');

class CountController extends JController
{
function __construct()
{
parent::__construct();
$this->registerTask('add','add');
$this->registerTask('delete','delete');
$this->registerTask('show','show');
}
function add()
{
}
function delete()
{
}
function show()
{
}
function display()
{
parent::display();
}
}
?>

Вот я и сделал набросок контроллера. Замечу, что на данном этапе мы уже не сможем увидеть наш компонент, т.к. при попытке доступа к нему joomla уже пытается найти представление, для того, чтобы отобразить данные.  Пока оставим контроллер пустым, нам же нужно удостовериться, что структура выполнена правильно. Создадим то, что просит нас joomla - представление и шаблон

/components/com_counter/views/counter/view.html.php
<?php 
defined('_JEXEC') or die();
jimport( 'joomla.application.component.view');  
class CounterViewCounter extends JView  // Запомните как должен называться класс
{ 
function display ($tpl = null) 
{ 
$greeting = "Hello World!";  
$this->assignRef( 'greeting', $greeting);  
parent::display ($tpl); 
} 
} 
?>

Пока что я взял пример из ранее приведённых уроков, для того чтобы осознать, что структура верна.

Далее я создал файл шаблона
/components/com_counter/views/counter/tmpl/default.php
<h1><?php echo $this->greeting; ?></h1>

Теперь в нашем компоненте мы можем увидеть надпись HelloWorld

*Если что-то непонятно в этом сообщении, то могу вас порадовать, что многое рассматривалось ранее в этом блоге в качестве теории. Теперь время практики, вы должны быть подготовлены =)

3 комментария:

  1. Доброжелатель(=3 декабря 2010 г. в 02:50

    Спасибо, полезная инфа! трудитесь дальше)

    ОтветитьУдалить
  2. Прошу прощения, может я не внимательно читал, для какой версии Joomla описан данный пример?

    ОтветитьУдалить