Создание интересного сайта — залог успешного продвижения Бизнеса... 
Документация ZOO Разработка Создание пользовательского элемента

Создание пользовательского элемента

В этой инструкции рассматривается процесс создания пользовательских элементов компонента ZOO.

Приступим к созданию

Что получить представление о том, как устроены элементы приложения, зайдите в папку "administrator/components/com_zoo/elements/". Абсолютно все элементы, созданные или которые будут созданы расположены в этой папке. Каждый отдельный элемент имеет свою собственную папку, в которой находятся, как минимум, два файла "ИМЯ_ЭЛЕМЕНТА.php" и "ИМЯ_ЭЛЕМЕНТА.xml".

В XML-файле находится описание элементов и их параметры. Сам функционал находится в файле PHP.

Углубимся в детали

Все модификации, доработки, созданные элементы должны быть расположены исключительно в директории "media/zoo/". Поэтому Вам необходимо создать папку "media/zoo/applications/APPLICATION/elements", в том случае если ее не существует.

Затем Вам необходимо создать папку самого элемента. Это выглядит следующим образом "media/zoo/applications/APPLICATION/elements/ИМЯ_ЭЛЕМЕНТА/".

XML - файл

Первым делом создайте файл "media/zoo/applications/APPLICATION/elements/ИМЯ_ЭЛЕМЕНТА/ИМЯ_ЭЛЕМЕНТА.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>john @ doe.com</authorEmail>
<authorUrl>http://www.johndoe.com</authorUrl>
<version>1.0.0</version>
<description>HTML address fields</description>
<params>
<param name="name" type="text" default="" label="Name" description="Name used in item editor" />
<param name="description" type="text" default="" label="Description" description="Description tooltip used in item editor" />
</params>
<params group="render">
<param name="showlabel" type="radio" default="0" label="Show Label" description="Show/Hide element label">
<option value="0">No</option>
<option value="1">Yes</option>
</param>
<param name="altlabel" type="text" default="" label="Alternative Label" description="Possibility to override the default element label for this element rendering in this template position. Normally keep this field blank." />
</params>
</element>
После стандартной строчки любого XML-файла следуют данные имени элемента, автора, Даты создания и прочая информация помещенная в xml-тэги. Крайне важно упомянуть, что тип элемента в коде должен соответствовать классу в PHP-файле элемента.

После описания всех типов элемента задаются его параметры. Первый параметр имеет два вложенных параметра "Заголовок" и "Описание".
Второй параметр имеет атрибут "group" с присвоенным ему значением "render". Это парметр отображения элемента, то есть, иными словами параметр отвечающий за то, публиковать элемент или нет, поэтому у него имеются значения 0 = NO и 1 = YES. Они явля.тся обязательными.

Так же Вы можете включить в элемент и остальные параметры, таке как текст, подзаголовок, автора и другие.

PHP - файл

Чтобы элемент начал функционировать Вам необходимо создать файл "ИМЯ_ЭЛЕМЕНТА.php" в его папке.
Затем создайте класс для элемента:
class ElementИмя_элемента extends Element {
public function edit() {
}
}

Обратите внимание, что имя класса должно включать в себя имя самого элемента и содержать функцию "Edit()".

Для некоторой упрощенности наш элемент будет состоять из трех текстовых полей: улицы, постового индекса и страны. Пусть у пользователя будет возможность вводить эти данные. Для этого необходимо немного изменить функцию "Edit()".
public function edit() {
$html = array();
$html[] = JHTML::_('element.editrow', JText::_('Улица'), JHTML::_('control.text', 'elements['.$this->identifier.'][street]', $this->_data->get('street'), 'size="60" maxlength="255"'));
$html[] = JHTML::_('element.editrow', JText::_('Индекс'), JHTML::_('control.text', 'elements['.$this->identifier.'][zip]', $this->_data->get('zip'), 'size="60" maxlength="255"'));
$html[] = JHTML::_('element.editrow', JText::_('Страна'), JHTML::_('control.text', 'elements['.$this->identifier.'][country]', $this->_data->get('country'), 'size="60" maxlength="255"'));

return implode("\n", $html);
}
Функция "Edit()" теперь содержит три текстовых поля, которые помещены в массив "$html" и свою очередь используют функцию element.editrow. Эта функция отвечает за генерацию строки редактирования, в нее включены нужные параметры, ввиде названия поля для редактирования. "EditRow" так и переводится "Edit" - редактировать, "Row" - строка. Функция "control.text" отвечает за вывод текстового поля.

Обратите внимание на имя элемента после "JText::_" - это имя для отображения.

Для внешнего вида отображения Вам необходимо переписать функцию "Render()". Это будет выглядеть следующим образом:
public function render($params = array()) {
return ($this->_data->get('street') . ', ' . ($this->_data->get('zip') . ', ' .($this->_data->get('country');
}
Массив "$params" содержит параметры отображения, которые указаны в XML-файле.

Эта функция при ее вызове, возвращает три элемента, разделенных запятыми. Заметьте, что используется тот же метод извлечения данных, что и в функции "Edit()".

Теперь нам нужна функция "hasValue()". Она то как раз и отвечает за визуализацию в интерфейсе.
public function hasValue($params = array()) {
return !empty($this->_data->get('street')) ||!empty($this->_data->get('zip')) ||($this->_data->get('country'));
}
Вот таким не хитрым образом мы создали довольно простой пользовательский элемент.

Заключение

Пожалуйста, имейте ввиду, что данный учебный материал является лишь примером того, как писать код.

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

Рекомендуемый хостинг для сайта:

Лучшие видеокурсы по созданию сайтов:

Оптимизация сайта

При заказе оптимизации и продвижения сайта - новый сайт или редизайн старого - сделаем бесплатно
(обращайтесь лично ко мне: Игорь Вялов )
Обсуждение SEO-энциклопедии на форуме
Видео-уроки SEO — оптимизация Joomla »

Комментарии (7)

  • JurgenZoller
    JurgenZoller
    22 January 2011 at 17:00 |

    ну, хорошо, а как сделать так, чтобы вновь созданный элемент отображался в библиотеке элементов справа?

  • JurgenZoller
    JurgenZoller
    22 January 2011 at 17:08 |

    спасибо, всё работает)))

    • alex
      alex
      09 April 2011 at 10:05 |

      Ну и как заработало? У меня не отображается. Зачем вообще такие каменты писать?

  • Владимир
    Владимир
    16 February 2011 at 17:15 |

    ошибка в строчке
    return ($this->_data->get('street') . ', ' . ($this->_data->get('zip') . ', ' .($this->_data->get('country');
    явно не хватает скобок закрытия
    return ($this->_data->get('street')) . ', ' . ($this->_data->get('zip')) . ', ' .($this->_data->get('country'));

  • Владимир
    Владимир
    16 February 2011 at 17:23 |

    Ошибка
    "Parse error: syntax error, unexpected ';' in /administrator/components/com_zoo/elements/test/test.php"
    на строчку
    return !empty($this->_data->get('street')) ||!empty($this->_data->get('zip')) ||($this->_data->get('country'));

  • Владимир
    Владимир
    16 February 2011 at 17:56 |

    ошибся с ошибкой, эта правильная
    Can't use method return value in write context in /administrator/components/com_zoo/elements/test/test.php

    • alex
      alex
      09 April 2011 at 09:37 |

      В последнем условии там где 'country' !empty не хватает.

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

Пожалуйста, войдите, чтобы комментировать.

Навигатор: Документация ZOO Разработка Создание пользовательского элемента