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

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
Скажите, как убрать отображению меню с категориями товаров в самой карточке товара.
joomla 1 24, vm 1 19, и mod_product_categories
« Последнее редактирование: 04.11.2011, 17:06:18 от master3000 »
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
*

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
К flypage это не относится, flypage выгружается в строго отведенном ему <div>, а mod_product_categories выгружается в другом <div>
в модуле mod_product_categories настройки по выводу на flypage отсутствуют

верно нужно поставить условие в шаблоне для модуля, вот только какое

в шаблоне позиция выгружается:

            <?php if($this->countModules('left')) : ?>
             <td class="leftcol" style="width:<?php echo $leftColWidth; ?>px;">
               <jdoc:include type="modules" name="left" style="rounded" />
             </td>
                 <?php endif; ?>
« Последнее редактирование: 04.11.2011, 16:25:03 от master3000 »
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
прежде чем что-то говорить - надо сначала попробовать то что советуют ;)
<?php
$option = JRequest::getVar('option', null);
$page = JRequest::getVar('page', null);
?>
<?php if ( $this->countModules('right') && $page!='flypage') { ?>
      <jdoc:include type="modules" name="right" />
      <?php } ?>

вам остается right заменить на вашу позицию модуля

--------------------------------------------------
вам остается скрестить два этих кода
« Последнее редактирование: 04.11.2011, 16:28:41 от ELLE »
*

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
           
<?php
$option = JRequest::getVar('option', null);
$page = JRequest::getVar('page', null);
?>
             <?php if ( $this->countModules('left') && $page!='flypage') { ?>

             <td class="leftcol" style="width:<?php echo $leftColWidth; ?>px;">
               <jdoc:include type="modules" name="left" style="rounded" />
             </td>
                 <?php endif; ?>



Верно ?
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
попробуйте, долго что-ли?
только с   <?php endif; ?> не будет наверно работать, должно заканчиваться <?php } ?>
*

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
Не подходит

Попробовал

<?php
$option = JRequest::getVar('option', null);
$page = JRequest::getVar('page', null);
?>
             <?php if ( $this->countModules('left') && $page!='flypage') { ?>

             <td class="leftcol" style="width:<?php echo $leftColWidth; ?>px;">
               <jdoc:include type="modules" name="left" style="rounded" />
             </td>
              <?php } ?>

и так тоже
... <?php if ( $this->countModules('left') && $page!='flypage.tpl') { ?> ...

и здесь
... <?php if ( $this->countModules('left') && $page!='flypage.tpl.php') { ?> ...


вероятно не работает - ссылка ЧПУ
« Последнее редактирование: 04.11.2011, 16:50:15 от master3000 »
*

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
Если в странице категории сделать собственную позицию для модуля категорий, а left в шаблоне вообще отключить ? Решение?
но тогда для маинбоди нужно будет выставлять другие настройки и использовать позицию вне vm будет трудновато
« Последнее редактирование: 04.11.2011, 16:53:00 от master3000 »
*

ELLE

  • Глобальный модератор
  • 4510
  • 893 / 0
попробуйте вместо flypage вставить shop.product_details
*

master3000

  • Осваиваюсь на форуме
  • 32
  • 0 / 1
Victory ;D
Получилось!
ELLE, с меня  должок


Работает кроссбраузерно
« Последнее редактирование: 04.11.2011, 17:01:25 от master3000 »
*

litus

  • Новичок
  • 3
  • 0 / 0
Ребята, подскажите как это реализовать на Joomla 2.5 + VM 2.0.18a

У второго VirtueMart структура другая, ничего не могу понять, чего куда писать...
*

kajjja

  • Новичок
  • 3
  • 0 / 0
Ребята, подскажите как это реализовать на Joomla 2.5 + VM 2.0.18a

У второго VirtueMart структура другая, ничего не могу понять, чего куда писать...

решил кто-то? подскажите, пожалуйста.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Количество просмотров товара VirtueMart Существует?

Автор grishin

Ответов: 38
Просмотров: 11487
Последний ответ 22.08.2020, 08:44:29
от rsn
Поменять в ссылке index.php на алиас меню

Автор sashgera

Ответов: 0
Просмотров: 2386
Последний ответ 03.08.2020, 08:29:14
от sashgera
VirtueMart. Вывести названия дополнительных изображений в карточке товара

Автор Delik

Ответов: 3
Просмотров: 4517
Последний ответ 04.09.2018, 10:42:46
от Eholov
Как убрать список категорий с главной страницы virtuemart 1.1.3?

Автор SynVelesa

Ответов: 6
Просмотров: 9874
Последний ответ 07.06.2018, 00:21:52
от iGatto
Модуль авторизации пользователей убрать лишнее

Автор pautina

Ответов: 22
Просмотров: 11761
Последний ответ 20.01.2018, 06:08:46
от ElenaD