Похоже колхоз развалился не начавшись. Продолжу тему. Может кому понадобиться. Долгое время использовал форум
как справочник, попытаюсь сделать для него что-нибудь полезное, отдам долги так сказать.

И так пишем компонент для J 1.5. Каталог чего-нибудь. Неограниченная вложенность категорий для начала. Дальше видно будет,
что ещё в него впихивать.
Обзовём его com_simplecatalog.
Создаем XML файл.
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE install SYSTEM "http://dev.joomla.org/xml/1.5/component-install.dtd">
<install type="component" version="1.5">
<name>Simplecatalog</name>
<creationDate>MonthName Year</creationDate>
<author>Author's Name</author>
<authorEmail>Author's Email</authorEmail>
<authorUrl>Author's Website</authorUrl>
<copyright>Copyright Notice</copyright>
<license>Component License Agreement</license>
<version>Component Version</version>
<description>Component Description</description>
<administration>
<menu>Simplecatalog</menu>
</administration>
<install />
<uninstall />
</install>
Называем его simplecatalog.xml
Пакуем его в ZIP архив и устанавливаем как компонент.
Как видим, файл ничего не делает кроме записи компонента в БД и создания каталогов компонента в админке и фронтэнде.
Должен по крайней мере. Вернее это Joomla сама делает. Код в работе не проверяю, так что могут быть ошибки.
Компонент должен появиться в меню компонентов.
Начнём с админки. Чтобы что-то показать, это что-то надо положить, из админки естественно, поэтому с неё и начнём.
Заходим в /administrator/components/com_simplecatalog.
В каталоге только наш simplecatalog.xml. Создаем файловую систему админки компонента.
Такую, чтобы не забыть что, где лежит и чтобы она соответствовала MVC (в моем понимании).
С помощью файлового менеджера создаем каталоги и файлы.
Файловая система у меня получилась такая. Не исключено, что придется что-то менять, переделывать.
Здесь «каталог» = «папка»
«представелние» = «view»
В каталоге /administrator/components/com_simplecatalog (уже есть?) создаем каталоги и файлы.
Каталог controllers //для контроллеров
Файл categoryes.php //контроллер категорий
Каталог views // для представлений
Каталог categoryes //представления для категорий
Файл view.html.php //представление для категорий
Каталог tmpl //для шаблонов
Файл default.php //файл шаблона каетгорий
Каталог models //для моделей
Файл categoryes.php //файл модели для категорий
Каталог tables
Файл categoryes.php //файл табли, не могу подобрать русское выражение
Каталог helpers //для функций, классов, скриптов, в общем, как только появится желание
скопировать код из одного файла в другой, то ему место здесь в виде класса
Файл simplecatalog.php //точка входа
Файл simplecatalog.xml //установщик уже есть
Файл controller.php // контроллер - дефолтным будет
Файл config.xml //для настроек.
Файл index.html //пустой, рекомендуют помещать в каждый каталог, для чего понятия не
имею. В каждом каталоге его не написал, сами дополните.
Компонент установлен, файловая система админки создана. Пустые файлы нужно заполнять.
Начнем с начала, т.е. с simplecatalog.php. Открываем, пишем:
<?php
// запрет прямого доступа
defined('_JEXEC') or die('Restricted access');
require_once JPATH_COMPONENT.DS.'controller.php'; //подключаем контроллер по умолчанию
require_once JPATH_COMPONENT.DS.'helpers'.DS.'helper.php'; //подключаем файл helper-а
If ($cont = JRequest::getVar('controller','','get')){ // если есть альтернативный контроллер
//подключается он, если нету, то дефолтный. Вот только из БД этот контроллер передается
//методом get, а из формы методом post. Че делать будем, понятия не имею. Будем решать
//проблемы по мере их поступления. Пока оставим так.
require_once JPATH_COMPONENT.DS.'controllers'.DS.$cont.'.php'; //запоминаем, что
//имя альтернативного контроллера должно соответствовать имени его файла (или
//наоборот?).
$cont = $cont.'Controller';
}else{
$cont = 'SettingController';
}
// создаем экземпляр контроллера
$controller = new $cont();
// Выполнение контроллера
$controller->execute( 'task');
$controller->redirect();
?>
Пошли в controller.php пишем:
<?php
// запрет прямого доступа
defined('_JEXEC') or die('Restricted access');
jimport( 'joomla.application.component.controller' ); //подключаем библиотеку
require_once( JPATH_COMPONENT.DS.'helpers'.DS.'helper.php' ); //подключаем помощника
class SettingController extends JController {
function __construct() {
parent::__construct();
}
}
?>
Ну и пробуем открыть из аминки наш компонент. И он выдает ошибку. Типа не могу найти view.
И правильно. Потому, что создавая файловую систему, мы ее создали для категорий, а для дефолта ничего не создали.
Поэтому досоздаем.
В каталоге views создаем каталог setting. Потому-что контроллер settingController, будет искать своё представление в
одноимённом каталоге в каталоге views. Ну и аналогичную категориям структуру для каталога setting. Файл view.html.php.
Каталог tmpl. Файл default.php.
Сейчас возникает вопрос. В админках многих компонентов видел первую страницу с кнопками с рисунками которые дублировали
ссылки субменю компонента в общем Control panel. Задумка - такую страничку на дефолтный контроллер и повесить.
Поэтому и назвал контроллер setting (не правильно только, но пусть). Вот есть сомнения — зачем она вообще нужна.
Да ладно. Пошли дальше.
Наш компонент все ещё выдает ошибку, типа не могу найти представление.
Заходим в views/setting/view.html.php, пишем:
<?php
//no direct access
defined('_JEXEC') or die('Restricted access');
// Import Joomla! libraries
jimport( 'joomla.application.component.view');//подключаем библиотеку
class SettingViewSetting extends JView {
function display($tpl = null) {
parent::display($tpl);
}
}
?>
Переходим в views/setting/tmpl/default.php и пишем:
<?php
defined('_JEXEC') or die('Restricted access');
?>
<h1>Здесь картинки настроек</h1>
Теперь должно работать. При заходе в админку компонента эта надпись должна появиться
На надпись смотреть скушно и пока нет базы данных разнообразим картину.
Заходим в контроллер категорий (controllers/categoryes.php) и пишем:
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
jimport( 'joomla.application.component.controller' );
require_once( JPATH_COMPONENT.DS.'helpers'.DS.'helper.php' );
class CategoryesController extends JController {
function __construct() {
parent::__construct();
}
}
?>

