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

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Здравствуйте.
Помогите, пожалуйста с данным вопросом.
Перерыл весь интернет, весь форум, а всё, что объясняется, объясняется частично, не полностью. В одной из тем сказано, что необходимо создать файл, например, mymodule.php с таким содержанием:
Код
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$moduleposition = JRequest::getVar('moduleposition','user1');
$modulestyle = JRequest::getVar('modulestyle','xhtml');
?>
<jdoc:include type="modules" name="<?php echo $moduleposition?>" style="<!?php echo $modulestyle?>"/>
и положить его по адресу: templates/YOURTEMPLATE/mymodule.php
Это я так понимаю дополнительный шаблон получится.
Далее в index.php шаблона в области head вставить:
Код
<?php JHTML::_('behavior.modal'); ?>
для включения отображения модальных окон и в этом же файле,
где удобно, вставить ссылку на созданный дополнительный шаблон. В данном случае человек объяснил, что адрес ссылки должен быть такой:
Код
<a class="modal" href="http://ваш домен/index.php?tmpl=mymodule&moduleposition=user2">Заказать</a>
После этого ссылка на шаблон появилась на сайте, при клике на неё открывается естественно модальное пустое окошко, потому что я не знаю как назначить позицию модуля. В настройках модуля что только не писал. Эта позиция должна где-то отображаться или как ее назначить для модуля?
Подскажите, пожалуйста.
 
« Последнее редактирование: 27.07.2013, 12:31:15 от systemua »
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Модуль в модальном окне
« Ответ #1 : 14.07.2013, 13:35:46 »
Позиция модуля берётся из ссылки. Какую пропишите, в такую и модуль выводить...
Цитировать
<a class="modal" href="http://ваш домен/index.php?tmpl=mymodule&moduleposition=user2">Заказать</a>
Создание сайтов, шаблонов, помощь в решении проблем.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #2 : 14.07.2013, 13:38:18 »
Я прописал, а почему модуль не выводится, а белое окошко?
Что должно быть в опции "Выбор позиции" для модуля?
В общем ситуация такая: если ссылку для модуля вставляю в адресную строку и перехожу по ней, то там просто пустая страница. То есть модуля на ней нету. Как его туда расположить?
« Последнее редактирование: 14.07.2013, 13:48:02 от systemua »
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Модуль в модальном окне
« Ответ #3 : 14.07.2013, 13:49:41 »
А если просто ссылку открыть в браузере?
http://ваш домен/index.php?tmpl=mymodule&moduleposition=user2
А в позиции user2 модуль опубликован?
Цитировать
Что должно быть в опции "Выбор позиции" для модуля?
Писал же сверху, та же позиция, которая и в ссылке указана...
Создание сайтов, шаблонов, помощь в решении проблем.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #4 : 14.07.2013, 13:55:53 »
А если просто ссылку открыть в браузере?
http://ваш домен/index.php?tmpl=mymodule&moduleposition=user2
А в позиции user2 модуль опубликован?Писал же сверху, та же позиция, которая и в ссылке указана...
В том-то и дело, что я не знаю как опубликовать модуль в позиции?
Напишите чуть подробней, пожалуйста. Где что нажимать или куда вписывать.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Модуль в модальном окне
« Ответ #5 : 14.07.2013, 13:57:07 »
В ссылке
Цитировать
http://ваш домен/index.php?tmpl=mymodule&moduleposition=user2
позиция называется user2
Создание сайтов, шаблонов, помощь в решении проблем.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #6 : 14.07.2013, 13:58:35 »
Счас попробую разобраться.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
Re: Модуль в модальном окне
« Ответ #7 : 14.07.2013, 14:00:48 »
В том-то и дело, что я не знаю как опубликовать модуль в позиции?
Напишите чуть подробней, пожалуйста. Где что нажимать или куда вписывать.
Цитировать
Что должно быть в опции "Выбор позиции" для модуля?
user2
Руководство для начинающего пользователя Joomla! 2.5 (книга в pdf)
Создание сайтов, шаблонов, помощь в решении проблем.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #8 : 14.07.2013, 14:34:55 »
Наконец-то.^-^ Попробовал с другим модулем, без вопросов. Всё получилось. И в модальном окне и если ссылку в адресную строку браузера вставить и перейти, то все отображается.  А перед этим пробовал с модулем "Rapid_contact". Ни за что не хотел появляться.
Большое спасибо Efanych за помощь. За то, что откликнулся, а то не знал что писать в опцию "Выбор позиции".
« Последнее редактирование: 14.07.2013, 14:38:17 от systemua »
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #9 : 27.07.2013, 12:28:00 »
Я вот написал, что все получилось, но получилось только в google-chrome. В opera появляется только белое пустое окошко и фон вокруг не становится темным. Да и то не по первому клику. А в mozilla все как надо кроме того, что в окошке ничего не появляется. В google-chrome же без вопросов.
Если же перейти в любом браузере по адресу страницы где находится модуль, то он отображается.
*

