Новости 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 Гость просматривают эту тему.
  • 3 Ответов
  • 2505 Просмотров
*

Bartlebi

  • Захожу иногда
  • 75
  • 1 / 0
Собственно, цель задачи - отслеживать каждый заказ с помощью Яндекс.Метрики
В процессе решения нашел готовы вариант под друпал, и попытался переделать под себя:
Код: php
<?php function form_oplata_init() {
    $session = JFactory::getSession();
    $order_id = $session->get('jshop_end_order_id');
$order = JTable::getInstance('order', 'jshop');
$order->load($order_id);
$items = $order->getAllItems();
$yaParams=array();
 
        $yaParams['order_id']=$order->order_number;
    $yaParams['order_price']=$order->order_total;
        $yaParams['currency']='RUR';
    $yaParams['exchange_rate']=1;
        foreach($items as $item){
        $yaParams['goods'][]=array(
            'id'=>$item->product_id,
        'name'=>$item->product_name,
            'price'=>$item->product_price,
        'quantity'=>$item->product_quantity,
);
    }
   // }
 
    $jsMetrika='var yaParams = '._form_oplata_json_encode($yaParams).';';
    $document->addScript($jsMetrika);
}
function _form_oplata_json_encode($data)
{ //  Перевод в json
        switch ($type = gettype($data)) {
            case 'NULL':
                return 'null';
            case 'boolean':
                return ($data ? 'true' : 'false');
            case 'integer':
            case 'double':
            case 'float':
                return $data;
            case 'string':
                return '"' . addslashes($data). '"';
            case 'object':
                $data = get_object_vars($data);
            case 'array':
                $output_index_count = 0;
                $output_indexed = array();
                $output_associative = array();
                foreach ($data as $key => $value) {
                    $output_indexed[] = _form_oplata_json_encode($value);
                    $output_associative[] = _form_oplata_json_encode($key). ':' . _form_oplata_json_encode($value);
                    if ($output_index_count !== NULL && $output_index_count++ !== $key) {
                        $output_index_count = NULL;
                    }
                }
                if ($output_index_count !== NULL) {
                    return '[' . implode(',', $output_indexed). ']';
                } else {
                    return '{' . implode(',', $output_associative). '}';
                }
            default:
                return ''; // Not supported
        }
}?>
В результате выполнения кода никакие параметры в JavaScript не подставляются.
В друпале это выглядело так:
Код: php
$jsMetrika='var yaParams = '._form_oplata_json_encode($yaParams).';';
drupal_add_js($jsMetrika,'inline');
А как это должно выглядеть в Joomla?
*

turbolamer

  • Захожу иногда
  • 249
  • 12 / 0
Почитайте эту ветку, возможно там есть ответ
http://joomlaforum.ru/index.php/topic,229640.msg1205171.html#msg1205171
*

shadowrun

  • Захожу иногда
  • 78
  • 1 / 0
может я что-то и путаю, но какие цели требуется отслеживать?
переходы в корзину, заказы, отказы - для этого в код вообще лезть ненужно. можно настроить в самих целях в метрике.
единственное что события всякие типа нажатие кнопок - определенных ( их нужно разметить)
*

bolonia

  • Захожу иногда
  • 222
  • 27 / 0
Зачем вам метрика чтобы отслеживать заказ? Он же уже был совершен по идее? Если даже не завершен, то в JoomShopping отображаются все заказы, которые находятся в процессе оформления - смотрите в админке внимательно :)

Если требуется отслеживать нажатие на кнопки, то это делается просто через события типа .on('click') или .click(function()); с помощью jQuery.
Бесплатный модуль обратного звонка / обратной связи для J3: http://joomlaforum.ru/index.php?topic=309065.0
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

WT JoomShopping Favorite - кнопки избранного в категории товаров и карточке тов

Автор sergeytolkachyov

Ответов: 25
Просмотров: 35702
Последний ответ 23.09.2025, 11:22:23
от Alex_gs
Атрибуты полей при оформлении заказа в JoomShopping

Автор goga_pgasovav

Ответов: 1
Просмотров: 622
Последний ответ 12.08.2025, 11:21:29
от kit2m2
Конфликт js шаблонов JoomShaper helix3 J5 с JoomShopping 5

Автор heartlink

Ответов: 6
Просмотров: 1398
Последний ответ 22.07.2025, 12:40:12
от heartlink
Модуль карусели товаров JoomShopping на Swiper.js для Joomla

Автор sergeytolkachyov

Ответов: 2
Просмотров: 2042
Последний ответ 04.07.2025, 10:30:36
от sergeytolkachyov
[Решено] Сбросить счётчик ID товаров JoomShopping

Автор goga_pgasovav

Ответов: 3
Просмотров: 1353
Последний ответ 13.02.2025, 00:11:20
от goga_pgasovav