Давайте создадим простейший, бесполезнейший компонент)) Суть компонента заключается в следующем: у нас будут хранится отзывы в базе данных. Думаю по функционалу пояснять ничего не надо
Первым делом нужно придумать название компоненту.. Пусть 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();
<?
defined('_JEXEC') or die('Restricted access');
require__once (JPATH_COMPONENT.DS.'controller.php');
$controller = new CountController();
$controller- >execute( JRequest::getVar('task'));
$controller- >redirect();
?>
$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
*Если что-то непонятно в этом сообщении, то могу вас порадовать, что многое рассматривалось ранее в этом блоге в качестве теории. Теперь время практики, вы должны быть подготовлены =)
Спасибо, полезная инфа! трудитесь дальше)
ОтветитьУдалитьРад стараться =)
ОтветитьУдалитьПрошу прощения, может я не внимательно читал, для какой версии Joomla описан данный пример?
ОтветитьУдалить