RSS   Twitter   Copiny   Copiny
Нашел ошибку? 

Выдели фрагмент текста с ошибкой или неточностью и нажми Ctrl+Enter!

Создание своего типа поля

Создание типа

Бывают ситуации, когда стандартные типы полей для формы не подходят. В Joomla можно создавать свои типы параметров в расширениях.

Основной код для создания типа будет, примерно, такой:

<?php
// Защита от прямого доступа к файлу
defined('_JEXEC') or die('Restricted access');
 
// Подключение требуемых файлов
jimport('joomla.form.formfield');
/**
 * Создаем класс. Fieldname - имя типа
 */
class JFormFieldFieldname extends JFormField
{
    /**
     * @var $type    Имя типа
     */
    protected $type = 'Fieldname';
    /**
     * Метод, определяющий что будет выводить параметр
     *
     * @return    Результат вывода типа
     */
    protected function getInput()
    {
        $html = '';
 
        // ...
        // Какой-то код, в котором определяется что нужно выводить
        // ...
 
        return $html;
    }
}

Получение атрибутов

Как видно из кода выше в данном случае используется родительский класс JFormField, для получения атрибутов достаточно взять родительский объект $element:

    protected function getInput()
    {
        // Получение атрибута some-attr
        $this->element['some-attr']);
        // ...

Получение потомков

Если предполагается использовать сложный тип, состоящий из нескольких элементов, например:

<field name="some-name" type="fieldname">
   <some-action value="1">One</some-action>
   <some-action value="2">Two</some-action>
</field>

Общий код для получения потомков будет примерно такой:

protected function getInput()
{
    foreach ($this->element->children() as $action) {
        // Берем только нужные элементы, в данном случае some-action
        if ($action->getName() != 'some-action') {
            continue;
        }
        // Здесь будут значения value
        $action['value'];
        // Здесь будут значения содержащиеся между тегов some-action
        $action;
        //...
}

Расширение или изменение стандартных типов

Бывают ситуации, когда нужно дополнить или изменить стандартный тип, используемый в Joomla. Для этого не стоит заново переписывать нужный тип, можно просто его расширить. Допустим, нужно изменить стандартный тип list, это будет выглядеть так:

<?php
// Защита от прямого доступа к файлу
defined('_JEXEC') or die('(@)|(@)');
 
// Подключение требуемых файлов
jimport('joomla.form.formfield');
jimport('joomla.form.helper');
JFormHelper::loadFieldClass('list');
 
/**
 * Создаем класс. Fieldname - имя типа
 */
class JFormFieldFieldname extends JFormFieldList
{
    /**
     * @var $type    Имя типа
     */
    protected $type = 'Fieldname';
    /**
     * Метод, заменяющий родительский JFormFieldList::getOptions()
     *
     * @return    $options;
     */
    protected function getOptions()
    {
        // ...
        // Какой-то код, в котором определяется что нужно выводить
        // ...
        return $options;
    }
}

Подключение в Компоненте

Допустим, в модели компонента подключается форма:

-com_component
--models
----forms
-----some-form.xml
----some-model.php

И в форме (some-form.xml) нужно добавить свой тип для поля. Для этого достаточно создать файл /com_component/models/fields/fieldname.php, где fieldname — это имя нужного типа.
После того как данный файл будет создан, можно добавлять этот тип в форму (/com_component/models/forms/some-form.xml)

...
<field name="some_name" type="fieldname"  />
...

Подключение в Модуле или Плагине

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

Допустим, в модуле есть группа параметров:

...
<fieldset name="Some-Name">
    ...
    <field name="name1" type="text" />
    <field name="name2" type="fieldname" />
    ...
</fieldset>
...

Чтобы определить тип fieldname, нужно указать путь в fieldset, где искать данный тип. И Joomla автоматически найдет данный файл, если такой будет существовать.

... 

<fieldset name="Some-Name" ad...
    ...
    <fieldset name="Some-Name" addfieldpath="/administrator/components/com_component/models/fields">
        ...
        <field name="name1" type="text" />
        <field name="name2" type="fieldname" />
        ...
    </fieldset>
...

Смотрите также:
Комментарии (4) Добавить комментарий
  • Galen
    Galen
    05 Февраля 2017, 22:09
     ↑  0  ↓     ответ

    I have been surfing online more than three hours today, yet I never

    found any interesting article like yours. It's pretty worth enough for me.

    In my view, if all webmasters and bloggers made good content as you did, the internet will be a lot more useful than ever before.

  • ??????????????
    ??????????????
    13 Февраля 2017, 14:30
     ↑  0  ↓     ответ

    Right away I am going to do my breakfast, afterward having

    my breakfast coming again to read additional news.

  • med-helpforme.net reviews
    med-helpforme.net reviews
    28 Февраля 2017, 15:59
     ↑  0  ↓     ответ

    Thanks for ones marvelous posting! I really enjoyed reading it,

    you may be a great author. I will ensure that I bookmark your blog and

    will often come back from now on. I want to encourage one to continue your

    great job, have a nice weekend!

  • 4rx
    4rx
    07 Марта 2017, 07:07
     ↑  0  ↓     ответ

    fantastic points altogether, you simply gained a new reader.

    What might you recommend in regards to your post that you simply made a few days ago?

    Any certain? ow.ly/VyN2309xZRX

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




* обязательно для заполнения

1 введенный почтовый адрес используется только для обратной связи при ответах в комментариях и сервиса gravatar.com
.