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

DamianTrash

  • Захожу иногда
  • 169
  • 4 / 0
Добрый день. Всё пробую, пробую, но никак не получается. Мне нужно в форму "Задайте вопрос по этому товару" вставить поле с телефоном. Что-то весь интернет перелазил, но нашёл только как это сделать в VirtueMart 1/ А для VirtueMart 2 ничего нет. Если кто с этим уже сталкивался, подскажите пожалуйста  ::)
*

DamianTrash

  • Захожу иногда
  • 169
  • 4 / 0
Неужели никто не пользуется этим функционалом. Он же весьма удобен, но явно не доработан.
*

Ilya Kochnev

  • Новичок
  • 9
  • 0 / 0
Здесь копайся:
components/com_virtuemart/views/askquestion/tmpl/

Телефон мне не надо было, а вот артикул, чтобы быстрее отвечать на вопросы прикручивал в mail_html_question.php.
*

DamianTrash

  • Захожу иногда
  • 169
  • 4 / 0
Добавить поля можно в файле components/com_virtuemart/views/askquestion/tmpl/form.php, но где обрабатывается эта форма не понятно. Поля-то добавляются, а вот на почту они не приходят
*

serjik

  • Захожу иногда
  • 344
  • 1 / 1
DamianTrash и как с полем для телефона удалось решить? я дня три пытаюсь решить эту задачу, но получаеться только нерабочее поле с телефоном и все
*

DamianTrash

  • Захожу иногда
  • 169
  • 4 / 0
Не. Решил вообще эту VirtueMart не использовать. JoomShopping намного лучше.
*

icom

  • Давно я тут
  • 830
  • 202 / 4
DamianTrash и как с полем для телефона удалось решить? я дня три пытаюсь решить эту задачу, но получаеться только нерабочее поле с телефоном и все
в функции mailAskquestion (components\com_virtuemart\controllers\productdetails.php) после
Код
$vars['vendor'] = array('vendor_store_name' => $fromName);
добавить
Код
$vars['tel'] = JRequest::getVar ('tel');
где tel - имя вашего поля с телефоном в шаблоне
после этого в файле
components\com_virtuemart\views\askquestion\tmpl\mail_html_question.php добавить в любое место
Код
<?php echo $this->tel; ?>
работоспособность не проверял
*

serjik

  • Захожу иногда
  • 344
  • 1 / 1
icom Большое спасибо за подсказку, все заработало!  Единственное что нужно еще было исправить form.php продублировав в нем строку с вводом имени файла и заменив в ней значения name на tel /
:)
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
Спасибо заработало ))) *DRINK*
*

lakshmi

  • Захожу иногда
  • 188
  • 5 / 0
Всем привет кто знает как поле textarea и эмаил сделать не обязательным в форме задать вопрос об этом товаре?
*

Eholov

  • Захожу иногда
  • 170
  • 14 / 0
Подробно описывается тут : http://jdevelop.info/articles/joomla-extensions/522-virtuemart-3-dopolnitelnoe-pole-v-formu-zadat-vopros
Чтоб при вводе неправильной CAPTCHA значение в новом поле сохранялось, нужно в файле components/com_virtuemart/controllers/productdetails.php в районе 118 строки в код
Код
$askquestionform = array('name' => vRequest::getVar ('name'),....
добавить
Код
'phone' => vRequest::getVar ('phone'),
*

ivafana

  • Новичок
  • 9
  • 0 / 0
Добрый день.
Можно ли сделать форму "задать вопрос по товару" в VirtueMart адаптивной - т.е. при смене разрешения экрана форма тоже меняется.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

При регистрации в VirtueMart поле Password перестало быть обязательным

Автор Slava77

Ответов: 10
Просмотров: 2706
Последний ответ 31.05.2021, 15:23:32
от Slava77
Как добавить радиокнопку или чекбокс в корзину и в уведомление?

Автор eu4ria

Ответов: 4
Просмотров: 3362
Последний ответ 09.02.2021, 18:18:10
от eu4ria
Как добавить кнопку Убрать товар из модуля корзины VirtueMart

Автор Gandriyko

Ответов: 0
Просмотров: 1500
Последний ответ 27.09.2017, 16:56:17
от Gandriyko
Как сделать необязательным поле e-mail?

Автор One

Ответов: 28
Просмотров: 3948
Последний ответ 13.06.2017, 22:38:28
от One
Форма вместо корзины на кнопке "добавить в корзину"

Автор Jud

Ответов: 5
Просмотров: 1714
Последний ответ 06.04.2016, 21:50:23
от gartes