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

Kadimp

  • Захожу иногда
  • 180
  • 2 / 0
При проверке структурированных данных выскакивает одна ошибка в BreadcrumbList:
item - >    Необходимо указать значение для поля item.
Код на сайте
Код
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="active">
<span itemprop="name">
Двухэтажная клетка для морских свинок Ferplast CAVIE 80 DOUBLE </span>
<meta itemprop="position" content="6">
</li>
Код в php:
Код
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="active">
<span itemprop="name">
<?php echo $item->name; ?>
</span>
<meta itemprop="position" content="<?php echo $key + 1; ?>">
</li>
Подскажите, пожалуйста, где закралась ошибка?
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Re: Микроразметка Хлебных крошек
« Ответ #1 : 22.08.2018, 20:50:17 »
itemprop="item" пропущено
*

Kadimp

  • Захожу иногда
  • 180
  • 2 / 0
Re: Микроразметка Хлебных крошек
« Ответ #2 : 22.08.2018, 21:25:06 »
Я извиняюсь, но скажите куда и как правильно вставить itemprop="item" ?
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
*

Kadimp

  • Захожу иногда
  • 180
  • 2 / 0
Re: Микроразметка Хлебных крошек
« Ответ #4 : 22.08.2018, 22:49:23 »
К сожалению я далек от этого и все равно не понимаю как именно это сделать в приведенном мной коде...
*

almika

  • Захожу иногда
  • 325
  • 27 / 0
Re: Микроразметка Хлебных крошек
« Ответ #5 : 23.08.2018, 04:24:05 »
Хлебные крошки - это ссылки, а у вас ссылки то и нет.
Пример разметки вы можете посмотреть на сайте schema.org, ссылка на нужную вам разметку как раз в вашем коде есть.
https://schema.org/ListItem
Вкладку микоданные там откройте внизу и посмотрите пример.
*

Kadimp

  • Захожу иногда
  • 180
  • 2 / 0
Re: Микроразметка Хлебных крошек
« Ответ #6 : 23.08.2018, 07:58:22 »
Это так называемая последняя крошка, т.е. активная (текущая) страница. Разве она должна быть ссылкой? сама на себя?
*

almika

  • Захожу иногда
  • 325
  • 27 / 0
Re: Микроразметка Хлебных крошек
« Ответ #7 : 23.08.2018, 10:59:20 »
Это так называемая последняя крошка, т.е. активная (текущая) страница. Разве она должна быть ссылкой? сама на себя?
Если это активная страница, то для нее не надо ссылку, и, значит разметку тоже не надо.
Если вы хотите, чтобы текущая страница показывалась в хлебных крошках, но не была активной, то микроразметку для нее все равно не надо делать.
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
Re: Микроразметка Хлебных крошек
« Ответ #8 : 23.08.2018, 11:44:58 »
Это временный баг Google, можно подождать либо сделать микроразметку через json ( скорее всего платно, если сами не можете).
источник
*

Kadimp

  • Захожу иногда
  • 180
  • 2 / 0
Re: Микроразметка Хлебных крошек
« Ответ #9 : 23.08.2018, 14:03:01 »
Спасибо
*

mikass

  • Новичок
  • 1
  • 1 / 0
Re: Микроразметка Хлебных крошек
« Ответ #10 : 20.11.2018, 17:28:42 »
Приветствую, коллеги!
Вот недавно тоже столкнулся с разметкой хлебных крошек, а именно с проблемой ошибки на активной крошке. Использовал рекомендацию ProtectYourSite и указанный источник. В общем делаем так: для того, чтобы последняя активная крошка была не ссылкой и при этом проходила валидацию необходимо обернуть последний span еще одним с указанием itemid, т.е вот так:
Код
<span itemid="здесь абсолютная ссылка на материал" itemtype="http://schema.org/Thing" itemscope itemprop="item" >
   <span itemprop="name">Название материала</span>
</span>

После этого разметка крошек проходит валидацию
Полная разметка файла breadcrumbs выглядит так:
Код
<?php

defined ('_JEXEC') or die();

?>

<ul itemscope itemtype="https://schema.org/BreadcrumbList" class="mod-breadcrumb">
<?php if ($params->get('showHere', 1)) : ?>
<li class="bc-youarehere">
<?php echo JText::_('MOD_BREADCRUMBS_HERE'); ?>&#160;
</li>
<?php else : ?>
<li class="bc-icon__home">
<i class="divider fas fa-home" aria-hidden="true"></i>
</li>
<?php endif; ?>

<?php
// Get rid of duplicated entries on trail including home page when using multilanguage
for ($i = 0; $i < $count; $i++)
{
if ($i === 1 && !empty($list[$i]->link) && !empty($list[$i - 1]->link) && $list[$i]->link === $list[$i - 1]->link)
{
unset($list[$i]);
}
}

// Find last and penultimate items in breadcrumbs list
end($list);
$last_item_key   = key($list);
prev($list);
$penult_item_key = key($list);

// Make a link if not the last item in the breadcrumbs
$show_last = $params->get('showLast', 1);

// Generate the trail
foreach ($list as $key => $item) :
if ($key !== $last_item_key) :
if (!empty($item->link)) :
$breadcrumbItem = '<a itemprop="item" href="' . $item->link . '" class="pathway"><span itemprop="name">' . $item->name . '</span></a>';
else :
$breadcrumbItem = '<span itemprop="name">' . $item->name . '</span>';
endif;
// Render all but last item - along with separator ?>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="breadcrumb-item"><?php echo $breadcrumbItem; ?>
<meta itemprop="position" content="<?php echo $key + 1; ?>">
</li>
<?php elseif ($show_last) :
$breadcrumbItem = '<span itemprop="name">' . $item->name . '</span>';
// Render last item if reqd. ?>
<li itemprop="itemListElement" itemscope itemtype="https://schema.org/ListItem" class="breadcrumb-item active">
<span itemid="<?php echo $item->link; ?>" itemtype="http://schema.org/Thing" itemscope itemprop="item" >
<?php echo $breadcrumbItem; ?>
</span>
<meta itemprop="position" content="<?php echo $key + 1; ?>">
</li>
<?php endif;
endforeach; ?>
</ul>


Может пригодится кому.
*

romagromov

  • Давно я тут
  • 692
  • 9 / 3
Re: Микроразметка Хлебных крошек
« Ответ #11 : 17.09.2019, 20:02:41 »
Не работает...
*

ProtectYourSite

  • Живу я здесь
  • 2364
  • 137 / 4
  • Безопасность вебсайтов
*

beliyadm

  • Легенда
  • 9758
  • 1665 / 66
  • Севастополь, Россия
Re: Микроразметка Хлебных крошек
« Ответ #13 : 17.09.2019, 23:36:48 »
Все работает, вот пример моей разметки http://bcks.su/afisha/otkrytie-futbolnogo-polya-p-khmelnitskoe
Проходит валидацию на яндексе без проблем

Код шаблона крошек templates\шаблон\html\mod_breadcrumbs\default.php (у меня там иконки и тд, не суть важно, главное это добавить параметр content с уровнем вложенности), посмотрите исходный код страницы и все будет понятно
Спойлер
[свернуть]
Все истины, которые я хочу вам изложить, — бесстыдная ложь. Сделать всё хорошо
TLG: @Beliyadm
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Настройка хлебных крошек

Автор niktitik

Ответов: 1
Просмотров: 2571
Последний ответ 20.02.2021, 12:55:49
от beliyadm
Микроразметка в Joomla 3.6 и выше

Автор Besa

Ответов: 11
Просмотров: 6594
Последний ответ 14.10.2019, 11:04:32
от BaklanVasya