Efanych

  • Глобальный модератор
  • 4683
  • 644 / 0
  • Меняю свою жизнь на 360°!
RE: Модуль в модальном окне
« Ответ #10 : 27.07.2013, 12:35:05 »
Скорее всего конфликт скриптов. погуглите, как решить...
Создание сайтов, шаблонов, помощь в решении проблем.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
RE: Модуль в модальном окне
« Ответ #11 : 27.07.2013, 12:36:29 »
Ок. Пробегусь по сети и отпишусь как только будет результат.
*

systemua

  • Осваиваюсь на форуме
  • 22
  • 1 / 0
Re: Модуль в модальном окне
« Ответ #12 : 02.09.2013, 13:39:47 »
В общем решил данный вопрос так:
до этого, чтобы вывести модуль в модальном окне, я ставил
Код
<?php JHTML::_('behavior.modal'); ?>
в index.php шаблона в области head. Но этот способ работал у меня не во всех браузерах.
Теперь же я его убрал вообще.
А вот файл дополнительно созданного шаблона mymodule.php с встроенной позицией оставил как и описано выше по адресу в папке используемого шаблона. Например, templates/YOURTEMPLATE/mymodule.php  Вот собственно его содержание
Код
<?php

// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php echo $this->language; ?>" lang="<?php echo $this->language; ?>" dir="<?php echo $this->direction; ?>" style="background-color:#DCFFF2;">
<head>
   <jdoc:include type="head" />
   <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template.css" type="text/css" />

<?php if($this->direction == 'rtl') : ?>
   <link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/<?php echo $this->template; ?>/css/template_rtl.css" type="text/css" />
<?php endif; ?>
</head>
<body style="background-color:#DCFFF2;">
<p style="margin:20px 0 10px 80px;">Отправка сообщения</p>
<div align="center">
<jdoc:include type="modules" name="modul" style="xhtml" width="300" height="400"/>
</div>
</body>
</html>
Далее установил плагин rokbox и активировал его. После вручную прописал модулю, который необходимо вывести в модальном окне, позицию "modul" и опубликовал его. Потом в менеджере модулей создал HTML код, назначил ему одну из позиций, имеющихся в шаблоне и в пользовательский текст вставил:
Код
<a href="index.php?tmpl=mymodule&amp;moduleposition=modul" data-rokbox="" data-rokbox-size="370 440">Заказать</a>
Эту ссылку можно конечно вставить прямо в код index.php шаблона вместо того, чтобы создавать модуль HTML, назначить id или class и оформить по своему усмотрению.
Проверено в основных браузерах.
Всем спасибо за помощь.
*

vetkrs

  • Захожу иногда
  • 103
  • 0 / 0
RE: Модуль в модальном окне
« Ответ #13 : 15.10.2014, 21:30:58 »
А для 2.5 подойдет решение?
*

b2z

  • Глобальный модератор
  • 7284
  • 778 / 0
  • Разраблю понемногу
*

Alex1983

  • Новичок
  • 2
  • 0 / 0
RE: Модуль в модальном окне
« Ответ #15 : 07.11.2014, 13:57:46 »
Здравствуйте! У меня тоже все заработало. Но есть один вопрос. У меня модуль с формой регистрации для скачивания файла. Когда форму заполнил, нажал скачать в этом же окошке открывается файл pdf. Подскажите как сделать так, что бы это окно закрывалось после заполнения формы и нажатия кнопки скачать!
*

wen

  • Захожу иногда
  • 56
  • 0 / 0