В представлении категорий (views/categories/view.html.php) пишем:
<?php
// no direct access
defined('_JEXEC') or die('Restricted access');
// Import Joomla! libraries
jimport( 'joomla.application.component.view');
class CategoryesViewCategoryes extends JView {
function display($tpl = null) {
$link = 'index.php?option=com_simplecatalog';
JSubMenuHelper::addEntry(JText::_('Setting'), $link); //Setting будет по английски,
//русификацией займемся позже
$link1 = 'index.php?option=com_simplecatalog&controller=categoryes';
JSubMenuHelper::addEntry(JText::_('Categories'), $link1);
parent::display($tpl);
}
}
?>
В шаблоне категорий (/views/tmpl/default.php) пишем:
<?php
defined('_JEXEC') or die('Restricted access');
?>
<h1>Здесь будет таблица категорий</h1>
Добавляем в представление setting (views/setting/view.html.php)
$link = 'index.php?option=com_simplecatalog';
JSubMenuHelper::addEntry(JText::_('Setting'), $link); //Setting будет по английски,
//русификацией займемся позже
$link1 = 'index.php?option=com_simplecatalog&controller=categoryes';
JSubMenuHelper::addEntry(JText::_('Categories'), $link1);
Появилось субменю (должно). Пощелкаём. Текст меняется?
Видим, что копируем код из одного файла в другой, думаем о helper-e. Но это меню обычно из базы данных выводится.
Её пока нет, то так. Хотя не знаю что лучше. У меня как то не получалось русифицировать меню выводимое из базы данных
кроме как в самой базе. Через JТext заголовки не проходят, соответственно в файле русификации не переводятся.
Если ничего не забыл и не ошибся в коде, должно работать. Уточню сразу, готовый компонент будет едва-ли. Тоже ведь
только учусь. Наверняка будут ошибки, что то из написанного не будет работать. Придется исправлять. Искать ошибки.
Надеюсь на обсуждение и взаимовыручку (хотя едва ли). Ну и надеюсь (не особо), что гуру поправят если вообще не
туда поведет и подскажут, если совсем уж где-то заклинит. Продолжение в следующий выходной. К сожалению, заниматься
этим могу только в выходные.