Как создать собственный элемент

Этот урок проведет Вас через процесс создания собственного элемента для типа в приложении ZOO.

Начнем

Чтобы иметь представление о том, как работают элементы , взгляните на папку media/zoo/elements/ . Все элементы расположены здесь. Каждый элемент имеет свою папку, в которой Вы можете увидеть два файла: ELEMENT.php и ELEMENT.xml. В XML файле вы найдете описание элемента и его параметры. Рабочая область находится в соответствующем PHP файле.

Разбирая по деталям

Как обычно бывает в большинстве случаев, в компоненте ZOO, пользовательские модификации должны производится только в папке Applications. Поэтому, если еще нет папки для элементов, создайте ее по пути media/zoo/applications/APPLICATION/elements.
Затем уже в этой папке мы должны создать директорию для конкретного элемента. Давайте назовем наш элемент Address. Исходя из этого мы создадим такую папку: media/zoo/applications/APPLICATION/elements/address/. Такж появляется возможность добавить собственные элементы в шаблон вашего приложения. media/zoo/applications/APPLICATION/templates/TEMPLATE/elements/

Файл XML

Теперь создадим файл media/zoo/applications/APPLICATION/elements/address/address.xml. <?xml version="1.0" encoding="utf-8"?>
<element type="address" group="MY_GROUP">
    <name>Address</name>
    <author>John Doe</author>
    <creationDate>April 2010</creationDate>
    <copyright>THIS CAN PROBABLY BE OMITTED</copyright>
    <authorEmail>Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра.</authorEmail>
    <authorUrl>http://www.gravycon.ru</authorUrl>
    <version>1.0.0</version>
    <description>HTML address fields</description>
    <params>
    </params>
    <params group="render">
    </params>
</element> Здесь после объявления XML языка начинается часть метаданных элемента. К ним относятся name, author, creation date, и др. Все метаданные, судя по названию, говорят сами за себя. Важными здесь являются аттрибуты тега элемента. Type должен быть таким же, как класс элемента в PHP файле, а group будет использоваться для группирования элементов на экране редактирования элементов. После метаданных  элементов устанавливаются их параметры. Существует два вида параметров. Первые - параметры конфигурации элемента. Второй тег params имеет аттрибут group со значением render. Здесь вы можете выбрать опции отображения. В целом Вы можете включать любые параметры Joomla, такие как text, textarea, list, и др.

Файл PHP

Чтобы элемент "начал работать", создадим следующий файл: media/zoo/applications/APPLICATION/elements/address/address.php. Нам необходимо создать класс, который является подклассом класса  the Element: class ElementAddress extends Element {
public function edit() {
}
}
Помните, что имя класса должно состоят из двух составляющих: Element и типа элемента. Дополнительно класс должен переопределять стандартную абстрактну функцию классов edit(). Вот кажется и все. Да, конечно, этот элемент много не может. Поэтому добавим в него некоторую функциональность для отображения и редактирования. Для упрощения наш элемент будет иметь три поля: Street, ZIP code и Country. Давайте предоставим возможность пользователям вводить эти значения, применяя функцию edit. public function edit() {
$html = array();
$html[] = $this->app->html->_('control.editrow', JText::_('Street'), $this->app->html->_('control.text', $this->getControlName('street'), $this->get('street'), 'size="60" maxlength="255"'));
$html[] = $this->app->html->_('control.editrow', JText::_('ZIP'), $this->app->html->_('control.text', $this->getControlName('zip'), $this->get('zip'), 'size="60" maxlength="255"'));
$html[] = $this->app->html->_('control.editrow', JText::_('Country'), $this->app->html->_('control.text', $this->getControlName('country'), $this->get('country'), 'size="60" maxlength="255"'));
return implode("\n", $html);
}
Функция edit будет выводить три текстовых поля при редактировании материала. Она использует функцию element.editrow для генерации редактируемых строк, с надписью и текстовым полем для ввода. Также она использует функцию control.text для вывода этих полей. Для получения текущих значений, мы используем метод get : $this->get(DATA_KEY);. Для материала, который должен отображаться, мы переопределим базовую функцию классов render. public function render($params = array()) {
return $this->get('street') . ', ' . $this->get('zip') . ', ' .$this->get('country');
}
Параметр $params содержит массив опции отображения, определенных в XML файле элемента. Здесь выводятся значения трех элементов, разделенные запятой.Помните, что мы используем тот же метод выборки данных элементов, как и в выше указанной функции edit.
Если оставить эту функцию как есть, на сайте ничего не будет отображаться. Мы должны переопределить функцию hasValue, чтобы указать рендеру, имеет ли элемент значение или нет. public function hasValue($params = array()) {
$street = $this->get('street');
$zip = $this->get('zip');
$country = $this->get('country'); return !empty($street) ||!empty($zip) ||($country);
}
Если один из этих трех элементов будет непустым, элемент будет обозначен, как имеющий значение, и будет тображен на сайте. Тем самым, мы сделали простой пользовательский элемент.

Заключение

Пожалуйста, запомните, что этот урок является примером того, как писать код для создания элемента. На простом примере Вы можете понять саму логику создания элемента и его основных составляющих. Если Вы хотите более глубоко изучить данный вопрос, попробуйте изучить готовые элементы и на их основе создать что-то новое.
  • Понедельник, 05 января 2015

Оставить комментарий

Вы комментируете как Гость.

beget