Комментарии

XML-файл модуля CMS Joomla 2.5
( 0 Голосов )

Итак, начнем разработку модуля с XML-файла. Этот файл выполняет несколько функций. Так, у элемента разметки extension имеются атрибуты для указания типа (type), версии (version), клиента (client); т.е. администратора веб-сайта и метода (method) разрабатываемого модуля. Эти атрибуты используются установщиком расширений Joomla в процессе их установки. В элементе разметки files предоставляется список файлов и папок (иначе называемый декларацией), откуда установщик расширений Joomla может выяснить, какие именно файлы и папки относятся к устанавливаемому расширению. Это дает возможность копировать файлы в процессе установки и удалять их по ходу удаления самого модуля.

В элемент разметки extension вложены также элементы, предоставляющие в описательной форме сведения о модуле, в том числе его название, автора, авторское право и т.д. И наконец, XML-файл может содержать элемент разметки config, определяющий любые параметры модуля, появляющиеся в компоненте Module Manager.

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

Исходный код из файла mod_joompro_articles_author .xml (часть 1)

<?xml version="1.0"  encoding="utf-8"?>
<extension type="module" version="2.5.0" client="site method="upgrade">
<name>mod_joompro_articles_author</name>
<author>Mark Dexter and Louis Landry</author>
<creationDate>January 2012</creationDate>
<copyright>Copyright (C) 2012 Mark Dexter  and Louis  Landry. All rights preserved.</copyright>
<license>GNU General  Public License version 2  or later; see LICENSE.txt</license>
<authorEmail>admin(a)joomla.org</authorEmail>
<authorUrl>www.joomla.org</authorUrl>
<version>2.5.0</version>
<description>MOD_JOOMPRO_ARTICLES_AUTHOR_DESCRIPTION</description>
<files>
<filename module="mod_joompro_articles_author">mod_joompro_articles_author.php</filename>
<folder>tmpl</folder>
<filename>helper.php</filename>
<filename>index.html</filename>
<filename>mod_joompro_articles_author.xml</filename>
<folder>language</folder>
</files>

Этот код похож на код из рассматривавшегося ранее файла moduserslatest module. xml. В частности, элемент разметки name обозначает имя папки, а также имя главного PHP-файла и самого XML-файла данного модуля. А в системном файле языковой поддержки с расширением .sys.ini находится ключ для перевода этого имени в нечто более удобочитаемое и описательное, когда модуль появляется в компоненте Module Manager. Пример такого ключа приведен ниже.

MOD_JOOMPRO_ARTICLES__AUTHOR="Articles by Current Author"

Этот ключ указан также в элементе разметки description, предоставляя тем самым описание данного модуля. Ключ описания модуля определяется в обоих файлах языковой поддержки.

Элемент разметки files мало чем отличается своим содержимым от аналогичного элемента разметки модуля mod_users_latest. У первого вложенного в него элемента разметки filename имеется атрибут module, определяющий имя модуля и указывающий файл для загрузки при выполнении модуля. Как и в модуле mod_users_latest, в данном случае указывается папка tmpl, куда помещается файл компоновки модуля. Затем перечисляются файлы helper.php, index.html и сам XML-файл. Напомним, что перечислять XML-файл совсем не обязательно, но все же желательно.

Отличие данного примера модуля от предыдущего заключается, в частности, в том, что в рассматриваемый здесь XML-файл добавлен элемент разметки folder, в котором указывается папка языковой поддержки модуля. В этой папке будет находиться подпапка с двумя файлами, имеющими расширение . ini, для каждого языка, включаемого вместе с модулем.

Вторая часть исходного кода из XML-файла разрабатываемого модуля приведена в листинге 6.5.

Исходный код из файла mod_joompro_articles_author.xml (часть 2)

<config>
<fields name="params">
<fieldset name="basic"> <field name="count" type="text" default="5" label="MOD_JOOMPRO_ARTICLES_AUTHOR_FIELD_NUMBER_LABEL" description="MOD_JOOMPRO_ARTICLES_AUTHOR_FIELD_NUMBER_DESC">
</field>
<field name="article_ordering" type="list" validate="options" default="a.title" label="MOD_JOOMPRO_ARTICLES_AUTHOR_FIELD_ARTICLEORDERING_LABEL" description"MOD_JOOMPRO_ARTICLES_AUTHOR_FIELD_ARTICLEORDERING_DESC">
<option value="a.title">JGLOBAL_TITLE</option>
<option value="a.hits">MOD_JOOMPRO_ARTICLES_AUTHOR_OPTION_HITS_VALUE </option> <option value="a.created">MOD_JO0MPR0_ARTICLES_AUTH0R_0PTION_CREATED_VALUE </option>
<option value="a.publish_up">MOD_JOOMPRO_ARTICLE S_AUTHOR_OPTION_START PUBLISHING_VALUE </option>
</field>
<field name="article_ordering_direction" type="list" validate="options" default="ASC" label="MOD_ARTICLES_CATEGORY_FIELD_ARTICLEORDERINGDIR_LABEL" description="MOD_ARTICLES_CATEGORY_FIELD_ARTICLEORDERINGDIR_DESC">
<option value="DESC">MOD_JOOMPRO_ARTICLES_AUTHOR_OPTION_DESCENDING_VALUE </option>
<option value="ASC">MOD_JOOMPRO_ARTICLES_AUTHOR_OPTION_ASCENDING_ VALUE</option>
</field>
</fieldset>

