Новости 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 Ответов
  • 1474 Просмотров
*

neGODnic

  • Захожу иногда
  • 140
  • 4 / 0
Столкнулся с такой проблемой у VM3 не плохо реализована система Costum Fields. но есть пару вопросов.
Все товары выгружаются из 1с с доп. параметрами "своиство" и "характеристика"
Но в VM они заходят как 1 контейнер и стиль им всем назначается общий. А так как эти поля можно указывать почти в любых позициях на сайте, то и стили должны быть для каждого поля свои. А ВИРТ назначает всем одинаковые.
Пример: у меня основное поле имеет значение в CSS style="width:39%" и этот стиль получают все блоки и получается, что где то их режет, где то наоборот больше чем надо и вся верстка сползает.
Как можно реализовать для каждого поля свой стиль? Пока писал, пришла мысль, что может в настройках самого поля можно назначить необходимый класс стиля, но увы не додумали создатели пока такого момента.
Вот код моего customfields.php
Код
<?php
/**
* sublayout products
*
* @package    VirtueMart
* @author Max Milbers
* @link http://www.virtuemart.net
* @copyright Copyright (c) 2014 VirtueMart Team. All rights reserved.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL2, see LICENSE.php
* @version $Id: cart.php 7682 2014-02-26 17:07:20Z Milbo $
*/

defined('_JEXEC') or die('Restricted access');

$product = $viewData['product'];
$position = $viewData['position'];
$customTitle = isset($viewData['customTitle'])? $viewData['customTitle']: false;;
if(isset($viewData['class'])){
    $class = $viewData['class'];
} else {
    $class = 'product-fields';
}

if (!empty($product->customfieldsSorted[$position])) {
    ?>
    <div class="<?php echo $class?>">
        <?php
        if($customTitle and isset($product->customfieldsSorted[$position][0])){
            $field = $product->customfieldsSorted[$position][0]; ?>
        <div class="product-fields-title-wrapper"><span class="product-fields-title"><strong><?php echo vmText::_ ($field->custom_title)?></strong></span>
            <?php if ($field->custom_tip) {
                echo JHtml::tooltip (vmText::_($field->custom_tip), vmText::_ ($field->custom_title), 'tooltip.png');
            } ?>
        </div> <?php
        }
        $custom_title = null;
        foreach ($product->customfieldsSorted[$position] as $field) {
            if ( $field->is_hidden || empty($field->display)) continue; //OSP http://forum.virtuemart.net/index.php?topic=99320.0
            ?><div class="product-field product-field-type-<?php echo $field->field_type ?>">
                <?php if (!$customTitle and $field->custom_title != $custom_title and $field->show_title) { ?>
                   <span class="product-fields-title-wrapper"><span class="product-fields-title"><strong><?php echo vmText::_ ($field->custom_title)?></strong></span> <?php /* text*/?>
                        <?php if ($field->custom_tip) {
                            echo JHtml::tooltip (vmText::_($field->custom_tip), vmText::_ ($field->custom_title), 'tooltip.png');
                        } ?></span>
                <?php }
                
                if (!empty($field->custom_desc)){
                    ?><div class="product-field-desc"><?php echo vmText::_($field->custom_desc)?><div class="product-field-line"></div></div> <?php
                }
if (!empty($field->display)){
                    ?><div class="product-field-display2"><?php echo $field->display ?></div><?php
                }
                ?>
            </div>
        <?php
         //   $custom_title = $field->custom_title;
        } ?>
      <div class="clearfix"></div>
    </div>
<?php
} ?>

Нашел какое-то решение, но не получается с ним разобраться. Помогите с решением.
https://forum.virtuemart.net/index.php?topic=128936.0
« Последнее редактирование: 21.10.2016, 17:08:40 от neGODnic »
*

neGODnic

  • Захожу иногда
  • 140
  • 4 / 0
Пока ждал ответа сам разобрался. Так как в CSS не очень силен, то пришлось покопаться в уроках CSS и найти элементарное решении:

Так как класс у меня один, но он входит в другие классы то это делается элементарно:
.product-field-type-Y .product-field-display { display:inline-block; float:right; /*padding-right:15px;*/ vertical-align:bottom; width:39%;}
.product-field-type-S .product-field-display { display:inline-block; float:left; /*padding-right:15px;*/ vertical-align:bottom; width:100%;}

Пример из учебника:
#first {color: red;} /* обращаемся к id с именем first */
.second {color: blue;} /* обращаемся к классу с именем second */
#first .second {color: orange;} /* обращаемся к классу с именем second, ТОЛЬКО если он находится ВНУТРИ тега с идентификатором first */
.first .third {color: grey;} /* обращаемся к классу с именем third, ТОЛЬКО если он находится ВНУТРИ тега с классом first */ - наш вариант!

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