Новости Joomla

Свои типы полей в Joomla.

Свои типы полей в Joomla.Это большая тема, о которой можно говорить очень много

Это большая тема, о которой можно говорить очень много. Самое главное, что возможности применения ограничиваются только вашей больной фантазией. Вы строите интерфейс своего модуля или плагина и вам нужно подтянуть данные из сторонней системы (список чего-нибудь по какому-нибудь API), чтобы сохранить выбранный id в Joomla. Или сделать какую-то проверку и в зависимости от неё показать то или иное сообщение пользователю. Для этого подойдут свои пользовательские типы полей. Интерфейс Joomla по большей части описан в XML-файлах. У каждого из них свои параметры. Некоторые не описаны в документации (manual.joomla.org), поэтому самым любопытным будет полезно заглянуть в собственно файлы фреймворка по пути

libraries/src/Form/FormField.php, а так же в
libraries/src/Form/Fields. У каждого класса поля перечислены его специфические свойства, которые можно описывать в XML. А в своём типе поля вы можете устанавливать эти значения программно. В моём модуле WT Quick links под капотом происходят изменения. Теперь для работы (в админке) ему нужен вспомогательный плагин. А в самом модуле нам бы проверить, а не выключен ли он? В Joomla есть тип поля Note - заметка. Его можно использовать для вывода примечаний.

<field type="note" name="your_note_for_user" label="Заголовок примечания" title="Альтернативный способ для заголовка" description="Текст примечания" class="col-12 alert alert-info" heading="h1" close="true" />

heading - указывать уровень заголовка.
close - позволяет закрыть это примечание. В классе поля
libraries/src/Form/Field/NoteField.php описана логика вывода. И в принципе оно нам подходит для нашей задачи. Но оно будет выводить сообщение всегда, а нам нужно только тогда, когда плагин отключён. Поэтому берём и создаём свой класс поля, который мы унаследуем от
NoteField. Это значит, что у нас в руках будет весь инструментарий стандартного поля
Note + то, что мы сами добавим. В XML-манифест добавляем наше поле

<field type="systempluginstatus" name="systempluginstatus" addfieldprefix="Joomla\Module\Wtquicklinks\Site\Fields"/>

-

type - имя файла и класса,-
addfieldprefix - указываем namespace к нашему классу, может быть любой нам нужный-
name - нельзя полю без имени...Это означает, что Joomla будет использовать класс поля из файла
modules/mod_wt_quick_links/src/Fields/SystempluginstatusField.php.А в классе поля будет написано следующее:

<?php // namespace для атрибута addfieldprefix namespace Joomla\Module\Wtquicklinks\Site\Fields; // нельзя напрямую обращаться к этому файлу defined('_JEXEC') or die; // подключаем родительский класс для переопределения use Joomla\CMS\Form\Field\NoteField; use Joomla\CMS\Language\Text; use Joomla\CMS\Plugin\PluginHelper; // имя класса и имя файла точь-в-точь class SystempluginstatusField extends NoteField { protected $type = 'Systempluginstatus'; protected function getLabel() { // если плагин не включён if(PluginHelper::isEnabled('system','wtquicklinks')) { // меняем свойства родительского класса $this->class = 'alert alert-danger w-100'; $this->element['label'] = '⚠️ А-а-а-а!'; $this->element['description'] = 'Плагин не включён!!'; // и просто рендерим его с нашими свойствами return parent::getLabel(); } // А иначе всё хорошо, скрываем поле из виду. $this->parentclass = 'd-none'; return ''; } }

Просто и удобно. И людям приятно, что о них позаботились и рассказали почему что-то не работает. @webtolkru#joomla #php #webdev #разработка

0 Пользователей и 1 Гость просматривают эту тему.
  • 104 Ответов
  • 52235 Просмотров
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
если указать category_id то ограничивает категорией
*

Xook

  • Захожу иногда
  • 77
  • 1 / 0
если указать category_id то ограничивает категорией
подскажите как это сделать? в php мало понимаю
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Народ, а где врубить "расширенный поиск" просмотрел все настройки VirtueMart 1.1.3
Копать отсюда и до обеда
*

meow

  • Новичок
  • 6
  • 0 / 0
Когда будет готов модуль?) Очень нужен! спасибо.
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Вы повторяетесь  ;) ветку я всю прочитал. Хотелось услышать что-то вроде

Не тормози зайди Менеджер модулей->Создать->VirtueMart Module и будет тебе счастье!
2 часа просидел в настройках VM (Кто смеёттся? ану не смееятся !!!  ^-^) добрался до virtuemart.cfg.php
 ;D

После разбора shop.browse.php, browse_orderbyform.tpl.php, browse_orderbyfields.tpl.php,shop_browse_queries.php
пришло осознание что за один день вряд-ли модифицирую стандартный фильтр и моцк на этой тоскливой ноте
напрочь вырубился.

Еще вопросик (Конечно если это не страшная тайна  ;)) У Вас на сайте http://www.aloris.ru (Кстати сайт мне понравился просто и со вкусом.) есть ссылочки сбоку
до 5000 руб.
от 5000 до 10000
от 10000 до 20000
свыше 20000 руб.
Ваяли все теми же типами или еще как -то?
Копать отсюда и до обеда
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
подскажите как это сделать? в php мало понимаю
В том месте где ты копаешь не знаю. В модулях делал.
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Спасибо за ответы  *DRINK*
Копать отсюда и до обеда
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Продолжаем мучать расщиренный поиск. Значит Расширенный поиск работает замечательно. Даже если товару указано несколько параметров. Спасибо этому форуму все настроил !!!  *DRINK*
Но нет предела совершенству и лени юзеров. Лень юзеру жать непонятную кнопку ctrl и счелкать по мультиселекту желают чекбоксы...  :o

Ладно. Чекбоксы я создал. Нашел файл shop.parametr_search_form.php в районе 296 строки впаял такой код
Код
foreach($fields as $field) {
echo " <input type=\"checkbox\" name=\"$item_name\" value=\"$field\"".(($selected_value[$field]==1) ? " cheked>" : ">").$field."<BR>"; /* Чекбоксы */
};
Получил чекбоксы и мультиселекты  ^-^ красота....
Но как впаять отмеченные чекбоксы в $get_item_value ?
Когда <select> он сам по себе массив... а как набор чекбоксов впачть в массив ? че-то я в синий экран упал в этом месте.
Наставте на путь истинный кто сталкивался?
Копать отсюда и до обеда
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Совсем забыл если отмечать чекбокс и жать поиск возникают 2 предупреждения:
Warning: Invalid argument supplied for foreach() in /var/www/administrator/components/com_virtuemart/html/shop_browse_queries.php on line 233
в строке 233 такое
Код
233 foreach($get_item_value as $value) {
234 array_push($comp,"`$parameter_name` LIKE '%$value%'");
235 }
236 $comp = "(" . join($get_item_value_comp == "find_in_set_all"?" AND ":" OR ", $comp) . ")";
237 $parameter_name = "";
238 $get_item_value = "";
239 break;
и такое
Warning: Invalid argument supplied for foreach() in /var/www/administrator/components/com_virtuemart/classes/ps_product_type.php on line 459
Код
459 foreach($get_item_value as $value) {
460 $html .= "<input type=\"hidden\" id=\"$value\" name=\"".$item_name."[]\"  value=\"".$value."\" />\n";
461 }
462       $html .= "<input type=\"hidden\" name=\"".$item_name."_comp\"  value=\"";
463       $html .= vmGet($_REQUEST, $item_name."_comp", "")."\" />\n";
464 }
Копать отсюда и до обеда
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
foreach листает массив, а ты чекбоксами или выпадающми меню, как я например, выдаешь ему вместо массива единичную переменную. Вот и ругается. Хотя варнинг это только предупреждение, а не ошибка.
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Спасибо за ответ Arkadiy
То что foreach работает с массивом это я понял.

вопрос остается как передать ему массив если используются чекбоксы вместо селекта?
Как записать value отмеченых чекбоксов в массив $get_item_value (смайлик бьюсь головой о стену)
если я в селекте выбираю 70,80,100 то $get_item_value=Array ( /[0] => 70 [1] => 80 [2] => 100 )
Содержание $_REQUEST
Array ( [option] => com_virtuemart [page] => shop.parameter_search_form
[product_type_id] => 1
[Itemid] => 1
[product_type_1_nvsh_cena_comp] => find_in_set_all
[product_type_1_nvsh_cvet_comp] => find_in_set_all

Вот параметры =>
[product_type_1_nvsh_dlina] => Array ( /[0] => 70 [1] => 80 [2] => 100 )

[product_type_1_nvsh_dlina_comp] => find_in_set_all
[product_type_1_nvsh_magazin_comp] => find_in_set_all
[product_type_1_nvsh_mex_comp] => find_in_set_all
[product_type_1_nvsh_model_comp] => find_in_set_all
[product_type_1_nvsh_vibor_comp] => find_in_set_all
[price] => [price_comp] => le
 [edit] => Изменить параметры
[wp-settings-time-1] => 1236857782
[ys-vmconfiguration-active] => s:ext-comp-1005
[ys-dashboard-active] => s:ext-comp-1003
[5f5e8bbe5a7353e4a282ec12e642bacd] => 679da02c292c294f2dda227f9a925bdb
[virtuemart] => 679da02c292c294f2dda227f9a925bdb
[fdad34286a3a0564193eaca43bf0b44e] => 0316ed043c029072c8d06c29a5a05ff1
 [shopItemid] => 1 )

если чекбоксы то пусто ...
Ответ где-то рядом блин... надо отбирать чекбоксы по именам и добавлять в массив... что-то типа этого. Но пока результат никакой  :(
Копать отсюда и до обеда
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Балда я... все воще просто оказалось.... целый день убил  :'(
Копать отсюда и до обеда
*

Arkadiy

  • Гуру
  • 5317
  • 463 / 2
  • Крепитесь, други.
Так отпишись как сделал, многим будет полезно.
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Чекбоксы (checkbox) в форме расширенный поиск по характеристикам

Расширенный поиск предлогает нам много возможностей, если правильно задать параметры для каждого товара обеспечивает невероятное удобство для покупателя. Покупатель может найти свой товар практически мнгновенно. Упростим покупателям жизнь еще больше, заменим стандартный <SELECT>, в котором необходимо отмечать товары мышкой удерживая клавишу Ctrl, на checkbox.

Ну поехали. Находим  shop.parameter_search_form.php в районе 300-й строки находим echo "<td width=\"55%\" height=\"2\" valign=\"top\">\n"; ниже пишем код для чекбоксов:
Код
$selected_value = array();
           $get_item_value = vmGet($_REQUEST, $item_name, array());
           foreach($get_item_value as $value) {
           $selected_value[$value] = 1;
                                              }
           foreach($fields as $field) {
           echo "<input type=\"checkbox\" name=\"$item_name";
           if($db->f("parameter_multiselect")=="Y") { echo "[]\"\n";
           echo "value=\"$field\"".((isset($selected_value[$field])==1) ? "
           checked>" : ">"). $field."<br>";
                                                       };
                                      };
Ремарим селект
Код
/*echo "<select class=\"inputbox\" name=\"$item_name";
...
...
...
echo "</select>";*/
Копать отсюда и до обеда
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Народ дайте хак "цена от и до" если не хотите на форуме выложить, свяжитесь со мной как-нибудь
http://coder.cv.ua/index.php?option=com_content&view=article&id=3&Itemid=9
Копать отсюда и до обеда
*

morph

  • Давно я тут
  • 924
  • 105 / 0
DarkMaster13,если нашел файл shop.parameter_search_form.php и даже сделал там чекбоксы,то мог заметить там код для выбора цены (выпадающий список <>=) -не нужен список...так задай 2 раза с полями <= и >= по умолчанию ... вот и цена от и до
*

DarkMaster13

  • Захожу иногда
  • 77
  • 12 / 0
Спасибо morph секономил мне время  *DRINK*, сделать можно все в пределах разумного :) Вопрос хватит ли на это жизни?
А еще моцк иногда выключается и уходит в отпуск сидишь и долбишься рядом с дверью  ;D
Спасибо комьюнити, указывают выход.
Копать отсюда и до обеда
*

nevigen

  • Легенда
  • 10447
  • 863 / 25
  • http://n*****n.com
Хак в комплекте инсайд в студию !!!
Ну не зря же ВЫ парились, столько ? Или есть желание чтобы и другие проходили этот путь ?
Заранее благодарен, за понимание рационализма  ;)

ЗЫ. да и еще такой вопросик:
есть потребность (думаю у всех) фильтра в категории и только по 1-му производителю и/или ценовому диапазону.
Как это реализовать ?
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

craber

  • Новичок
  • 8
  • 0 / 0
Хак в комплекте инсайд в студию !!!
Ну не зря же ВЫ парились, столько ? Или есть желание чтобы и другие проходили этот путь ?
Заранее благодарен, за понимание рационализма  ;)

ЗЫ. да и еще такой вопросик:
есть потребность (думаю у всех) фильтра в категории и только по 1-му производителю и/или ценовому диапазону.
Как это реализовать ?

А фльтр в категории и только по 1-му производителю уже дооолго ищу.
Для Joomla 1.0 есть хак, а вот для 1.5 неполучается этот хак подогнать.
Может у кого получится, отпишитесь.
( ссылка на хак http://forum.virtuemart.ru/viewtopic.php?f=2&t=10 )
*

nevigen

  • Легенда
  • 10447
  • 863 / 25
  • http://n*****n.com
Morh,
как я уже написал в ветке указан7ой тобой, хак применим, но его реакция такая же как у модуля производители. Он выдает все товары, правда не выходя из категории.
Т.е. по пути он остается в выбранной категории, но при выборе производителя, он выдает все товары из всех категорий данной производителя.
Вот такая вот лажица получается....
и как боротся ХЗ :(
У меня правда роутер (http://joomlaforum.ru/index.php/topic,50193.0.html) стоит, может из-за него, он Оооччееень сомневаюсь :)
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

nevigen

  • Легенда
  • 10447
  • 863 / 25
  • http://n*****n.com
с отключенным таже лажа :(
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

nevigen

  • Легенда
  • 10447
  • 863 / 25
  • http://n*****n.com
хммм... я тута подумал, что возможен еще один вариант не стыковки.
у меня шаблоны для ВМ от RT Mynxx адаптированные малость. Возможно из-за этого лажается тобор по производителю.
Файл просмотре логически и в принципе должен работать правильно....
Профессиональные / Бесплатные решения для JoomShopping
Не лечи бесплатно, ибо тот, кто лечится бесплатно, рано или поздно перестает ценить свое здоровье,
а тот, кто лечит бесплатно, рано или поздно перестает ценить результаты своего труда/ (с) Гиппократ?
Не ищите ответов, ищите решение !
*

OGGA

  • Новичок
  • 2
  • 0 / 0
( ссылка на хак http://forum.virtuemart.ru/viewtopic.php?f=2&t=10 )
ок. вот готовое файло для 1.1.3
Аналогичная ситуация как у nevigen, фильтр по производителю работает но по всем группам товаров...
Коллеги, как победить?
пользую JOOMLA 1.5.10 и VirtueMart 1.1.3 stable
*

Romella

  • Осваиваюсь на форуме
  • 45
  • 5 / 0
извиняюсь за офтопик: еще раз повторюсь разъясните поддерживает ли 1.1.3. разных продавцов ?
с разными данными и разными магазинами ?
какие есть глюки ? если есть они вообще?

Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

VirtueMart - SMS уведомления о сделаном заказе.

Автор bork

Ответов: 42
Просмотров: 22900
Последний ответ 26.07.2021, 22:11:25
от Oleg91
Отчеты и статистика для VirtueMart

Автор 4kict

Ответов: 25
Просмотров: 10253
Последний ответ 14.01.2021, 00:09:53
от gartes
Сортировка товаров по дате поступления

Автор coob

Ответов: 2
Просмотров: 2497
Последний ответ 21.06.2018, 08:40:05
от kungurskiy
IceVmCart - новый бесплатный модуль корзины для VirtueMart

Автор Grig2009

Ответов: 105
Просмотров: 53284
Последний ответ 05.02.2017, 11:44:02
от Super_Panda
Модуль недавно просмотренные товары для VirtueMart 1.1.X

Автор aleks_yug

Ответов: 97
Просмотров: 27288
Последний ответ 25.10.2016, 15:03:07
от Igoritaly