Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!
Для хранения практически всей информации о сайте Joomla использует базу данных MySQL. Она позволяет хранить значительные объемы данных, при этом предоставляет нам удобный интерфейс для взаимодействия с ней. Компонент обычно создает хотя бы одну таблицу для хранения своей информации. Например, данные материалов компонента «com_content» хранятся в «jos_content» таблице (где «jos_» это префикс названия всех таблиц Joomla).
Однако возникает проблема, как универсально хранить в одной и той же таблице большое количество параметров, при этом легко работать с ними. Существует два выхода — каждый элемент настроек хранить в отдельном поле таблицы или все параметры хранить в одном месте. В принципе, нет никаких ограничений со способом хранения настроек компонента. Но в Joomla 1.5 уже существует API для хранения информации подобного рода. Разберем как это делается…
Это глобальные настройки задаются один раз на весь компонент, и как правило используются для одного конкретного сайта.
Пункт меню так же может иметь индивидуальные параметры для компонента. Обычно они перекрывают глобальные настройки расширения. Таким образом два разных пункта меню могут ссылаться на один и тот же материал, при этом материал может отображаться по разному, в зависимости от выбранного вида (не нужно путать с MVC), т. е. типом меню и настройками непосредственно самого пункта.
Наконец для каждого элемента (например материала для «com_content») можно установить индивидуальные настройки, которые будут перекрывать настройки из меню, а тот в свою очередь глобальные настройки компонента.
Обычно, все параметры хранятся в базе данных MySQL в. одном поле типа text. Различные параметры разделены символом переноса «\n», т. е. каждый параметр — это отдельная строка. Имя от значения отделяются друг от друга символом «=». Например
Они хранятся в поле «params» таблицы jos_components, в строке соответствующей определенному компоненту, к которому они применяются.
Они хранятся в поле «params» таблицы jos_menu, в строке соответствующей конкретному пункту меню, который указывает на компонент.
Они хранятся в текстовом поле в таблице, созданной с помощью компонента. Отметим, что нет строгого правила именования этого поля, хотя обычно его тоже называют «params». Не смотря на это, «com_content» например, использует для этого поле с именем «attribs».
Joomla предоставляет нам ряд удобств для работы с параметрами компонентов. Для этого все параметры должны быть описаны в файле «.xml» и объединены тегом <param />. Вложенные теги определяются как элементы формы, которая доступна в настройках компонента панели управления.
Каждый элемент формы должен иметь атрибуты «name» и «default». После установки компонента в базу данных запишутся эти значения как умолчания. Однако это не всегда удобно. Можно создать отдельный файл настроек компонента config.xml в корне директории «/administrator/components/com_COMPONENT_NAME/». Структура файла должна выглядеть так как ниже в примере.
В атрибуте «addpath» указывается директория с новыми типами элементов форм, которые можно самостоятельно определить при разработке. Также этот атрибут можно определить в теге <url>, который обрамляет специальные элементы <param>. Чтобы задействовать новый тип нужно в атрибуте «type» тега <param> указать название класса, который расширяет класс JElement. Класс этот должен быть объявлен в файле с именем класса и расположен в директории «/administrator/components/com_COMPONENT_NAME/elements».
Чтобы получить доступ к форме параметров необходимо прописать следующий код:
При использовании MVC этот код вписывается в файле «/administrator/components/com_COMPONENT_NAME/views/VIEW_NAME/view.html.php». В результате чего имеем:

При нажатии на эту кнопку, вы увидите форму настроек компонента, которая создается с помощью файла «config.xml». Обратите внимание, что нет большой необходимости объявлять значения по умолчанию, т.к они впишутся автоматически при установке компонента.
Обычно один компонент может иметь несколько представлений, например «категория», «материал», «раздел». И каждый из этих видов имеет свои настройки. Кроме того эти настройки при совпадении имен, могут переопределять глобальные(об это ниже). Форма параметров определена в XML файле, который должен быть расположен по адресу «/components/com_COMPONENT_NAME/views/VIEW_NAME/tmpl/default.xml». Если название Вида не default, то XML-файл должен иметь название как и у файла Вида. Структура файла следующая:
За отображение этих форм отвечает административный компонент com_menus. После того как он обработает xml-файл, все что находилось внутри <url> и <params> будет отображено в основных параметрах, соответственно для содержимое <advanced> будет включено в расширенные параметры пункта меню.

