Новости Joomla

Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list

👩‍💻 Совет по Joomla: несколько значений по умолчанию в XML-формах для стандартных полей типа list.При работе над плагином возникла необходимость указать стандартный набор из нескольких элементов стандартного поля списка. И хотелось указать их в стандартном же атрибуте default для полей. Когда это нужно?Когда Ваши пользователи устанавливают плагин и НЕ заходят в настройки - в коде вы можете использовать значения по умолчанию с помощью класса Registry (писал об этом ранее) и всегда быть уверенным, что хоть какие-то жизненно необходимые параметры к вам придут всегда. 🧐 Но как сделать то же самое для интерфейса админки?Пользователя нужно направлять, предлагать очевидный работоспособный сценарий для начала, а дальше он уже сам разберется. Когда человек заходит в параметры свежеустановленного плагина в Form ещё нет данных и параметры по умолчанию выставляются из атрибутов default в xml-полях.
<field name="showdesc" type="radio"                       label="PLG_CFI_PARAM_SHOWDESC"                       class="btn-group btn-group-yesno"                       default="1">                    <option value="0">JNO</option>                    <option value="1">JYES</option>                </field>
Здесь по умолчанию будет включено "Да". И если пользователь не переключит параметр, то при сохранении мы ожидаемо получим "да" в params плагина.Для поля списков type=&quot;list&quot; можно указать значение по умолчанию и многие знают, что его можно указать только одно.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default="id"                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
Но у нас поле с множественным выбором (атрибут multiple) и хотелось бы указать несколько значений по умолчанию...Оказывается, так можно сделать. Для этого в атрибуте default нужно указать json с нужными параметрами в виде {int}key : {string} value.Например, default='{"0":"id","1":"title"}'.
<field type="list"                       name="article_fields"                       label="article_fields"                       description="article_fields_desc"                       layout="joomla.form.field.list-fancy-select"                       multiple="true"                       default='{"0":"id","1":"title"}'                >                    <option value="id">id</option>                    <option value="title">title</option>                    <option value="alias">alias</option>                    <option value="introtext">introtext</option>                    <option value="fulltext">fulltext</option>                    <option value="state">state</option></field>
⚠️ Обратите внимание на кавычки! Поскольку json_decode не понимает одинарные кавычки собственно json нужно писать с двойными, а значение для атрибута default писать в одинарные.🙏 За подсказанное решение огромное спасибо участникам нашего сообщества - разработчикам Дмитрию Васюкову (@fictionlabs) и Игорю Бердичевскому (@septdir).@joomlafeed#joomla #разработка #webdev #development

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

Modis

  • Захожу иногда
  • 153
  • 0 / 0
Всем привет. На сайте используется магазин. Продажа ключей к программам. Изначально было так:
Есть товар. У товара есть два атрибута: Имя функции и Версия AutoCAD. И есть один свободный атрибут: Регистрационный ключ.
При покупке должен сформироваться ответный ключ, из строки "ВерсияАвтокад+РегКлюч+ИмяФункции" используя md5. Лично я не силен в php. У меня вся эта реализация есть на C#, поэтому я нанимал фрилансера и он мне реализовал мою задачу. Я поискал по файлам магазина и нашел реализацию в файле /com_jshopping/tables/order.php:
Код: php
function getAllItems(){
    if (!isset($this->items)){
        $jshopConfig = JSFactory::getConfig();
        $query = "SELECT OI.* FROM `#__jshopping_order_item` as OI WHERE OI.order_id = '".$this->_db->escape($this->order_id)."'";
        $this->_db->setQuery($query);
        $this->items = $this->_db->loadObjectList();

        $query = "SELECT * FROM `#__jshopping_attr_values`";
        $this->_db->setQuery($query);
        $attributes = $this->_db->loadObjectList();

        foreach($this->items as $k=>$v){
            $this->items[$k]->_qty_unit = '';
            $this->items[$k]->delivery_time = '';
            $depend_attr = unserialize($this->items[$k]->attributes);

            foreach ($attributes as $key => $val) {
                if (array_key_exists($val->attr_id, $depend_attr) && in_array($val->value_id, $depend_attr)) {
                    $this->items[$k]->attributes_values[$val->attr_id] = $val->{'name_ru-RU'};
                }
            }
            $key = unserialize($this->items[$k]->freeattributes);
            $key = $key[1];

            $this->items[$k]->product_hash = md5(
                $this->items[$k]->attributes_values[1] .
                $key .
                $this->items[$k]->attributes_values[2]
            );
        }

        if ($jshopConfig->display_delivery_time_for_product_in_order_mail){
            $deliverytimes = JSFactory::getAllDeliveryTime();
            foreach($this->items as $k=>$v){
                if (isset($deliverytimes[$v->delivery_times_id])) {
                    $this->items[$k]->delivery_time = $deliverytimes[$v->delivery_times_id];
                }
            }
        }
    }
Теперь у меня случились важные изменения на сайте и появился еще один атрибут - Версия Revit. Т.е. у каждого товара повторяются атрибуты Версия функции, Имя функции и Рег Ключ и на выбор один атрибут - либо Версия Автокада либо версия Ревита.
По логике я понимаю, что в случае товара для ревита генерация ответного ключа должна выглядеть так:
Код: php
$this->items[$k]->product_hash = md5(
    $this->items[$k]->attributes_values[3] .
    $key .
    $this->items[$k]->attributes_values[2]
);

Осталась одна проблема - сделать условный оператор if. Т.е. если attributes_values[1] == null (по типу C# пишу )) ), то использовать attributes_values[3]. К сожалению, в php я вообще не шарю, поэтому прошу помощи форумчан
*

Modis

  • Захожу иногда
  • 153
  • 0 / 0
В общем решил пойти методом банальной эрудиции и сделал так:
Код: php
if($this->items[$k]->attributes_values[3] != ''){
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[3] .
$key .
$this->items[$k]->attributes_values[2]
);
}else {
$this->items[$k]->product_hash = md5(
$this->items[$k]->attributes_values[1] .
$key .
$this->items[$k]->attributes_values[2]
);
}
И вроде даже работает -)))
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Код товара - автоматическая генерация.

Автор AndreyUA

Ответов: 93
Просмотров: 15006
Последний ответ 17.03.2023, 11:28:47
от geral
Генерация алиасов в Unicode

Автор misterfalse

Ответов: 3
Просмотров: 1331
Последний ответ 15.07.2015, 19:00:11
от dmitry_stas