Опубликован: 02.10.2012 | Доступ: свободный | Студентов: 1916 / 85 | Длительность: 11:48:00
Теги: joomla, mvc, php, xhtml, xml
Лекция 8:

Файл-манифест

Упаковка компонента

Создайте в любом месте на диске новую папку, а в ней - папки 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&amp;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-эквивалент &amp;.

Добавьте в файл /administrator/language/ru-RU/ru-RU.com_myquestions.sys.ini строки:

COM_MYQUESTIONS="Моя система &laquo;вопрос &ndash; ответ&raquo;"
COM_MYQUESTIONS_XML_DESCRIPTION="Моя система &laquo;вопрос &ndash; ответ&raquo;"
            

В папку 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.

Дерево папок установочного пакета

Рис. 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 и установите на нее ваш компонент с помощью менеджера расширений в панели управления.

Кирилл Гусаров
Кирилл Гусаров

В разделе "Первые папки и файлы. Добавление пунктов меню"

предлагается создать две файла:

- myquestions.php;

- admin.myquestions.php

с соответствуюшими адресами:

/components/com_myquestions/myquestions.php;

- /administrator/components/com_myquestions/admin.myquestions.php;

Так вот, при создании файла "admin.myquestions.php" В админке выдает ошибку - "Компонент не найден", а при переименовании его на  "myquestions.php" в последующем шаге, в админке не выводятся кнопки редактирования. 
Проверил кодировку, проверил правильность пути к файлам, пересохранил указанный код. Скажите что я делаю не так или в чем может быть причина?