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

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Здравствуйте.
Подскажите как можно скрыть модуль в определенной позиции от мобильных устройств? Пример: на сайте http://sanbyulleten.ru/ в позиции абсолют модуль с рекламой от Google 190х600 при просмотре на планшетах и телефоне закрывает частично текст и графику. Как результат большее число отказов, меньше просмотров. Хотелось бы, чтобы он вообще не показывался для мобильных платформ или был полностью на заднем плане.
Вывод блока в шаблоне
Код
<div id="page-bg">

<?php if ($this['modules']->count('absolute')) : ?>
<div id="absolute">
<?php echo $this['modules']->render('absolute'); ?>
</div>
<?php endif; ?>
Стили
Код
/* Copyright (C) YOOtheme GmbH, http://www.gnu.org/licenses/gpl.html GNU/GPL */

/*
 * Layout Style Sheet - Provides a fluid grid and helper classes to create any layout and some layout defaults
 */


/* Grid and Clearing Tools
----------------------------------------------------------------------------------------------------*/

.clearfix:before,
.clearfix:after,
.grid-block:before,
.grid-block:after,
.deepest:before,
.deepest:after {
content: "";
    display: table;
}
.clearfix:after,
.grid-block:after,
.deepest:after { clear: both; }

.grid-box { float: left; }

/* Grid Units */
.width16 { width: 16.666%; }
.width20 { width: 20%; }
.width25 { width: 25%; }
.width33 { width: 33.333%; }
.width40 { width: 40%; }
.width50 { width: 50%; }
.width60 { width: 60%; }
.width66 { width: 66.666%; }
.width75 { width: 75%; }
.width80 { width: 80%; }
.width100 { width: 100%; }

[class*='width'] {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
}

/* Create new Block Formatting Contexts */
.bfc-o { overflow: hidden; }
.bfc-f {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
width: 100%;
float: left;
}

/* Align Boxes */
.float-left { float: left; }
.float-right { float: right; }

/* Grid Gutter */
.grid-gutter.grid-block { margin: 0 -15px; }
.grid-gutter > .grid-box > * { margin: 0 15px; }

.grid-gutter > .grid-box > * > :first-child { margin-top: 0; }
.grid-gutter > .grid-box > * > :last-child { margin-bottom: 0; }


/* Layout Defaults
----------------------------------------------------------------------------------------------------*/

/* Center Page */
.wrapper {
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
box-sizing: border-box;
margin: auto;
}

/* Header */
#header { position: relative; top: 10px;}

#toolbar .float-left .module,
#toolbar .float-left > time {
margin: 0 15px 0 0;
float: left;
}

#toolbar .float-right .module {
margin: 0 0 0 15px;
float: right;
}

#headerbar .module {
max-width: 300px;
margin-right: 0;
float: right;
}

#logo, #logo > img,
#menu { float: left; }
#search { float: right; }

#banner {
position: absolute;
top: 0;
right: -200px;
}

/* Footer */
#footer {
position: relative;
text-align: center;
}

/* Absolute */
#absolute {
position:fixed;
top: 30px;
left: 20px;
width: 120px;
}
Спасибо.
*

capricorn

  • Завсегдатай
  • 1949
  • 118 / 3
в суффикс класса модуля попробуйте ввести hidden-phone, hidden-tablet, hidden-desktop
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Не помогло
*

verstalshik

  • Завсегдатай
  • 1754
  • 95 / 1
медиаквери юзайте
❶ НЕ СПРАВЛЯЕШЬСЯ САМ???  Поможем тут...  ❷ Калькулятор доставки - ЗАКАЖИ!!!...  ❸ Каталог компаний - ЖМИ!!!...  ❹ НОВИЧКИ! ВСЕ сюда! Первая консультация БЕСПЛАТНО!!
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Что это?
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
Код: css
@media (max-width: 979px) {
  .class-module {
    display: none;
  }
}
*

verstalshik

  • Завсегдатай
  • 1754
  • 95 / 1
