0 Пользователей и 1 Гость просматривают эту тему.
  • 17 Ответов
  • 4028 Просмотров
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
Код: php
$field = new SimpleXMLElement( '<field type="text" name="test" label="test"/>' );
$form->setField( $field, 'params' );

а можно и так
Код: php
JForm::addFormPath( __DIR__ . '/fields' );
$form->loadFile( 'add', false );
В папку fields кидаем файл add.xml с таким содержимым
Код: php
<?xml version="1.0" encoding="utf-8"?>
<form>
    <fields name="attribs">
        <fieldset name="basic" label="COM_CONTENT_ATTRIBS_FIELDSET_LABEL">
            <field name="field1" type="text" label="Title:" value=""></field>
        </fieldset>
    </fields>
</form>
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
уже пробовал эти варианты

вроде всё просто: $form->setField($element, $group) но не работает

а без fieldset $form->setField($element) работает
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
а можно больше конкретики что пытаетесь сделать?
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
добавить поле в форму в <fields name="properties">

а в шаблоне вывести:
Код: php
ul class="adminformlist">
<?php foreach ($this->form->getFieldset('properties') as $field) : ?>
<li>
<?php echo $field->label; ?>
<?php echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
это ваш компонент или сторонний? и покажите XML файл
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
компонент мой
вот XML
Код: xml
	<fields name="properties">
<fieldset name="properties">

</fieldset>
</fields>
и я понял почему не работает:
Код: php
$form->setField($element, 'properties')
добавляет не в fieldset, а в fields
а в шаблоне я вывожу fieldset
Код: php
<ul class="adminformlist">
<?php foreach ($this->form->getFieldset('properties') as $field) : ?>
<li>
<?php echo $field->label; ?>
<?php echo $field->input; ?>
</li>
<?php endforeach; ?>
</ul>
поэтому ничего не выводится
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
если компонент ваш то для чего вы добавляете поле?

можно сделать так:
модель
Код: php
	public function getForm( $data = array(), $loadData = true )
{
$xmlData = 'Тут пихаете всю XML-ку в виде строки и при каком то условии можете менять данные';
$form = $this->loadForm( $xmlData, $xmlData, array( 'control' => 'jform', 'load_data' => $loadData ) );
if ( empty( $form ) ) {
return false;
}
return $form;
}
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
если компонент ваш то для чего вы добавляете поле?
поля добавляются на лету так как создаются в админке
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
а ну тогда просто формируйте XML файл в виде строки и кормите как я писал в 9 ответе! я так делаю в своем компоненте конструктора форм
*

Виталик

  • Завсегдатай
  • 1244
  • 130 / 0
да, получилось, пришлось формировать SimpleXMLElement со структурой, аналогичной xml-файлу, а затем выполнить $form->load(SimpleXMLElement)

Код: php
$xmlform = new SimpleXMLElement('<form />');
$xmlfields = $xmlform->addChild('fields');
$xmlfields->addAttribute('name', 'properties');
$xmlfieldset = $xmlfields->addChild('fieldset');
$xmlfieldset->addAttribute('name', 'properties');
$xmlfield = $xmlfieldset->addChild('field');
$xmlfield->addAttribute('name', 'property');
$xmlfield->addAttribute('type', 'text');
$xmlfield->addAttribute('label', 'COM_REALTY_FIELD_PROPERTY_LABEL');
if (!$form->load($xmlform))
{
die('Ошибка');
}
*

Aleks.Denezh

  • Живу я здесь
  • 3406
  • 428 / 4
да, получилось, пришлось формировать SimpleXMLElement со структурой, аналогичной xml-файлу, а затем выполнить $form->load(SimpleXMLElement)
Ну я бы на вашем месте переписал на формирование обычной строкой!
кода будет в разы меньше и быстродействие будет по выше! как по мне клепать c нуля XML через simpleXml это изврат! ладно бы надо было распарсить и добавить элемент!
но так у вас выйдет кода в 10 раз больше )
« Последнее редактирование: 16.04.2013, 03:33:10 от Istaan »
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
поля добавляются на лету так как создаются в админке
Кстати, а что мешает по итогам создания полей в админке сформировать статичный XML-файл для формы и потом уже его грузить стандартными средствами? С другой стороны есть метод getFieldsets, по идее можно получить нужный объект и уже к нему добавить поле.

p.s. Сорри, за некропост.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Поскольку добавляется в одну таблицу и она жестко определена до написания формы к ней.
То я в своем случае сделал так:
Display = none всем элементам кроме первого
на изменение повесил AJAX который получает данные - какое поле зажечь inline и в какую позицию поставить (визуальной)
если поле надо переделать то формирую html-код всего что надо вставить в стандартный код т.е. <label...></label><input>(или select и тд)

Поля все уже определены в XML т.к. ничего другого в таблицу и не вставишь, конечно кроме чего-нибудь вроде массива params с динамическим набором данных, но мне было достаточно этого.
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Спустя 6 лет потребовалась подобная задача. Попробовал, вариант приведенный здесь хорошо.
Но у меня непонимание внутри getForm. В этой функции мне надо получить данные (какие же все-таки поля создавать).

Подскажите как можно внутри getForm получить данные (желательно $item от getItem)?
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Получилось вытащить через
Код
$item_id = $this->state->get('item.id'); //Получили id элемента

Если неправильно подскажите - буду благодарен.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться