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

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #30 : 19.08.2014, 11:22:39 »
Создал параметры у категорий и еще пару общих настроек. Для каждой в соответствующей таблице БД создал столбцы. Сохраняет, все хорошо.
Но в параметрах у категории почему-то не проходят данные POST.
то есть, пишу
Код
$post = JRequest::get('POST');
$category->catgroup_1 = $post['catgroup_1'];
не работает, для проверки писал $category->catgroup_1 = "Текст"; - сохраняет адекватно.
почему в POST ничего нет - понять не могу...
у формы <input type="text" name="catgroup_1" value="" > вроде все тоже правильно.

НО вот проследил такое: если вручную ввести что-то в value типа <input type="text" name="catgroup_1" value="Буквы" >, то сохраняется "Буквы". а если после вывода формы еще что-то дописать, изменить содержимое поля, то сохранится все равно "Буквы". Почему так? никак не пойму почему не меняется...

и по поводу взятия данных из JSFactory::getAllProductExtraField() тоже вопрос остался...
вручную забивая extra_fields обнаружил, что почему-то не сортируется. тип поля в БД varchar (100). Как только перевел в INT стало сортироваться... Почему?? Артикл varchar(32) сортируется же...
« Последнее редактирование: 19.08.2014, 13:28:12 от ShutTap »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменные JoomShopping
« Ответ #31 : 19.08.2014, 13:02:21 »
почему в POST ничего нет - понять не могу...
и по поводу взятия данных из JSFactory::getAllProductExtraField() тоже вопрос остался...
Может быть, вы сначала прочитаете документацию PHP и Joomla? Не всю, а хотя бы то, что касается ваших вопросов. А так получается, что вас нужно азам учить. У кого есть на это время?
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #32 : 19.08.2014, 13:43:55 »
читал уже, что мог - сделал... на форум не обращался бы...
хотя бы более точное направление, куда копать, скажите?
про post и JSFactory читал, но примеров похожий на мой не нашел...
« Последнее редактирование: 19.08.2014, 13:50:55 от ShutTap »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменные JoomShopping
« Ответ #33 : 19.08.2014, 14:03:45 »
читал уже,
Значит, плохо читали, раз хотели получить $_POST таким образом

По поводу getAllProductExtraField(), смотрите структуру выходного значения. Там объекты внутри массива. И получить нужно через переменную.
« Последнее редактирование: 19.08.2014, 18:13:38 от robert »
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #34 : 19.08.2014, 15:35:09 »

НО вот проследил такое: если вручную ввести что-то в value типа <input type="text" name="catgroup_1" value="Буквы" >, то сохраняется "Буквы". а если после вывода формы еще что-то дописать, изменить содержимое поля, то сохранится все равно "Буквы". Почему так? никак не пойму почему не меняется...

то есть передается post все-таки, раз value передается, так?? не обновленное только почему-то?

в других разделах, например, стандартном файле вывода категорий, print_r(getAllProductExtraField()); выводит все элементы, массив и обьекты. А в config_default.php выдает ошибку БД:
Код
1054 - Unknown column 'F.name_' in 'field list' SQL=SELECT F.id, F.`name_` as name, F.`description_` as description, F.allcats, F.type, F.cats, F.ordering, F.`group`, G.`name_` as groupname, multilist FROM `jona_jshopping_products_extra_fields` as F left join `jona_jshopping_products_extra_field_groups` as G on G.id=F.group order by G.ordering, F.ordering
Выводить элементы нашел только как циклом...
« Последнее редактирование: 19.08.2014, 17:02:39 от ShutTap »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменные JoomShopping
« Ответ #35 : 19.08.2014, 18:09:26 »
Значит, плохо читали, раз хотели получить $_POST таким образом.
Беру свои слова обратно. Сам ошибся.
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #36 : 20.08.2014, 08:27:20 »
:) но в чем же дело... какие файлы участвуют в обработке редактирования каталога? я нашел только
/administrator/components/com_jshopping/controllers/categories.php функция "save"
думал и на неправильное имя, и на неправильные условия какие-то... но ведь вручную прописанное в свойствах инпута value сохраняется... то есть тут ошибки нет... %)??

по-поводу JSFactory::getAllProductExtraField();
работает в любом /template
Код
$extra=JSFactory::getAllProductExtraField();
print($extra[1]->name);
но в config_default.php все равно выдает ошибку БД. какие-то параметры не те передаются, или чего-от не хватает?

и почему сортировка работает только если extra_field_ID в БД INT? хотя по другим полям сортировка работает и с VARCHAR ??
« Последнее редактирование: 20.08.2014, 08:39:42 от ShutTap »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменные JoomShopping
« Ответ #37 : 20.08.2014, 08:39:06 »
Из ваших слов непонятно, что хотите сделать. Объясните на пальцах: я хочу такого, правил такой файл, создал такую форму, вот код, вот файл...
Не будь паразитом, сделай что-нибудь самостоятельно!
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #38 : 20.08.2014, 08:51:21 »
Извините...)

1. Есть раздел стандартный "каталоги", при редактировании которых внутри есть поля имя, краткое и полное описание, мета. Я создал еще несколько полей (3 поля). Параметр 1, 2 и 3 (на скриншоте в посте ранее). Вот значения, внесенные в эти поля не сохраняются (которые пользователем вводятся), а сохраняются те значения, которые были прописаны в значении value (input type="text" name="parametr_1" value="Буквы"> Сохраняются "Буквы", чтобы пользователь не вводил.).
в файле /administrator/components/com_jshopping/controllers/categories.php в функции save пробовал писать $category->parametr_1 = $post['parametr_1']; , хотя и без этого, значения, прописанные в value, сохраняются... то есть, я пришел к выводу, что функцию сохранения, по крайней мере эту, изменять не надо...

2. Есть стандартная сортировка по материалам в каталоге. Поля, по которым происходит сортировка, редактируются в /components/com_jshopping/lib/default_config.php . Хочется, чтобы добавлялись автоматически поля extra_field и сортировка была возможна по ним тоже.
код
Код
$extra=JSFactory::getAllProductExtraField();
print($extra[1]->name);
, не работает в ЭТОМ файле, выдает ошибку БД (указана постом ранее). Хотя сама по себе работает точно. Что-то ей не хватает, видимо... чего?

и почему-то сортировка работает только если "extra_field_ID" в БД INT , хотя по другим полям сортировка работает и с VARCHAR ??
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #39 : 20.08.2014, 09:50:13 »
1. В таблице "каталогов" добавили новые поля? Например parametr_1 с типом Varchar (255)?
2. Не хватает подключения файла языков. Попробуйте заинклудить файл
Код: php
include(JPATH_SITE."/lib/multilangfield.php");
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #40 : 20.08.2014, 10:00:08 »
В таблице БД? Да
Заинклудил, не помогло..
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #41 : 20.08.2014, 10:41:17 »
1. После
Код: php
$meta_description="meta_description_".$lang->language;
Добавить
Код: php
$parameter="parameter_".$lang->language;
Ну и в конце таблицы после строки с meta_keyword добавить строку с новым параметром
Код: php
       <tr>
         <td  class="key">
           <?php echo _JSHOP_PARAMETER;?>
         </td>
         <td>
           <input type="text" class="inputbox" size="160" name="<?php print $parameter?>" value="<?php print $row->$parameter;?>" />
         </td>
       </tr>
Другими словами, Вы создавали поле в цикле языков и в POST передавалось 2 значения с одинаковым названием (русское и английское) а так как заполнялось только русское, то английское было пустое, а как говориться "Кто последний тот и папа" :)
2.
Код: php
$lang = JFactory::getLanguage();
$config->cur_lang = $lang->getTag();
$extra = JSFactory::getAllProductExtraField();
print($extra[1]->name);
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #42 : 20.08.2014, 11:42:14 »
Дааа, спасибо)
1ый пункт полностью решен, большое спасибо)
2ой тоже, все норм добавляется в список и сортируется, но только если INT, а если VARCHAR нет... в таблице БД поля extra_field_ID создаются автоматически, VARCHAR...
*

