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

artemij

  • Осваиваюсь на форуме
  • 18
  • 1 / 0
Собственно вопрос по теме:
Как сделать так, чтобы слово "товар" склонялось в корзине именно на ВМ2?
Хочется, чтобы при количестве товаров больше 5 корзина говорила: "6 товароВ", а не "6 товарА"
Дело в том, что есть куча решений для 1.х ветки, но так как не силен в РНР не смог полноценно адаптировать решение для второй версии Вирта.
Но даже если методом научного перебора вариантов сделать следующее в файле mod_virtuemart_cart.php :
Код
if ($data->totalProduct>1) $data->totalProductTxt = JText::sprintf('COM_VIRTUEMART_CART_X_PRODUCTS', $data->totalProduct);
else if ($data->totalProduct >= 5) $data->totalProductTxt = JText::sprintf('СТРОКА_В_ЯЗЫКОВОМ_ФАЙЛЕ', $data->totalProduct);
else if ($data->totalProduct == 1) $data->totalProductTxt = JText::_('COM_VIRTUEMART_CART_ONE_PRODUCT');
else $data->totalProductTxt = JText::_('COM_VIRTUEMART_EMPTY_CART');

работает половинчасто. После обновления страницы все ОК, но при нажатии на кнопку "купить" ажакс не хочет обновлять текст на нужный.
Сначала грешил на файл com_virtuemart/controllers/cart.php - там тоже есть подобные строки кода. Но изменив их, делу не помогло.
Проблема в ажаксе? Если да, то ткните носом чего можно сделать.
*

T-rain

  • Осваиваюсь на форуме
  • 29
  • 6 / 0
Re: Склонение "товар" в корзине
« Ответ #1 : 24.05.2012, 18:00:06 »
<?
if (IntVal($arResult["NUM_PRODUCTS"])>0)
{
?>
   <a href="<?=$arParams["PATH_TO_BASKET"]?>">
   <? $numprod = intval($arResult["NUM_PRODUCTS"]);
      $dlinastroki = strlen($numprod);
      $lastsymbol = intval ( substr($numprod, $dlinastroki - 1));
   if ($numprod < 20)
       {if ( $numprod == 1) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_1'));}
        if ( $numprod > 1 && $numprod < 5) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_2to4'));}
      if ( $numprod < 21 && $numprod > 4) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_5to20'));}}
   else
      {if ( $lastsymbol == 1) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_1'));}
      if ( $lastsymbol == 0) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_5to20'));}
        if ( $lastsymbol > 1 && $lastsymbol < 5) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_2to4'));}
      if ( $lastsymbol < 11 && $lastsymbol > 4) {echo str_replace('#NUM#', $numprod, GetMessage('YOUR_CART_5to20'));}}
   ?>
    </a>
<?
}
else
{
?>
   <a href="<?=$arParams["PATH_TO_BASKET"]?>"><?echo GetMessage('YOUR_CART_EMPTY')?></a>
<?
}
?>

и
<?
$MESS['YOUR_CART'] = 'Ваша корзина #NUM#';
$MESS['YOUR_CART_1'] = 'В вашей корзине #NUM# товар';
$MESS['YOUR_CART_2to4'] = 'В вашей корзине #NUM# товара';
$MESS['YOUR_CART_5to20'] = 'В вашей корзине #NUM# товаров';
$MESS['YOUR_CART_EMPTY'] = 'Ваша корзина';
?>
Это я со своего сайта на Битриксе выдрал, из 2х файлов. Просто там логика такая )

Надеюсь разберётесь. Окончания работают нормально, только в районе от 105 до 120 могут быть проблемы вроде, но сейчас не помню, пофиксил или нет.
Если время будет, переделаю. Мне кстати и надо будет это сделать в скором времени.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться