|
В разделе "Первые папки и файлы. Добавление пунктов меню" предлагается создать две файла: - myquestions.php; - admin.myquestions.php с соответствуюшими адресами: - /components/com_myquestions/myquestions.php; - /administrator/components/com_myquestions/admin.myquestions.php; Так вот, при создании файла "admin.myquestions.php" В админке выдает ошибку - "Компонент не найден", а при переименовании его на "myquestions.php" в последующем шаге, в админке не выводятся кнопки редактирования. |
Файл-манифест
Упаковка компонента
Создайте в любом месте на диске новую папку, а в ней - папки admin и site, а также файл myquestions.xml:
<?xml version="1.0" encoding="utf-8"?>
<extension type="component" version="1.7">
<name>com_myquestions</name>
<author>Me</author>
<creationDate>2012</creationDate>
<copyright>Copyright (C) 2012 Me</copyright>
<license>GNU General Public License version 2 or later</license>
<authorEmail>admin@mysite.ru</authorEmail>
<authorUrl>www.mysite.ru</authorUrl>
<version>1.7.0</version>
<description>COM_MYQUESTIONS_XML_DESCRIPTION</description>
<install folder="admin">
<sql>
<file driver="mysql" charset="utf8">sql/install.sql</file>
</sql>
</install>
<uninstall folder="admin">
<sql>
<file driver="mysql" charset="utf8">sql/uninstall.sql</file>
</sql>
</uninstall>
<files folder="site">
<filename>controller.php</filename>
<filename>myquestions.html.php</filename>
<filename>myquestions.php</filename>
<filename>router.php</filename>
<folder>models</folder>
<folder>views</folder>
</files>
<languages folder="site">
<language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.ini</language>
</languages>
<administration>
<menu img="class:component">COM_MYQUESTIONS_MENU</menu>
<submenu>
<menu img="class:component" link="option=com_myquestions">COM_MYQUESTIONS_MENU_QUESTIONS</menu>
<menu img="class:component" link="option=com_myquestions&task=showcat">COM_MYQUESTIONS_MENU_CATEGORIES</menu>
</submenu>
<files folder="admin">
<filename>admin.myquestions.html.php</filename>
<filename>admin.myquestions.php</filename>
<filename>config.xml</filename>
<filename>controller.php</filename>
<filename>toolbar.myquestions.html.php</filename>
<filename>toolbar.myquestions.php</filename>
<folder>tables</folder>
<folder>sql</folder>
</files>
<languages folder="admin">
<language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.ini</language>
<language tag="ru-RU">language/ru-RU/ru-RU.com_myquestions.sys.ini</language>
</languages>
</administration>
</extension>
Листинг
.
Теги, задающие метаданные, такие как author, creationDate и другие, скопированы из файла /modules/mod_myquestions/mod_myquestions.xml.
Тег <install> задает SQL-файл, который будет выполнен при установке компонента. Обратите внимание, что явно указана его кодировка - utf-8 и, следовательно, этот файл нужно будет сохранить в указанной кодировке. Заметьте также, что тег <install> имеет атрибут folder со значением admin, что означает, что инсталлятор будет искать SQL-файл в папке admin установочного пакета. Кроме того, файл задан как sql/install.sql, то есть он находится в папке sql внутри папки admin. Тег <uninstall> имеет аналогичное содержимое.
Далее следует тег files со значением атрибута folder, равным site, т.е. описаны папки и файлы, которые находятся в папке site установочного пакета. Обратите внимание, что содержимое подпапок (models и views) не описывается, указывается только имя подпапки.
Содержимое тега <languages> описывает языковые файлы. Так как задан атрибут site, то эти файлы будут скопированы из папки site установочного пакета.
Оставшуюся часть файла myquestions.xml занимает тег <administration>. Вложенные в него теги <files> и <languages> аналогичны тегам, описывавшим фронтенд, за исключением атрибутов folder, имеющих значение admin. Тег <menu> описывает пункт меню, который появится в меню "Компоненты" панели управления, а также два его подпункта. Обратите внимание, что при задании ссылок для пунктов меню вместо амперсанда необходимо указывать его HTML-эквивалент &.
Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.ini строки:
COM_MYQUESTIONS="Моя система «вопрос – ответ»"
COM_MYQUESTIONS_XML_DESCRIPTION="Моя система «вопрос – ответ»"
В папку admin скопируйте содержимое папки /administrator/components/com_myquestions, а в папку site - /components/com_myquestions.
Кроме того, создайте в папке site папку language, в ней - папку ru-RU. Скопируйте в нее файл ru-RU.com_myquestions.ini из language/ru-RU.
Создайте в папке admin папку language, в ней - папку ru-RU и скопируйте в нее файлы ru-RU.com_myquestions.sys.ini и ru-RU.com_myquestions.ini из /administrator/language/ru-RU.
Наконец, создайте в папке admin подпапку sql, а в ней создайте файлы install.sql и uninstall.sql.
Получившееся дерево папок показано на рис. 8.3.
В файл install.sql вставьте код
DROP TABLE IF EXISTS `#__myquestions`; DROP TABLE IF EXISTS `#__myquestions_categories`;
CREATE TABLE `#__myquestions`
(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`date` DATETIME NOT NULL,
`question` TEXT NOT NULL,
`city` VARCHAR(50) NULL,
`email` VARCHAR(50) NOT NULL,
`IP` VARCHAR(15) NOT NULL,
`id_cat` INT NOT NULL,
`published` TINYINT(1) NULL DEFAULT '1',
`expiration_date` DATETIME NULL DEFAULT '0000-00-00 00:00:00',
`senttoexpert` TINYINT(1) NULL DEFAULT '0',
`answer` TEXT NULL DEFAULT '',
`senttoauthor` TINYINT(1) NULL DEFAULT '0'
);
CREATE TABLE `#__myquestions_categories`
(
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`name` VARCHAR(255) NOT NULL,
`desc` TEXT NOT NULL DEFAULT ''
);
INSERT INTO `#__myquestions_categories`(`name`, `desc`) VALUES('Без категории','');
В сущности, это тот самый код, который использовался нами ранее для создания таблиц, но вместо реального префикса таблиц указан символический. До создания таблиц мы выполняем запросы для удаления таблиц с теми же названиями, если они существуют, чтобы избежать ошибок при переустановке компонента.
В таблицу #__myquestions_categories сразу же вставляется запись для категории под названием "Без категории". Так как таблица только что создана, эта запись получит id, равный 1, то совпадающий с id категории, который в нашем компоненте присваивается новому вопросу при добавлении.
Запросы из скрипта uninstall.sql удаляют обе таблицы:
DROP TABLE `#__myquestions`; DROP TABLE `#__myquestions_categories`;
Упакуйте папки admin, site и файл myquestions.xml в архив com_myquestions.zip. Установочный пакет компонента готов. Для проверки его работоспособности создайте новую установку Joomla и установите на нее ваш компонент с помощью менеджера расширений в панели управления.