dmitry_stas

  • Легенда
  • 13151
  • 1234 / 8
Re: Переменные JoomShopping
« Ответ #43 : 20.08.2014, 12:20:13 »
нет разницы, какой тип поля. есть разница какой тип характеристики. характеристика - текст?

ну и снова так сказать к нашим баранам... конечно, с вашей стороны сделан огромный шаг :) я думал мы будем продолжать развивать экстрасенсорные способности, а вы все испортили... вот не даете попрактиковаться :) но и тем не менее, если бы понимать, как сортируется, возможно было бы проще ответить на вопрос, почему не сортируется, как вам кажется? :)
Тут дарят бакс просто за регистрацию! Успей получить!
Все советы на форуме раздаю бесплатно, то есть даром. Индивидуально бесплатно консультирую только по вопросам стоимости индивидуальных консультаций
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #44 : 20.08.2014, 12:23:59 »
Выложите полный код как Вы добавляете поля в файле components\com_jshopping\lib\default_config.php
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #45 : 20.08.2014, 12:33:45 »
ну и снова так сказать к нашим баранам... конечно, с вашей стороны сделан огромный шаг :) я думал мы будем продолжать развивать экстрасенсорные способности, а вы все испортили... вот не даете попрактиковаться :) но и тем не менее, если бы понимать, как сортируется, возможно было бы проще ответить на вопрос, почему не сортируется, как вам кажется? :)
Спасибо))) Просто я же тоже не знаю, что вам нужно показать... вот Linfuby сказал, выложи - выкладываю:
Код

$extra=JSFactory::getAllProductExtraField();

$fields = array (0 => 'name', 1 => 'product_ean');
$names = array (0 => _JSHOP_SORT_ALPH, 1 =>_JSHOP_EAN);

foreach ($extra as $key => $extra_field)
{
$fields[] = 'extra_field_'.$key;
$names[] = $extra_field->name;
}

$config->sorting_products_field_select = $fields;
$config->sorting_products_name_select = $names;

$config->sorting_products_field_s_select = $fields;
$config->sorting_products_name_s_select = $names;


передается как и в артикле текст, цифробуквенный. Потому про него и писал, что он сортируется, а тут нет... вроде как схожи (на мой взгляд)

(если делать INT с текущим кодом все сортируется)

в настройках характеристик - текст
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #46 : 20.08.2014, 12:44:32 »
С Вашим кодом попробовал на родных Демо-данных. Все сортируется как надо. Именно когда характеристика является текстом.
По запросу видно следующее: ORDER BY extra_field_2 DESC
Если же характеристика будет списком, то сортировка более чем точно работать не будет так как в поле extra_field_2 будет записываться не текст, и идентификаторы характеристик и сортировка соответственно пойдет уже по идентификаторам а не по их значениям.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #47 : 20.08.2014, 12:48:37 »
Странно... точно текст, могу даже отскриншотить))
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #48 : 20.08.2014, 12:58:22 »
А сайт я так понимаю локальный?
Отскриншотить лучше таблицу товаров с полями extra_fields_
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #49 : 20.08.2014, 13:10:25 »
вот
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #50 : 20.08.2014, 13:33:45 »
То что поля имеют varchar это понятно, а какие там значения?
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #51 : 20.08.2014, 14:04:26 »
числа и буквы. где-то только числа, где-то только буквы.
допустим, пример для одного из полей, несколько товаров
7
7a
9
9a
9b

в одном поле только цифры.
то есть, заранее не знаю, что там будет, тест, цифры, или и то и то
« Последнее редактирование: 20.08.2014, 14:13:38 от ShutTap »
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #52 : 20.08.2014, 14:15:07 »
Ну что же, тогда получается у Вас где-то проблема, так как по таким данным у меня все корректно сортируется.
Чтобы увидеть полностью запрос, зайдите в файл components\com_jshopping\tables\category.php
и на 163 строке после формирования запроса выведите $query и посмотрите какой у Вас запрос. Потом этот запрос введите в phpMyAdmin и проверьте корректно ли там сортируется.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #53 : 20.08.2014, 14:29:41 »
в phpMyAdmin тоже не сортируется...
сортировал по трем полям, специально разные сделал, в одном чисто текст, в другом и текст и цифры, в другом только цифры. не сортирует...
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #54 : 20.08.2014, 14:39:52 »
Запрос в студию
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #55 : 20.08.2014, 15:19:13 »
(в #__jshopping_products на префикс таблицы заменяю)
Код
SELECT prod.product_id, pr_cat.category_id, prod.`name_ru-RU` as name, prod.`short_description_ru-RU` as short_description, prod.product_ean, prod.image, prod.product_price, prod.currency_id, prod.product_tax_id as tax_id, prod.product_old_price, prod.product_weight, prod.average_rating, prod.reviews_count, prod.hits, prod.weight_volume_units, prod.basic_price_unit_id, prod.label_id, prod.product_manufacturer_id, prod.min_price, prod.product_quantity, prod.different_prices, prod.`extra_field_1` , prod.`extra_field_2` , prod.`extra_field_3` FROM `#__jshopping_products` AS prod LEFT JOIN `#__jshopping_products_to_categories` AS pr_cat USING (product_id) WHERE pr_cat.category_id = '1' AND prod.product_publish = '1' AND prod.access IN (1,1,2,3,6) ORDER BY extra_field_2 ASC
*

Linfuby

  • Завсегдатай
  • 1242
  • 176 / 0
  • Всё просто...
Re: Переменные JoomShopping
« Ответ #56 : 20.08.2014, 15:28:18 »
С запросом всё ок. Значит проблема в данных. Как видите у меня всё Ок.
Больше помочь ничем не смогу без доступа к сайту.
Немного воображения и логики, и любая проблема становится решенной.
Кривые решения - дают кривой результат!
Решения для JoomShopping
Благодарности и поддержка принимаются по след. реквизитам:
Яндекс.Деньги - 41001751720054
*

ShutTap

  • Захожу иногда
  • 131
  • 0 / 0
Re: Переменные JoomShopping
« Ответ #57 : 20.08.2014, 15:46:47 »
Хм... спасибо, буду разбираться


upd
понял...
он сравнивает посимвольно чтоли?

то есть, отсортировывает так:
1
11
17
1b
2
23
28
21g
3
36
32a
39
...

как сделать, чтобы цифробуквы сортировал так, а только цифры - нормально, как int? такое вообще возможно?)

1
1b
2
3
11
17
17f
21g
23
28
32a
36
39
« Последнее редактирование: 20.08.2014, 16:05:39 от ShutTap »
*

robert

  • Живу я здесь
  • 4974
  • 457 / 20
Re: Переменные JoomShopping
« Ответ #58 : 20.08.2014, 16:23:25 »
Код
ORDER BY extra_field_2*1
Не будь паразитом, сделай что-нибудь самостоятельно!
*

Тренд

  • Захожу иногда
  • 59
  • 6 / 0
Re: Переменные JoomShopping
« Ответ #59 : 20.08.2014, 16:27:05 »
как сделать, чтобы цифробуквы сортировал так, а только цифры - нормально, как int? такое вообще возможно?)
Я бы поробовал сначала одну вещь - прибавить к полю 0.
SELECT ... prod.`extra_field_2`+0 as fieldsort , ... FROM ... ORDER BY fieldsort  ASC
или умножить на 1
Если не поможет, то можно поиграться с CAST
ORDER BY cast(num AS signed)
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

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

Автор sergeytolkachyov

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

Автор goga_pgasovav

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

Автор heartlink

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

Автор sergeytolkachyov

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

Автор goga_pgasovav

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