Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Для нашего простейшего компонента потребуется создать всего пять файлов:
Joomla всегда обрабатывает ссылку в корневом файле index.php для страниц Front End (сайт) или administrator/index.php для страниц Back End (панель администратора). Функция обработки URL загрузит требуемый компонент, основанный на значении "option" в URL (метод GET) или переданных данных методом POST.
Для нашего компонента, URL выглядит так:
index.php?option=com_hello&view=helloЭта ссылка запустит выполнение файла, являющего точкой входа в наш компонент: components/com_hello/hello.php.
Код для этого файла довольно типичен для всех компонентов.
Стоит заметить, что
JPATH_COMPONENT - это абсолютный путь к текущему компоненту, в нашем случае components/com_hello.
JPATH_COMPONENT_SITE - Для Front End
JPATH_COMPONENT_ADMINISTRATOR - Для Back End
DS - является автоматическим выбором слеша ( разделителя директорий ) '\' или '/'.
После загрузки основного контроллера проверяется наличие определенного контроллера с последующей загрузкой. В данном случае у нас только основной контроллер. JRequest::getVar() загружает значение переменной из URL или переданной методом POST. Допустим мы имеем адрес следующего вида:
index.php?option=com_hello&controller=controller_nameТогда можно определить название нашего контроллера следующим образом:
Мы имеем основной контроллер НelloController в com_hello/controller.php, так же загружаются дополнительные названия контроллера, к примеру: для HelloControllerController1 класс будет объявлен в файле com_hello/controllers/controller1.php
{Componentname}{Controller}{Controllername} - Такой стандарт упрощает схему многозадачного компонента.
После того, как контроллер создан, мы инструктируем его выполнить задачу, которая определяется переданными параметрами в URL (либо через POST):
index.php?option=com_hello&task=sometask.
Если переменная "task" явно не задана, то по умолчанию выполниться display(), задача которого просто вывести шаблон по умолчанию. Пример стандартных задач - save, edit, new и т. д.
На этом шаге контроллер переадресовывает страницу. Обычно используется для таких задач как save.
Главная точка входа (hello.php) по существу пропускает управление на контроллер, который обрабатывает выполнение задачи, которая была определена в запросе.
Наш компонент имеет только одну задачу - Hello. Поэтому, контроллер будет очень простой. Никакая манипуляция данных не требуется. Все что необходимо - это загрузить соответствующий вид(view). Остальные возможности контроллера пока пропустим
Код основного контроллера:
Конструктор класса JController всегда будет регистрировать задачу display(). Этот метод сам определит необходимый шаблон и данные которые необходимо загрузить в него. Более того один шаблон может разделяться на уровни(layout), каждый из которых отобразиться при запуске определенной задачи. В нашем случае мы явно не прописываем имя задачи, поэтому (как уже указывалось выше) используется default.
Когда вы создаете пункт меню для вашего компонента, менеджер меню позволит администратору выбирать задачу с которой начинать выполнение компонента. К примеру, для стандартного компонента "Пользователь" (com_user), выбор задач при создании пункта меню будет следующим:
создание вида
Извлекаем необходимые данные и передаем их в шаблон. В этом нам поможет расширенный класс JView и его метод assignRef, с помощью которого мы передаем переменные в шаблон.
<>Пример кода вида:
Наш шаблон очень прост, мы только отображаем приветствие, которое передавали в view:
Можно установить компонент вручную, копирую файлы по FTP протоколу создавая необходимые папки и таблицы в базе данных, но лучшим вариантом является использования установочного файла для пакетной загрузки файлов и установки компонента
Формат XML файла следующий:
Также есть файл, который будет скопирован, это - index.html.
index.html помещен в каждый каталог, чтобы препятствовать пользователям получать список файлов каталога. Эти файлы содержат одну единственную строку:
Так этот компонент не устанавливается. joomla ошибку выдаёт:
JInstaller::install: Файл /home/c/cl38835/public_html/test/tmp/install_4da58646ed63f/hello.php не существует
Может я не правильно что-то понимаю:
Этот файл com_hello_1.zip мы можем установить в joomla как полноценный компонент?
у меня joomla 1.5.22 может это влияет
у вас уже установлен модуль com_hello, удалите его и попробуйте снова...
вы не правы
не правильно написан xml файл
обратите внимание на имена папок
Ок, поглядим.
В установочном xml нужно отредактировать строки <files folder="">. Должно быть
<files folder="cite"> для файлов фронт-энда
<files folder="administrator"> для файлов бек-энда
Спасибо за наводку. Исправлено.
Не исправлено.
Этот компонент по прежнему не устанавливается.
Joomla 1.5.22
Ошибка! Не найден XML-файл установки Joomla!
По переданной ссылке типа «index.php?option=com_hello&view=hello»
Подгружается файл hello.php и ему передается управление, тот исходя из значения переменной $controller инклудит соответственный файл php.
Создает объект класса и вызывает метод execute() передав ему значение переменной task из get или post.
Метод execute нашего контроллера, унаследован из класса родителя и вызывает метод display(), который мы переопредилили в нашем классе (и на самом деле он тупо вызывает метод display() родителя). До этого места все понятно и логично, видно что откуда грузиться.
А вот дальше пошел полный «алес»… Мы описываем потомка от класса JView в котором, переопределяем метод display() который как написано в статье передает переменные в шаблон. Вопрос, а где прописано, какой именно php файл является шаблоном. В файле с описанием класса просмотра HelloViewHello нигде не указанно что надо погружать именно файл \com_hello\site\views\hello\tmpl\default.php. Да и собственно говоря, в классе с контроллером мы тоже не указываем какой именно php файл содержит описание класса наследника от JView. Да и нет ни где создания объекта класса HelloViewHello.
Нельзя ли подробнее пояснить откуда тут что берется?
snake зачем такие вопросы задаешь? Парни просто передрали чужую статью))
точно передрали
Вот еще в 2007 году были опубликованы уроки по созданию компонента:
http://www.webflasher.net/ru/webmasteru/joomla-1-5.html
В нашем случае мы явно не прописываем имя задачи, поэтому (как уже указывалось выше) используется default.
А как заставить вьюхи зацепляться из файлов *.phtml ?