Новости Joomla

👩‍💻 WT CDEK library v.1.3.0 - обновление PHP SDK для Joomla + CDEK.

👩‍💻 WT CDEK library v.1.3.0 - обновление PHP SDK для Joomla + CDEK.

Небольшая нативная PHP Joomla библиотека для работы с API v.2 службы доставки CDEK. Библиотека представляет собой клиент для авторизации в CDEK API по OAuth, работы с некоторыми методами API: получения ряда данных и расчета стоимости доставки. Поддерживается Joomla 4.2.7 и выше.

В пакет входят:
- библиотека Webtolk/Cdekapi
- системный плагин System - WT Cdek для хранения настроек и AJAX-интеграций
- task-плагин Task - Update WT Cdek data для обновления локальных копий справочников CDEK по расписанию
- web asset с официальным JavaScript-виджетом СДЭК

👉 v.1.3.0. Что нового?
- Полный рефакторинг библиотеки. Библиотека переработана в entity-based API с фасадом Cdek и отдельным слоем запросов. Обратная совместимость не нарушена, поэтому версия библиотеки - 1.3.0.
- Добавлена поддержка новых разделов API СДЭК. Добавлена поддержка новых разделов API СДЭК: webhooks, prealert, печатные формы, payment, passport, reverse, intakes и других сущностей.
- Улучшена интеграция с Joomla.
Улучшена интеграция с Joomla: installer script для layouts, новые поля Joomla Form для тарифов и обновлённые js виджета CDEK.
- документация библиотеки. Все методы библиотеки подробно описаны, а так же текст документации собран в отдельной папке в git репозитории и будет опубликован на сайте.

Библиотека эта нужна для разработчиков, создающих свои расширения для интеграции Joomla и курьерской службы CDEK.

Страница расширения
GitHub расширения

@joomlafeed

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

Aleks.Denezh

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

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

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

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

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

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

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