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

pse1980

  • Захожу иногда
  • 53
  • 3 / 0
Вместо региона в письме приходят цифры:
Например:
Регион: 01

а должно быть

Регион: Агинский округ

Подскажите где ошибка может быть.....

« Последнее редактирование: 07.06.2009, 23:21:43 от beagler »
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Это не ошибка, так настроено.
Тоже хочу исправить этот момент, но где не знаю...
*

Mirsaytov

  • Захожу иногда
  • 57
  • 16 / 0
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
А на русский можно перевести?
*

beagler

  • Moderator
  • 3276
  • 392 / 4
  • https://alorisman.ru/
в файле account.order_details.tpl.php
найти код (строки 120-130)
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbbt->f($field->name);
          break;
          }
и заменит его на
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
         
          case 'state':
$dbstl = new ps_DB();
$q = "SELECT state_name FROM #__{vm}_state WHERE #__{vm}_state.country_id = ";
$q .= "(SELECT country_id FROM #__{vm}_country WHERE #__{vm}_country.country_3_code = '".$dbbt->f('country')."') ";
$q .= "AND #__{vm}_state.state_2_code = '".$dbbt->f('state')."' ";
$dbstl->query($q);
$dbstl->next_record();
echo $dbstl->f( 'state_name' );              
          break;
         
          default:
          echo $dbbt->f($field->name);
          break;
          }
и код (163-168)
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbst->f($field->name);
          break;
          }
замеить на
Код
switch($field->name) {
          case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
         
          case 'state':
$dbstl = new ps_DB();
$q = "SELECT state_name FROM #__{vm}_state WHERE #__{vm}_state.country_id = ";
$q .= "(SELECT country_id FROM #__{vm}_country WHERE #__{vm}_country.country_3_code = '".$dbbt->f('country')."') ";
$q .= "AND #__{vm}_state.state_2_code = '".$dbbt->f('state')."' ";
$dbstl->query($q);
$dbstl->next_record();
echo $dbstl->f( 'state_name' );              
          break;
         
          default:
          echo $dbst->f($field->name);
          break;
          }
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Спасибо, пошел делать ...
*

urodoff

  • Захожу иногда
  • 71
  • 18 / 0
попробовал эту модификацию что-то получилось не так в письме приходит:
Страна:    RUS
Регион:    77
Город:    Москва
Индекс:    111141
Адрес доставки:    Кожевнический переулок дом 134
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Тоже самое происходит.
Выходит хак не верный.
*

urodoff

  • Захожу иногда
  • 71
  • 18 / 0
nтамв англицкой версии много еще чего далее по теме модифицируют только не понятно что для чего....
*

urodoff

  • Захожу иногда
  • 71
  • 18 / 0
есть гуру которые разобрались?
помогите плиззз
*

ageres

  • Захожу иногда
  • 56
  • 0 / 0
попробовал эту модификацию что-то получилось не так в письме приходит:
Страна:    RUS
Регион:    77
Город:    Москва
Индекс:    111141
Адрес доставки:    Кожевнический переулок дом 134
есть гуру которые разобрались?
помогите пожалуйстазз

Я конечно не гуру) но вопрос этот решил, немного иначе
Если посмотреть  Настройки >> Список регионов  то он выводит  Код страны (2):RU

для страны таблица в базе  jos_vm_country
в поле country_2_code там тип char(2-кол-во символов)   я изменил  на varchar(255) и  теперь в админке  можно написать полностью страну

для областей которые выбираются из списка в этой стране  в таблице jos_vm_state
в поле state_2_code там тип char(2-кол-во символов)   я изменил  на varchar(255) и также полностью  написать  область
« Последнее редактирование: 29.10.2010, 19:01:25 от ageres »
*

ageres

  • Захожу иногда
  • 56
  • 0 / 0
Вот только один момент   в оформленном заказе  поле страна пустое, также и на e-mail   админа и покупателя также пусто.

Обнаружил такой момент  что если  в "Управление полями, заполняемыми пользователем"   скрывать поле страны,   то кроме  значение  еще и надпись Страна: изчезает,  т.е. поле страна берется оттуда,  хотя на этапе оформления заказа  Страна выводится т.е. берется  со списка стран там где и область

Может кто-то подскажет как вывести значение страны  в оформленном заказе.  
*

vodka_pivo

  • Захожу иногда
  • 57
  • 5 / 0
  • Ёрш
Чтобы в приходящем письме вместо кода региона было название области, правим:
/comoponents/com_virtuemart/themes/xxx/templates/order_emails/confirmation_email.tpl.php

ищем строки 116-124
Код
	          	case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
          $dbc = $country->get_country_by_code($dbst->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbst->f($field->name);
          break;

и между break; и default:, вставляем этот код:
Код
// hack - state name		          	
case 'state': 
   $dbst1 = new ps_DB();
   $q = "SELECT state_name FROM #__{vm}_state WHERE #__{vm}_state.country_id = ";
   $q .= "(SELECT country_id FROM #__{vm}_country WHERE #__{vm}_country.country_name = '".$dbc->f('country_name')."') ";
   $q .= "AND #__{vm}_state.state_2_code = '".$dbbt->f($field->name)."' ";
   $dbst1->query($q);
   $jglr_state_name=$dbst1->f( 'state_name' );
   echo $jglr_state_name;
   break;
// end hack - state name


далее строки 77-85:
Код
	          	case 'country':
          require_once(CLASSPATH.'ps_country.php');
          $country = new ps_country();
                        $dbc = $country->get_country_by_code($dbbt->f($field->name));
          if( $dbc !== false ) echo $dbc->f('country_name');
          break;
          default:
          echo $dbbt->f($field->name);
          break;
и между break; и default:, вставляем тотже код.
*

Andriyka

  • Осваиваюсь на форуме
  • 10
  • 2 / 0
2 vodka_pivo - респект за решение *DRINK*
*

GTpro

  • Захожу иногда
  • 102
  • 1 / 0
Сделал так же.
Но регион перестал выводиться вовсе.
Страна и регион не отображаются.
VM 1.1.2
*

fsv

  • Moderator
  • 2781
  • 411 / 2
Сделал так же.
Но регион перестал выводиться вовсе.
Страна и регион не отображаются.
VM 1.1.2

http://joomlaforum.ru/index.php/topic,167971.msg906678.html#msg906678
« Последнее редактирование: 11.06.2011, 22:38:18 от fsv »
Веб-разработка: заказ. Только новая разработка.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться