Новости Joomla

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1

👩‍💻 Joomla 6 нуждается в вашей помощи с тестированием.Вышел недавно релиз Joomla 6 alpha1. Это релиз, в который включены уже проверенные изменения, но ещё очень многие исправления и улучшения ждут своей очереди. Joomla следит за качеством и безопасностью своего кода и каждое изменение должно быть успешно протестировано как минимум ещё двумя участниками сообщества. Разработка Joomla ведётся на платформе GitHub.Филипп Уолтон (Philip Walton) - один из разработчиков, кто активно вносит свой вклад в ядро Joomla. Он уже несколько месяцев посвящает свои послеполуденные часы пятницы работе с Joomla и предлагает присоединиться к нему. 📆 Пятница, 30 мая 2025, с 15:00 до 17:00 по UTC (Лондон) - с 18:00 до 20:00 по Москве.В чате Google Meet Филипп готов помочь с тестированием тем, кто будет делать это в первый раз. А так же он подготовил список лёгких Pull Request, которые можно протестировать довольно быстро. Чем больше тестов будет проведено сейчас, тем меньше ошибок вылезет потом. На данный момент 148 (уже 147 на момент написания заметки) PR на GitHub Joomla ждут тестирования.👩‍💻 Open to all. All together.Также вам поможет сделать первые шаги это видео.GitHub JoomlaДа, это вечер пятницы. Но тестирование занимает порой минут 15, а доброе дело сделано. Просто убедитесь, что разработчик чего-то не пропустил и всё работает как ожидается.#joomla #joomla6 #community

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

Aleks.Denezh

  • Живу я здесь
  • 3404
  • 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

  • Живу я здесь
  • 3404
  • 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

  • Живу я здесь
  • 3404
  • 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

  • Живу я здесь
  • 3404
  • 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

  • Живу я здесь
  • 3404
  • 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

  • Живу я здесь
  • 3404
  • 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 элемента

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