RE: Модуль в модальном окне
« Ответ #16 : 10.03.2015, 17:05:14 »
здравствуйте.
подобная проблема.
использую компонент acymailing для вывода модуля "подписаться на рассылку" и widjetkit для формирования pop-up окна.
как оформить ссылки и модули разобрался. столкнулся с такой проблемой:
-если модуль опубликован в существующей позиции в шаблоне - все работает нормально.
-если модуль опубликовать в пользовательской (не существующей) позиции - формируется кривое лайт-бокс окно (но это я думаю можно будет решить с помощью css), а главная проблема - это окно не закрывается ни "крестиком" ни как иначе, только перезагрузкой страницы...
может кто подскажет?
*

jesus

  • Захожу иногда
  • 127
  • 15 / 1
  • фронтенд ищет бэкенда для совместного творчества
RE: Модуль в модальном окне
« Ответ #17 : 08.03.2019, 22:01:57 »
Пробовал делать всплывающее окно с модулем, на jQuery по этой инструкции:

1. В папке активного шаблона сайта создадим файл module_colorbox.php с таким содержимым:
Код
<?php
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
$input = JFactory::getApplication()--->input;
$moduleposition = $input->getCmd('moduleposition','module-modal');
$modulestyle = $input->getCmd('modulestyle','xhtml');
?>
<jdoc:include type="modules" name="<?php echo $moduleposition; ?>" style="<?php echo $modulestyle; ?>">
</jdoc:include>

2. Качаем плагин Colorbox http://www.jacklmoore.com/colorbox/, и поместим нужные нам файлы плагина в папку /media/colorbox/. Нам будет нужен главный файл плагина jquery.colorbox-min.js , а также стили и картинки одной из тем оформления. Я взял из папки example1, нужен файл colorbox.css и папка с картинками.

3. Подключим в шаблоне плагин colorbox , где-нибудь в начале файла шаблона:
Код
$doc->addScript('media/colorbox/jquery.colorbox-min.js')
->addScriptDeclaration('
jQuery(document).ready(function(){
jQuery("#link-module-colorbox").colorbox(); // подключаем colorbox к ссылке с id link-module-colorbox
}); ')
->addStylesheet('media/colorbox/colorbox.css');

4. Назначаем нужному модулю позицию module-modal

5. Вызываем этот модуль где хотим по ссылке:
Код
<a id="link-module-colorbox" href="/index.php?tmpl=module_colorbox&moduleposition=module-modal">Module in Colorbox</a>

Решение взято с сайта: http://midav.ru/page/vyvod-modulja-v-modalnom-okne-v-joomla-3-s-pomoshhju-jquery
Так вот. Сделал я так, всплывающее окно заработала, но внутри окна, вместо нужного модуля ошибка: This content failed to load.
Может кто-то из специалистов увидит в чём может быть проблема и будет готовое решение. Ещё правда есть подозрение, что может не работать именно у меня на Joomla 3.9.3. Оригинальное решение от 2014 года, и может оно уже не актуально: jQuery обновился и старые инструкции не работают.
Спасибо за freeware!
Если вы готовы небезвозмездно ответить на мой вопрос, с удовольствием рассмотрю предложение.
Ищу адекватного партнёра (программиста) по разработке сайтов на Joomla. Обеспечу ненапряжный поток задач.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывести модуль в модуле

Автор jimka

Ответов: 2
Просмотров: 627
Последний ответ 18.04.2025, 15:39:36
от fbr
[Решено] Вывод значений из custom fields материала в модуле по имени поля

Автор goga_pgasovav

Ответов: 3
Просмотров: 967
Последний ответ 30.12.2024, 13:22:11
от goga_pgasovav
[Решено] Получить category description image в index.php шаблона

Автор goga_pgasovav

Ответов: 6
Просмотров: 1006
Последний ответ 12.07.2024, 17:06:14
от goga_pgasovav
Видео в модальном окне

Автор Leo1986

Ответов: 0
Просмотров: 741
Последний ответ 25.03.2024, 18:48:40
от Leo1986
Как вставить модуль в код нужной страницы php?

Автор zvi

Ответов: 9
Просмотров: 4668
Последний ответ 21.02.2024, 11:03:08
от saynez