При описании настроек для пункта меню нужно иметь ввиду несколько вещей:
Они определены в файле XML, который может храниться где угодно, но обычно находится в пределах Back-End директории «models» (если вы используете структуру MVC) и назван в зависимости от имени модели, к которой он применяется, например «/administrator/components/com_COMPONENT_NAME/models/MODEL_NAME.xml». Файл XML должен иметь следующую структуру:
Как и в случаях выше, можно вместо тега <root> использовать любой другой, но все же желательно использовать «root». Можно определить несколько групп параметров, указывая в теге <params> атрибут с именем группы. При наличие нескольких одинаковых групп, использоваться в работе будет только первая.
Для того чтобы эти группы отобразились в настройке элемента, в панели управления придется написать небольшой фрагмент кода. Нужно получить доступ к параметрам из базы данных. Для это стоит определиться с местом хранения параметров в базе MySQL и XML-файлом, который будет использоваться для описания формы. Например, будем считать что в $row содержится информация о материале, а в свойстве этого объекта params — сохраненные параметры из базы данных.
Этот код должен находится в файлах Вида (например, view.html.php) в соответствующих папках.
Для отображения параметров в форме слайдера (аккордиона) нужно использовать следующий код в файле шаблона (например, /administrator/com_COMPONENT_NAME/views/VIEW_NAME/tmpl/default.php). Пример слайдера можно увидеть на картинке выше, а реализация идет далее.
Для того, чтобы сохранить параметры в базу данных нужно перегрузить метод BIND(), который может быть найден в «/administrator/com_COMPONENT_NAME/tables/COMPONENT_NAME.php»
Работа с параметрами для лицевой части сайта, несколько сложнее, т. к. здесь будет срабатывать перекрытие, то нужно не забывать о том что у компонента «Элемент» перекрывает «Пункт меню», который перекрывает настройки по умолчанию. Желательно использовать эту иерархию, в крайнем случае придется прилагать дополнительные усилия и усложнять логику компонента, нарушая стандартную работу Joomla.
Следующий фрагмент кода, дает доступ к глобальным настройкам компонента, которые уже перекрыты пунктом меню (если это было возможно).
По правилам MVC код должен быть помещен в Вид (view.html.php)
Допустим параметры пункта меню хранятся в свойстве «params» переменной $row (объект пункта меню), тогда чтобы перекрыть глобальные параметры выполним следующее действие.
Заметим, что в обоих предыдущих примерах, мы не просто перекрываем параметры, мы так же добавляем новые, недостающие элементы и получаем в итоге полный комплект настроек. Теперь для доступа к конкретному значению используем следующий код:
Нужно понимать что при использовании метода merge() не получиться перекрывать определенные параметры. Другими словами следующий код не даст вам желаемого результата:
Как это правильно делать, читаем ниже.
Бывают случаи когда разработчикам нет необходимости использовать встроенное перекрытие, а нужно работать отдельно с каждым набором. Это немного сложнее реализовывать. В следующем примере $params будет присвоены параметры по умолчанию, без перекрытия
Если вам необходимо объединять параметры из определенного пункта меню, то код будет выглядеть примерно так
Это наиболее корректный метод, чем тот что описывается выше. В этом случае можно просто хранить все в смешанном объекте, например так
Таким образом можно гибко управлять настройками компонента. Например, сделать так чтобы компонент игнорировал в определенных случаях глобальные параметры и использовал только то что придет из пункта меню, или наоборот. Но тем не менее, лучше не отходить от стандартного подхода, а в крайнем случае каким-либо способом сообщить пользователю как работает расширение.
Доступ к конкретному значению осуществляется так же как описано чуть выше.
Огромное спасибо. Очень полезная статья - мне нужно было получить глобальные настройки компонента, которые перекрывались настройками пункта меню.
Скажите, пожалуйста для чего нужен в таком случае файл metadata.xml, который располагается в папке какого-либо вида в пользовательской части компонента?
"По правилам MVC код должен быть помещен в Вид"
http://ru.wikipedia.org/wiki/MVC
Представление, вид (англ. View). Отвечает за отображение информации (визуализация).
ИМХО кода там лишнего вобще не д.б.
Добрый день.
Создал файл config.xml. При нажатии на кнопку "настройки" выводится путая форма. Joomla 1.7
В чем может быть проблема? Заранее спасибо.
Текст конфига
<root>
<params>
<param type="text" name="moderator_email" size="129" default="wm@mydomain.ru" label="Email модератора" description="Адрес, на окторый будут отправляться сообщения о новых вопросах" />
</params>
</root>
анализ работающих компонентов показал.
для 1.7 config.xml должен выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<config>
<fields>
<fieldset name="component">
<field type="text" name="moderator_email" size="129" default="" label="Email модератора" description="Адрес, на окторый будут отправляться сообщения о новых вопросах" />
</fieldset>
</fields>
</config>
вот это работает.
Здравствуйте!
А как обратиться к параметру, скажем, "show_intro" поля "params" в таблице "jos_menu" из шаблона?