В этой части XML-файла определяются специальные параметры разрабатываемого модуля. Таких параметров три. Первый из них называется count и служит для ввода количества статей, которые требуется отобразить. По умолчанию это количество равно 5, но пользователь может указать любое количество статьей. Обратите внимание на то, каким образом этот параметр устанавливается: от пользователя не требуется вводить действительное целое значение; он может ввести и текст. Далее в этой главе будут рассмотрены некоторые подходы к улучшению проверки достоверности в поле данного параметра.

Следующий параметр, articleordering, определяет порядок расположения статей в списке. Для этого предоставляются четыре варианта выбора: по названию, количеству обращений, дате написания и дате публикации. Каждый элемент разметки option содержит атрибут value и соответствующее текстовое описание варианта выбора. Значение атрибута value будет передаваться форме при выборе соответствующего варианта. Текст этого значения снабжен языковым ключом, по которому выбирается соответствующее значение из файла (с расширением .ini) языковой поддержки данного модуля для последующего перевода. Языковые ключи для текстовых описаний вариантов выбора получились довольно длинными, поскольку в них входит имя данного модуля. Но, несмотря на всю свою громоздкость, они устраняют конфликты по совпадению с именами в других файлах языковой поддержки, которые могут быть загружены одновременно.

В каждом атрибуте value указывается точное имя столбца таблицы из базы данных, который будет использоваться в операторе ORDER BY запроса SQL для сортировки списка статей. Помимо имени столбца, указывается идентификатор а. данной таблицы. А при формировании запроса следует указать имя таблицы с помощью оператора FROM со словом AS а, как показано ниже.

$query->from('#content AS  a');

Таким образом, значение, выбираемое из параметра articleordering, может быть использовано непосредственно в запросе базы данных.

И последним в листинге ниже является параметр article_ordering_direction, определяющий порядок сортировки статей в списке. Он допускает установку одного из двух значений по выбору: ASC или DESC. Выбранное значение вставляется непосредственно в запрос базы данных и, в частности, в оператор ORDER BY, чтобы указать порядок сортировки результатов запроса по нарастающей (ASC), как обычно, или же по убывающей (DESC).

Следует заметить, что в разметку обоих параметров, article_ordering и article_ordering_direction, включен атрибут validate="options" для проверки соответствия значений этих параметров, введенных в передаваемой форме, тем, что указаны в списке. Это очень важная мера предосторожности, не позволяющая злоумышленнику передавать недостоверные данные в форме. Мы еще вернемся к данному вопросу далее в этой главе.

И последняя часть исходного кода из XML-файла разрабатываемого модуля приведена в листинге ниже.

Исходный код из файла mod._joompro_articles_author.xml (часть 3)

<fieldset name="advanced">
<field name="layout" type="modulelayout" label="JFIELD_ALT_LAYOUT_LABEL" description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
<field name="moduleclass_sfx" type="text" label="COM_MODULE S_FIELD_MODULECLAS S_SFX_LABEL" description="COM_MODULES_FIELD_MODULECLASS_SFX_DESC" />
<field name="cache" type="list" default="1" label="COM_MODULES_FIELD_CACHING_LABEL" description="COM_MODULES_FIELD_CACHING_DESC">
<option value="1">JGLOBAL_USE_GLOBAL</option>
<option value="0">COM_MODULES_FIELD_VALUE_NOCACHING</option>
</field>
<field name="cache_time" type="text" default="900" label="COM_MODULES_FIELD_CACHE_TIME_LABEL" description="COM_MODULES_FIELD_CACHE_TIME_DESC" />
<field name="cachemode" type="hidden" default="static">
<option value="static"></option>
</field>
</fieldset>
</fields>
</config>
</extension>

Эта часть кода является точной копией дополнительного элемента fieldset из XML-файла разметки любого другого модуля в пользовательской части веб-сайта (например, mod._articles_archive.xml). В ней определяются следующие стандартные параметры модуля.

  • Компоновка — имя файла дополнительной альтернативной компоновки.
  • Суффикс класса модуля — это суффикс дополнительного класса CSS стилевого оформления отдельных экземпляров или модулей.
  • Кеширование — активизация или отмена режима кеширования для данного экземпляра или модуля.
  • Время кеширования — период времени в секундах, отводимый для использования кешированнной копии модуля.

Четвертый параметр, cachemode, демонстрирует очень важное свойство полей в классе JForm. Поле этого параметра содержит значение атрибута type="hidden", обозначающее скрытый тип. Это означает, что данное поле будет сохранено как и любое другое поле. Но поскольку оно скрыто, то пользователь вообще не увидит его, а следовательно, не сможет его изменить. Это поле воспроизводится как элемент input разметки HTML с атрибутом type="hidden", т.е. как скрытое.

Как пояснялось ранее, не следует забывать, что злоумышленники все же могут манипулировать скрытыми элементами формы, используя, например, такое дополнение веб-браузера, как Firebug. Поэтому и скрытые поля нужно всегда проверять на достоверность. Это следует делать из соображений безопасности, а не только ради удобства пользовательского интерфейса. Иными словами, используя какое-нибудь значение в коде, мы должны принять такие же меры защиты против появления неожиданных или злоумышленных значений в скрытых полях, как и в обычных полях формы.


Понравился материал? Пригодилась информация? Плюсани в социалки!


 
Похожие новости
Добавить комментарий


Защитный код