| Wiki.Ru-Mambo.ru: РуководствоПоСозданиюКомпонентов ... |
|
Руководство по созданию компонентов.В этой статье я буду использовать 'mycomp' чтобы представить название компонента, которое должно быть заменено названием вашего и директорию 'installdir' как базовую инсталляционную директорию Mambo. Для начала я объясню, какие базовые файлы нам понадобятся, чтобы построить компонент. Эти файлы сгруппированы в соответствии с тем, как они используются или просматриваются:
Файлы с пометкой 'не обязателен' не требуются Mambo, но тем не менее, они могут вам понадобиться позже, дабы облегчить обработку вашего кода со временем. Файлы для главной страницы (Frontend files)Файлы в этой группе используются, чтобы отобразить компонент для посетителей сайта. Это значит, что если вы привязываете компонент к меню (используя Menu -> Main Menu -> New -> Component), эти файлы контролируют то, что видят пользователи, когда они нажимают на это меню (и соответственно на любые ссылки или кнопки отображенные на вашем компоненте). Все файлы для главной страницы должны включать следующие строки кода, чтобы избежать прямую загрузку кода в броузер.
<?php * mycomp.phpЭтот файл по умолчанию загружается Mambo, чтобы отобразить компонент. У вас может быть что-то попроще, типа отображение даты из текстового файла или базы данных, или установка switch, которая вызывает различные функции в соответствии с выбором пользователя. Простое объявление switch может выглядеть вот так:
<?php Откуда появилась переменная $task? Вам нужно определить ее в своей форме (как скрытую переменную) или включить ее в линки, так, чтобы она могла отправлять данные на сервер. Вы можете использовать любое имя переменной, но имя 'task' принято использовать в большинстве компонентов. Другие переменные, которые вы должны передать на сервер, это $option (название директории вашего компонента, т.е. com_mycomp) и $Itemid (менюшное ID вашего компонента). Переменная $Itemid используется чтобы сгенерировать путь и подчеркнуть активное меню. Если вы ее уберете из URL, страница все еще будет загружаться корректно, но ни одно из меню не будет выделено и путь не будет правильно отображаться. На этой странице вы также можете использовать переменную $mainframe и $database объекты, которые предоставляют вам конфигурационные параметры, а также информацию о пользователе, который залогинился и т.д. * mycomp.html.php (не оязателен)Вот то самое место, где вы должны выставить классы GUI classes и функции. Конечно, можно все свалить в файл mycomp.php, но лучше иметь их в правильном месте. Общие установки конвенций Mambo использованы в имени класса HTML_mycomp. Нет необходимости создавать функцию конструктора (constructor function) потому что мы не будем создавать инстанцию для этого класса.
<?php Все формы должны быть направлены на index.php. Вы можете использовать функцию sefRelToAbs(), чтобы конвертировать URL в дружественную форму для поисковых систем.
<?php Так как же нам связать эти файлы? Объект $mainframe предоставляет функцию, которая называется getPath(). Добавьте следующюю строку кода к mycomp.php.
<?php Строка 'front_html' представляет из себя установленный Mambo ключ, чтобы подгружать файл mycomp.html.php. Есть также и другие ключи, о которых я расскажу позже. Для полного списка ключей getPath и тех мест, где Mambo ищет файлы, обращайтесь к Appendix B. Сейчас мы можем вызывать функции, указанные ниже из файла mycomp.php вот таким вот образом:
<?php Административные файлыФайлы этой группы используются для отображения вашего компонента для администратора Mambo. Это означает, что вы сможете добраться до этих файлов только через старницу администратора. Все эти файлы должны включать данные строки кода, чтобы избежать прямой загрузки в браузер и неавторизированных юзеров.
<?php На изображении показано где на странице администратора подгружаютсяфайлы admin.mycomp.php и toolbar.comname.php. Файлы, которые заканчиваются на '.html.php' не отображаются, но включатся как файлы утилит. Немного сложно объяснить про каждый из этих файлов в отдельности, но я кратко представлю их и позже объясню, как они связаны друг с другом. * admin.mycomp.phpСодержит переключатель 'switchboard' чтобы решить, какое действие выполнять, базируясь на выбранном пункте меню или кнопках (Add, Delete, и т.д.) * admin.mycomp.html.php (не обязателен)Содержит классы, печатающие коды HTML (отображение форм, таблиц, и т.д.) * toolbar.mycomp.phpСодержит переключатель 'switchboard' для принятия решений о том какие кнопки отображать, базируясь на выбранном пункте меню и задаче, выбранной в текущий момент * toolbar.mycomp.html.php (не обязателен)Содержит класс для отображения кнопок. Я думаю, что лучше всего разобрать пример, так что давайте предположим, что наш компонент My Component имеет 2 подменю, Config и Manage Items. Config нужен для того, чтобы изменить глобальные установки компонента, а Manage Items для того, чтобы добавлять/удалять некоторые данные из базы данных. Мне надо определить эти подменю в инсталляционном файле XML как следующее: (структура файла XML будет объясняться позже)
<?xml version="1.0" ?> Атрибут 'act' описывает главное действие, которое мы собираемся выполнять. Как мы увидим позже, мы можем указать более специфичную задачу на выполнение для каждого действия. Если бы нам потребовалось быстро описать дизайн нашего меню, вот что бы у нас было:
act: Config (config) Когда я выбираю меню Config, я хочу быть представленным формой, заполненной конфигурационными значениями и иметь кнопку, чтобы сохранить данные, если я внесу изменения в конфигурацию. Мы опишем это следующим образом: act: Config (config) task: default View configuration form Buttons: Save (save) act: Manage Items (manage) 'task: default' означает что это задание на выполнение по умолчанию когда я кликаю на меню Config. Что случится, когда я нажму на кнопку 'Save'? Форма должна быть подтверждена а данные сохранены в базе данных. Затем я хочу снова увидеть форму с обновленными значениями: act: Config (config) task: save
Save form data to the database View configuration form Buttons: Save (save) task: default View configuration form Buttons: Save (save) act: Manage Items (manage) Это все, что нам требуется для меню Config. Давайте теперь посмотрим на элементы управления (Manage Items). По умолчанию я хочу увидеть список элементов, которые у меня в базе данных, кнопку для добавления нового элемента и другую кнопку для удаления элементов. act: Config (config) task: save
Save settings to the database View configuration form Buttons: Save (save) task: default View configuration form Buttons: Save (save) act: Manage Items (manage) task: default
View list of items with checkboxes on the left Buttons: Add (add), Delete (delete) Когда я нажимаю на кнопку 'Add' (Добавить) я хочу увидеть форму для добавления нового элемента и кнопку 'Save' (Сохранить), кликая на кнопку 'Delete' (Удаление) элементы, которые я выбрал будут удалены и мне будет показан обновленный список элементов. act: Config (config) task: save Save settings to the database View configuration form Buttons: Save (save) task: default View configuration form Buttons: Save (save) act: Manage items task: add
View add form Button: Save (save) task: delete Delete items View list of items Buttons: Add (add), Delete (delete) task: default View list of items Buttons: Add (add), Delete (delete) Последнее что нужно сделать – это определить, что случится если нажать на кнопку 'Save' (Сохранить) (когда добавлен новый элемент). act: Config (config) task: save
Save settings to the database View configuration form Buttons: Save (save) task: default View configuration form Buttons: Save (save) act: Manage items (manage) task: add
View add form Button: Save (save) task: delete Delete items View list of items Buttons: Add (add), Delete (delete) task: save Add new item to the database View list of items Buttons: Add (add), Delete (delete) task: default View list of items Buttons: Add (add), Delete (delete) Итак, мы закончили с дизайном меню и можем перевести его в PHP используя утверждение switch:
<?php Куда мы должны вставить этот код? В оба этих файла: admin.mycomp.php и toolbar.mycomp.php. Разница в том, что admin.mycomp.php будет управлять доступом к данным, а toolbar.mycomp.php будет отвечать за отображение кнопок. Но структура, в общем, схожа для обеих файлов потому что нам нужно определить какая форма и кнопки должны отображаться для каждой комбинации переменных $act и $task.
<?php Теперь у нас есть готовая структура и вот настало врем заполнить ее новым кодом который будет заниматься обработкой данных. В общем, все процессы, которые относятся к GUI (HTML) должны сохраняться в файлах типа *.html.php. Для файла admin.mycomp.php их дотаточно просто заметить. Это все акции, которые начинаются с 'View ...'. (Просмотр....) Для имени класса в файле admin.mycomp.html.php принято прописывать как HTML_mycomp. Например:
<?php Записав функции в файл admin.mycomp.html.php, сделайте ссылку из файла admin.mycomp.php с помощью этого кода:
<?php
'admin_html' ключевое название для загрузки файла admin.mycomp.html.php точно также, как ключ 'front_html', который мы видели раньше для загрузки файла mycomp.html.php.
<?php Кнопка панели инструментов работает как кнопка подтверждения (submit) и поэтому мы должны иметь форму на каждой странице. Эта форма должна быть названа 'adminForm', относиться к файлу index2.php, и иметь скрытые поля чтобы пропустить переменные $option, $act, и $task. Вот пример самой простейшей формы.
<?php
Если у вас есть список элементов с чекбоксами (checkboxes) в форме, Mambo предоставляет функции Java Script? для того, чтобы выделить/снять выделение со всех элементов и проверить, что как минимум 1 элемент выделен, когда вы отправляете форму на подтверждение. Условия, необходимые для того, чтобы это работало, следующие:
<input type="checkbox" name="toggle" value="" onClick="checkAll(n);"> <input type="checkbox" id="cb0" name="cid[]" value="" onClick="isChecked(this.checked);"> <input type="checkbox" id="cb1" name="cid[]" value="" onClick="isChecked(this.checked);"> <input type="checkbox" id="cb2" name="cid[]" value="" onClick="isChecked(this.checked);"> <input type="hidden" name="boxchecked" value="0"> Файлы классов* mycomp.class.php (не обязателен)Файл класса mycomp.class.php содержит другие полезные функции, которые разделены между файлами главной страницы (frontend) и файлами администратора. Например, вы можете иметь функцию, которая возвращает здесь результат запроса и другую функцию в файле mycomp.html.php чтобы использовать этот результат и отобразить данные в таблице. Вы можете поместить этот файл либо в 'installdir/components/mycomp' (Mambo будет искать там в первую очередь) или в директорию 'installdir/administrator/components/mycomp' и включить его в frontend или в администраторские файлы, с помощью этой строки:
<?php Конечно, вы можете иметь другие файлы, кроме тех, которые объясняются здесь. Например, компонент Awesom! component имеет Smarty шаблоны включенные для более простой кастомизации дизайна. Тем не менее, вы не можете использовать $mainframe->getPath() чтобы включить файлы, так как Mambo не имеет для этого ключей.
<?php Инсталляционные файлыИнсталляционные файлы используются только во время установки или деинсталляции процесса копирования/удаления файлов и изображений в или из правильных расположений, создают или удаляют таблицы баз данных, используемые вашим компонентом, отображая ваши инсталяционные или деинсталляционные сообщения. Файлы этой группы копируются в папку installdir/administrator/components/mycomp . * mycomp.xmlЭтот файл содержит детали вашего компонента (имя, версию, copyright, ваш URL и email, и т.д.), список используемых файлов и изображений, команды SQL, которые должны быть исполнены во время установки/деинсталяции, и список элементов меню, которые должны отобразиться на странице админитратора (в меню Компонентов ('Components')). Название вашего компонента (текст между тэгами <name></name>) будет использован как имя директории после того, как он будет переведен в нижнй регистр, будут удалены все пробелы и префиксы, начинающиеся с 'com_'. Таким образом компонент 'My Component' будет сохранен в директорию 'com_mycomponent', и т.д. Поэтому постарайтесь избегать использования знаков, не принадлежащих к цифрам или буквам в имени компонента. Ниже приведен пример файла XML для нашего компонента 'My Component'. Я объясню некоторые из тэгов, так как большинство из них понятны сами по себе. Formatter «highlight/xml» not found Все файлы между тэгами <files></files> и <images></images> будут скопированы в папку installdir/components/mycomp, тогда как файлы между тэгами <administration></administration> будут скопированы в директорию installdir/administrator/components/mycomp. SQL запросы в <install></install> выполняются во время инсталяции, а запросы между тэгами <uninstall></uninstall> во время деинсталляции. Формат имен таблиц, который используется – #mycomp_tablename где #_ будет заменен Mambo на тот префикс таблицы, который вы выбираете во время установки Mambo. По умолчанию используется префикс 'mos' так что '#mycomp_data' создаст таблицу под названием 'mos_mycomp_data'. * install.mycomp.php (не обязателен)Этот файл содержит только одну функцию com_install(), которая буде вызываться после удачной установки вашего компонента. Примеры того, что вы можее здесь поместить – это сообщение приветствия, информацию копирайта, ссылку на ваш веб сайт и т.д.
<?php Обратите внимание, что com_install() ожидает от вас возвращения сообщения а не отображения его прямо изнури функции, чтобы отобразить его в правильной позиции на странице подтверждения удачной установки компонента (success page). Вот разница: Хотя отобразить сообщение изнутри функции не нанесет вреда, это все же политически неправильно :-) * uninstall.mycomp.php (не обязателен)Так же как в случае с файлом install.mycomp.php, этот файл тоже содержит только одну функцию, com_uninstall(). Так же как com_install(), com_uninstall() тоже ожидает от вас возвращения сообщения. Mambo должна отобразить это сообщение после деинсталляции компонента, но как ни странно, я никогда не видел сообщение, отображаемое из этого файла.
<?php Ну вот – это и есть наш туториал. Следующие 2 страницы содержат списки функций панели инструментов и ключи, использованные функцией $mainframe->getPath(). Для дальнейшего чтения Joseph Le Blanc? также имеет туториал на своем сайте. Appendix A. mosMenuBar
Здесь находится список функций для отображения кнопок панели инструментов. Эти функции принадлежат к классу mosMenubar. Общие параметры для этих функций следующие: Пример использования:
<?php
Функции, которые заканчиваются на 'List' (т.е. publishList) служат для пречисления записей на текущей странице. Обычно это бывает список чекбоксов, среди которых вам надо выбрать хотя бы одну запись. Эти функции выполнят определенную проверку, чтобы убедиться, что хотя бы одна запись выбрана.
addNew($task = 'new', $alt = 'New')
publish($task = 'publish', $alt = 'Publish')
publishList($task = 'publish', $alt = 'Publish')
makeDefault($task = 'default', $alt = 'Default')
assign($task = 'assign', $alt = 'Assign')
unpublish($task = 'unpublish', $alt = 'Unpublish')
unpublishList($task = 'unpublish', $alt = 'Unpublish')
archiveList($task = 'archive', $alt = 'Archive')
unarchiveList($task = 'unarchive', $alt = 'Unarchive')
editList($task = 'edit', $alt = 'Edit')
editHtml($task = 'edit_source', $alt = 'Edit HTML')
editCss($task = 'edit_css', $alt = 'Edit CSS')
deleteList($msg = , $task = 'remove', $alt = 'Delete')
trash($task = 'remove', $alt = 'Trash')
preview($popup = , $updateEditors = false)
help($ref)
save($task = 'save', $alt = 'Save')
cancel($task = 'cancel', $alt = 'Cancel')
back() Прописывает кнопку отмены, которая вернет назад предыдущую страницу, не выполняя какую-либо другую операцию.
media_manager($directory = )
divider() Appendix B.
Ключи используемые getPath()
Ключ Расположение
Файлов нет.
[Показать файлы/форму]
|
| Joomla в России | Joomla Форум | электронная музыка | |