Новости Joomla

Свои типы полей в 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 для атрибута addfieldprefixnamespace 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 #разработка

Свои типы полей в 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 Гость просматривают эту тему.
  • 4 Ответов
  • 3551 Просмотров
*

Ленка pro-alena

  • Новичок
  • 2
  • 0 / 0
Chronoforms6 - модальное окно
« : 27.11.2018, 14:54:53 »
Всем доброго времени суток. Возникла сложность с работой модального окна Chronoforms6. В тестовом режиме все работает, а вот на самом сайте отказывается загружаться модальное окно по кнопке формы. Модальное окно Choronofom6. Кто-нибудь сталкивался с этим? Как решить проблему?

Uncaught TypeError: Cannot read property 'forms' of undefined
    at Object.$.G2.forms.ready (g2.forms.js:505)
    at HTMLFormElement.<anonymous> (obratnaya-svyaz.html:68)
    at HTMLBodyElement.dispatch (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at HTMLBodyElement.v.handle (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at Object.trigger (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at Object.a.event.trigger (jquery-migrate.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at HTMLFormElement.<anonymous> (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at Function.each (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at a.fn.init.each (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)
    at a.fn.init.trigger (jquery.min.js?fea57cab5794fbeb1fc3142878a6df11:2)

*

Ragivort

  • Завсегдатай
  • 1154
  • 58 / 2
  • Такая Life
Re: Chronoforms6 - модальное окно
« Ответ #1 : 27.11.2018, 14:57:44 »
А вот это что obratnaya-svyaz.html  ?
Там в формы как в окно передаются?
Дозволь мне свершить то добро, которое я способен свершить, теперь, ибо я могу более не вернуться сюда.
*

Ленка pro-alena

  • Новичок
  • 2
  • 0 / 0
Re: Chronoforms6 - модальное окно
« Ответ #2 : 27.11.2018, 15:40:59 »
А вот это что obratnaya-svyaz.html  ?
Там в формы как в окно передаются?
Это страница, на которую грузится форма, а точнее на строку в скрипте "e.stopPropagation();" 
<script type="text/javascript">
jQuery(window).on('load',  function() {
            new JCaption('img.caption');
         });
 var emailProtector=emailProtector||{};emailProtector.addCloakedMailto=function(g,l){var h=document.querySelectorAll("."+g);for(i=0;i<h.length;i++){var b=h,k=b.getElementsByTagName("span"),e="",c="";b.className=b.className.replace(" "+g,"");for(var f=0;f<k.length;f++)for(var d=k[f].attributes,a=0;a<d.length;a++)0===d[a].nodeName.toLowerCase().indexOf("data-ep-a8f4d")&&(e+=d[a].value),0===d[a].nodeName.toLowerCase().indexOf("data-ep-b382a")&&(c=d[a].value+c);if(!c)break;b.innerHTML=e+c;if(!l)break;b.parentNode.href="mailto:"+e+c}};

if (typeof RokBoxSettings == 'undefined') RokBoxSettings = {pc: '100'};
         jQuery(document).ready(function($){
            $.G2.boot.ready();
         });
      
setInterval(function(){jQuery.get("http://na-veka.spb.ru/obratnaya-svyaz.html");}, 300000);

   jQuery(document).ready(function($){
      $.G2.forms.invisible();
      
      $('body').on('contentChange.form', 'form', function(e){
         e.stopPropagation();
         $.G2.forms.ready($(this));
      });
      
      $('form').trigger('contentChange');
   });


   jQuery(document).ready(function($){
                              $('#button9').on('click', function(){
         $(".ui.modal.form-display-section1").modal({"closable":true,"inverted":true}).modal("show");      });
         });


   </script>
   <script type="text/javascript">
      jQuery(document).ready(function($){$("div.G2-joomla").trigger("contentChange");});
      </script>
*

markizmds

  • Захожу иногда
  • 62
  • 2 / 0
Re: Chronoforms6 - модальное окно
« Ответ #3 : 16.01.2019, 11:30:52 »
О! У меня такая же байда ;D
Решение уже кто то нашел?

Лично я делал плавный переход по якорным ссылкам и у меня перестали работать вызовы модальных форм связи в Chronoforms6. Покопавшмсь выяснил что проблема в подключаемой библиотеке jquery.min.js

Вот натолкнулся в сети на якобы решение, но мне что то такое решение не очень.
https://joomla.stackexchange.com/questions/23080/chronoforms-6-jquery-g2-is-undefined
Сам лично не проверял, так как до конца не понял где и что менять.
*

markizmds

  • Захожу иногда
  • 62
  • 2 / 0
Re: Chronoforms6 - модальное окно
« Ответ #4 : 16.01.2019, 12:43:28 »
В общем поискав решение своей проблемы, я пришел к выводу подойти к вопросу с другой стороны. А именно решить вопрос способом, который будет обходить подключение библиотеки jquery.min.js. Главное добавить функционал по плавному переходу якорных ссылок.
Задача решена - на чистом js.
Так как конфликт вылез из за подключаемой библиотеки, значит кто-то так же как и я может с этим столкнуться. Ссылку на решение моего вопроса я не буду прикладывать, так как они не вечные, просто выложу тут код (проверенный и рабочий).

Код
var linkNav = document.querySelectorAll('[href^="#"]'), //выбираем все ссылки к якорю на странице
    V = 1// скорость, может иметь дробное значение через точку (чем меньше значение - тем больше скорость)
for (var i = 0; i < linkNav.length; i++) {
    linkNav[i].addEventListener('click', function(e) { //по клику на ссылку
        e.preventDefault(); //отменяем стандартное поведение
        var w = window.pageYOffset,  // производим прокрутка прокрутка
            hash = this.href.replace(/[^#]*(.*)/, '$1');  // к id элемента, к которому нужно перейти
        t = document.querySelector(hash).getBoundingClientRect().top,  // отступ от окна браузера до id
            start = null;
        requestAnimationFrame(step);  // подробнее про функцию анимации [developer.mozilla.org]
        function step(time) {
            if (start === null) start = time;
            var progress = time - start,
                r = (t < 0 ? Math.max(w - progress/V, w + t) : Math.min(w + progress/V, w + t));
            window.scrollTo(0,r);
            if (r != w + t) {
                requestAnimationFrame(step)
            } else {
                location.hash = hash  // URL с хэшем
            }
        }
    }, false);
}

Для тех кто не понял что с ним делать:
1. Создаете файл .js и в нем размещаете этот код.
2. Созданный вами файл заливаете на ХОСТ с сайтом.
3. Подключаете этой js к сайту - <script src="/templates/НАЗВАНИЕ ШАБЛОНА/js/ВАШ ФАЙЛ.js" type="text/javascript"></script>

Будут вопросы пишите.

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

ChronoForms 6 Как настроить модальное окно

Автор bybus

Ответов: 4
Просмотров: 5415
Последний ответ 20.12.2018, 14:10:03
от markizmds
Зависимые поля ChronoForms6

Автор Anewcomer

Ответов: 1
Просмотров: 1720
Последний ответ 25.11.2017, 07:40:59
от Ecos
Chronoform v 5 модальное окно

Автор Panchitos

Ответов: 0
Просмотров: 1603
Последний ответ 30.01.2017, 17:13:51
от Panchitos