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

Cathelen

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Вывод h1 в коде
« : 27.12.2014, 02:06:33 »
В шаблоне sj_jare25 у меня изначально h1 было в логотипе. Убрала этот момент, но теперь h1 вообще нет. Мне нужно чтобы h1 было в названии статей материала и названиях пунктов меню Например http://svadebnoe-kupit.ru/svadebnye-platya - свадебные платья

В файле components/com_content/views/article/tmpl/default.php у меня нет такого кода для завода его в h1


<?php if ($this->params->get('link_titles') && $this->article->readmore_link != '') : ?>
      <a href="<?php echo $this->article->readmore_link; ?>" class="contentpagetitle<?php echo $this->params->get( 'pageclass_sfx' ); ?>">
         <?php echo $this->escape($this->article->title); ?></a>
      <?php else : ?>
         <?php echo $this->escape($this->article->title); ?>
      <?php endif; ?>

есть только такой

<h1>
   <?php echo $this->escape($this->params->get('page_heading')); ?>
   </h1>

Подскажите, добрые люди как мне вывести h1?
« Последнее редактирование: 27.12.2014, 18:31:29 от Cathelen »
*

voland

  • Легенда
  • 11028
  • 588 / 112
  • Эта строка съедает место на вашем мониторе
*

Cathelen

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Re: Два h1 в коде default.php это ошибка?
« Ответ #2 : 27.12.2014, 18:17:02 »
Так есть или нет?

При проверке страниц ctrl + u нет h1 вообще нигде.
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Вывод h1 в коде
« Ответ #3 : 27.12.2014, 19:34:35 »
эт вам строку "Свадебные платья" переделать надо? Тогда это заголовок модуля, а не статьи, находится в файле \templates\ВАШ_ШАБЛОН\html\modules.php, строка
Код: php
<h3 class="title"><?php echo $icons; ?><?php echo $module->title; ?><?php echo $badge; ?></h3>
Насчет верхнего меню - оно там выводится не стандартным модулем меню, а зашитым в настройках шаблона, насколько я понял там еще можно способ его вывода выбирать.
*

Cathelen

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Re: Вывод h1 в коде
« Ответ #4 : 27.12.2014, 22:07:50 »
эт вам строку "Свадебные платья" переделать надо?
Ну да, чтобы "Свадебные платья", "Вечерние платья", отображались в h1 при заходе в пункты меню.

И нужно чтобы заголовки статей тоже в h1 выводились например http://svadebnoe-kupit.ru/vse-o-svadebnykh-platyakh/136-stili-svadebnykh-platev  "Стили свадебных платьев" сейчас заголовок h2
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Вывод h1 в коде
« Ответ #5 : 27.12.2014, 22:39:35 »
Заголовки - в \templates\ШАБЛОН\html\com_content\article\default.php, меняйте
Код: php
	<h2 class="item-title <?php if($this->item->id=='157'){ echo ' font-special special-title';} ?>">
<?php if ($params->get('link_titles') && !empty($this->item->readmore_link)) : ?>
<a href="<?php echo $this->item->readmore_link; ?>">
<?php echo $this->escape($this->item->title); ?></a>
<?php else : ?>
<?php echo $this->escape($this->item->title); ?>
<?php endif; ?>
</h2>
*

Cathelen

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Re: Вывод h1 в коде
« Ответ #6 : 28.12.2014, 00:50:08 »
Заголовки - в \templates\ШАБЛОН\html\com_content\article\default.php, меняйте
Код: php
	<h2 class="item-title <?php if($this->item->id=='157'){ echo ' font-special special-title';} ?>">
<?php if ($params->get('link_titles') && !empty($this->item->readmore_link)) : ?>
<a href="<?php echo $this->item->readmore_link; ?>">
<?php echo $this->escape($this->item->title); ?></a>
<?php else : ?>
<?php echo $this->escape($this->item->title); ?>
<?php endif; ?>
</h2>

Спасибо большое! Получилось в статьях поменять заголовки на h1. Но вот в файле \templates\ВАШ_ШАБЛОН\html\ у меня нет modules.php Нашла modules.php только в /public_html/templates/system/html  там такой код

if (!empty ($module->content)) : ?>
      <div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
      <?php if ($module->showtitle != 0) : ?>
         <h3><?php echo $module->title; ?></h3>
      <?php endif; ?>
         <?php echo $module->content; ?>
      </div>
   <?php endif;

и

<?php if ($module->showtitle != 0) : ?>
                     <h3><?php echo $module->title; ?></h3>
                  <?php endif; ?>
               <?php echo $module->content; ?>
               </div>


Подскажите, пожалуйста, можно в этих кодах замену сделать на h1?  Это коснется только названий меню при непосредственном открытии страницы меню? Свадебные платья, Вечерние платья, ....Платья в наличии?
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Вывод h1 в коде
« Ответ #7 : 28.12.2014, 12:09:02 »
нет, то что я писал для modules.php - это не для меню, а для заголовков модуля, т.е. например на странице http://svadebnoe-kupit.ru/vse-o-svadebnykh-platyakh/136-stili-svadebnykh-platev это слово "Информация".
С меню в этом шаблоне оказ-ся вообще жесткач)) Все пункты слева от логотипа Mira Luxury выводятся одним меню, зашитым в шаблон, остальные пункты, которые справа - обычным модулем. Для левого меню в файле \templates\ШАБЛОН\menusys\ytmenu.php поменяйте строку в
   case 0:
   // _top
   $anchor_html = "<a class=\"$anchor_class\" href=\"$anchor_href\"><h1>$anchor_innerHTML</h1></a>";
   break;
*

Cathelen

  • Осваиваюсь на форуме
  • 29
  • 0 / 0
Re: Вывод h1 в коде
« Ответ #8 : 28.12.2014, 21:09:06 »
нет, то что я писал для modules.php - это не для меню, а для заголовков модуля, т.е. например на странице http://svadebnoe-kupit.ru/vse-o-svadebnykh-platyakh/136-stili-svadebnykh-platev это слово "Информация". получается, мне это не нужно, т.к. будет два h1 при открытии статьи, т.е. один в заголовке статьи, другой в модуле.

нет, то что я писал для modules.php - это не для меню, а для заголовков модуля, т.е. например на странице http://svadebnoe-kupit.ru/vse-o-svadebnykh-platyakh/136-stili-svadebnykh-platev это слово "Информация".

меню в файле \templates\ШАБЛОН\menusys\ytmenu.php поменяйте строку в
   case 0:
   // _top
   $anchor_html = "<a class=\"$anchor_class\" href=\"$anchor_href\"><h1>$anchor_innerHTML</h1></a>";
   break;


Получается тогда что на странице, каждое слово т.е. Свадебные платья, Вечерние платья, становятся h1. Итого три на странице главной. А мне бы хотелось, чтобы слова Свадебные платья, Вечерние платья были в h1 только при заходе в эти пункты меню. Т.е. http://svadebnoe-kupit.ru/svadebnye-platya    Свадебные платья - слова что над каталогом, а не Свадебные платья в пункте меню слева
   
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Вывод h1 в коде
« Ответ #9 : 28.12.2014, 21:28:12 »
это может в нескольких файлах выводится, задайте поиск в папке шаблона по тексту <h3 class="title"
в свадебных платьях помойму в файле \templates\ШАБЛОН\html\com_virtuemart\categories\default.php
Код: htm
<h3 class="title vm_header font-special"><?php echo $this->category->category_name;?></h3>
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Вывод товара по двум параметрам

Автор anny_k

Ответов: 0
Просмотров: 907
Последний ответ 12.06.2019, 10:59:18
от anny_k
Вывод блога из нескольких категорий

Автор GrandEscudo

Ответов: 7
Просмотров: 5628
Последний ответ 24.08.2018, 09:33:45
от vasmed
Как настроить автоматический вывод первых 100 символов каждой статьи?

Автор MultiMatrix83

Ответов: 9
Просмотров: 1632
Последний ответ 07.08.2018, 17:45:53
от Bake
Внешние ссылки в коде

Автор jess

Ответов: 15
Просмотров: 1734
Последний ответ 05.12.2017, 12:54:49
от SeBun
Вывод новостей на сайте

Автор Андрей Осадченко

Ответов: 1
Просмотров: 1456
Последний ответ 13.06.2017, 20:31:24
от darkghost