Код: css
@media (max-width: 979px) {
  .class-module {
    display: none;
  }
}
а в head разве не надо  <meta name="viewport" content="width=device-width, initial-scale=1.0" /> ??))
❶ НЕ СПРАВЛЯЕШЬСЯ САМ???  Поможем тут...  ❷ Калькулятор доставки - ЗАКАЖИ!!!...  ❸ Каталог компаний - ЖМИ!!!...  ❹ НОВИЧКИ! ВСЕ сюда! Первая консультация БЕСПЛАТНО!!
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Код: css
@media (max-width: 979px) {
  .class-module {
    display: none;
  }
}
Не помогло
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Кто поможет за денежку?
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Медиа-запросы
ДА я уже читал эту страницу. Пробовал ставить не получилось. В каком CSS делать этот код? Стилей в шаблоне масса.
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Firebug
он показывает стиль из первого поста
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Код
@media handheld and (max-width: 979px) {
  .class-module {
    display: none;
  }
}

#absolute {
    position:fixed;
top: 30px;
left: 20px;
width: 120px;
}
Так?
*

wfedin

  • Завсегдатай
  • 1273
  • 102 / 0
Мне откуда знать какие у вас классы в шаблоне используются? Если это:
Код: php
<?php if ($this['modules']->count('absolute')) : ?>
<div id="absolute">
<?php echo $this['modules']->render('absolute'); ?>
</div>
<?php endif; ?>
то:
Код: css
@media handheld and (max-width: 979px) {
  #absolute {
    display: none;
  }
}
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Так я тоже делал. И кэш почистил.
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
Код: css
@media (max-width: 979px) {
  #page-bg>#absolute {
      display:none !important;
  }
}
а в head ...  <meta name="viewport" content="width=device-width, initial-scale=1.0" />))

вот так наверняка убьете ..
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
 да тут все с ног сбились парню помогать :)
блин, в FireBug - за 2 мин. все можно решить, если бы умел пользоваться ..
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Спасибо. Но мой планшет упрямо показывает этот блок несмотря на все ухищрения  >:(
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Код: css
@media (max-width: 979px) {
  #absolute {
    display: none;
  }
}
Опередидили...
Этот вариант заработал после очередной чистки кэша в вертикальной раскладке. Надо пологать - уменьшить пиксели надо?
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Всем спасибо большое за помощь!

Окончательный вариант, работающий в верт. и гориз. раскладках:
Код
@media (max-width: 1367px) {
  #absolute {
    display: none;
  }
}

В head:
Код
<meta name="viewport" content="width=device-width, initial-scale=1.0" />))
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
ничего себе "окончательный вариант"
1367 - это правило и для большей части ноутбуков отработает ...

Ориентироваться нужно на определенное разрешение экрана, а не на конкретный планшет
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Тогда условием надо ставить не ширину дисплея а тип устройств
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
Для планшетов : @media only screen and (min-width: 767px) and (max-width: 979px)
Для планшета и мобильных устройств : @media only screen and (max-width: 979px)
*

fbr

  • Завсегдатай
  • 1661
  • 206 / 7
Тогда условием надо ставить не ширину дисплея а тип устройств
Смысл? Если у кого-то мобила больше чем у меня рабочий стол монитор? Почему бы ему не показать заветный модуль?
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
У меня планшет1200 шириной и по идее сайт должен был вместиться. Но он растягивается по экрану а модуль оказывается частично преред элементами, а частично сзади. Ладно был бы он весь на заднем плане да и хрен с ним.
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Пойду спать. Завтра вечером буду дальше шаманить.
*

shalunish

  • Захожу иногда
  • 50
  • 0 / 0
Пс. Может модуль надо позиционировать не от края экрана,?
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Модуль устанавливается, но Joomla его не видит

Автор ruppert

Ответов: 20
Просмотров: 18245
Последний ответ 01.08.2022, 05:30:50
от rezon777
Форма или модуль загрузки файлов пользователями

Автор НадеждаМакарова

Ответов: 2
Просмотров: 1307
Последний ответ 23.03.2020, 10:30:40
от НадеждаМакарова
Страница не оптимизирована для мобильных устройств 2.5

Автор Hellboy4ik

Ответов: 9
Просмотров: 1906
Последний ответ 12.12.2018, 17:08:17
от Hellboy4ik
Joomla 2.5 Как скрыть модуль от компьютера?

Автор ratamanta

Ответов: 11
Просмотров: 1331
Последний ответ 14.05.2018, 18:16:41
от ratamanta
Как скрыть баннер на смартфоне в адаптивной версии

Автор cosmotion

Ответов: 0
Просмотров: 1496
Последний ответ 01.11.2017, 14:39:19
от cosmotion