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

Beer

  • Moderator
  • 1103
  • 43 / 1
  • БИРУ - БИР!
 Подробности в Joomla и пр. - http://joomlaforum.ru/index.php/topic,197079.0.html

 Почти решено. Надо как-то добавить AggregateRating - непонятно как получить числовые данные на странице.
 Так же можно добавить и теги Opengraph.

Думаю, что для фото надо спользовать эту схему микроразметки: http://schema.org/ImageObject

Спойлер
[свернуть]

 Добавляем в начало файла /components/com_joomgallery/views/detail/tmpl/default.php
Код
<div class="hide" itemscope itemtype="http://schema.org/ImageObject">
  <h1 itemprop="name"><?php echo $this->escape($this->image->imgtitle); ?></h1>
  <img src="<?php echo $this->image->img_src; ?>"
  alt="<?php echo $this->image->imgtitle;?>"
  itemprop="contentUrl" />
  By <span itemprop="author"><?php echo $this->image->author; ?></span>
  Date uploaded:
    <meta itemprop="datePublished" content="<?php echo JHTML::_('date', $this->image->imgdate, JText::_('Y-m-d')); ?>">
<span itemprop="description"><?php echo JHTML::_('joomgallery.text', $this->image->imgtext); ?></span>
</div>

В результате имеем:
Код
<div itemscope itemtype="http://schema.org/ImageObject">
  <h1 itemprop="name">Shinsuke Kinoshita - Stunt Grand Prix Bydgoszcz - 2011</h1>
  <img src="http://www.vodkomotornik.ru/images/com_joomgallery/img_details/003/stunt_grand_prix_2011_51/img_1874_20110719_1652023583.jpg"
  alt="Shinsuke Kinoshita - Stunt Grand Prix Bydgoszcz - 2011"
  itemprop="contentUrl" />
  By <span itemprop="author">Valery</span>
  Date uploaded:
    <meta itemprop="datePublished" content="2011-08-07">
  <span itemprop="description"><script type="text/javascript">
    function currentvideo(id, title, descr) {
        var xmlhttp;
        if (window.XMLHttpRequest) {
            xmlhttp = new XMLHttpRequest();
        }
        else {
            xmlhttp = new ActiveXObject("Microsoft.XMLHTTP");
        }
        xmlhttp.onreadystatechange = function()
        {
            if (xmlhttp.readyState == 4 && xmlhttp.status == 200) {
            }
        }
        xmlhttp.open("GET", "index.php?option=com_hdflvplayer&task=addview&thumbid=" + id, true);
        xmlhttp.send();
        var wndo = new dw_scrollObj('wn', 'lyr1');
        wndo.setUpScrollbar("dragBar", "track", "v", 1, 1);
        wndo.setUpScrollControls('scrollbar');
    }
</script>
Stunt Grand Prix Bydgoszcz - 2011</span>
</div>


В описание попадает скрипт - хз как он туда попадает,
Спойлер
[свернуть]

 Но на результат он не влияет: Проблем нет.

 Тестируем тут: https://developers.google.com/structured-data/testing-tool/
« Последнее редактирование: 29.07.2015, 15:28:14 от Beer »
*

Beer

  • Moderator
  • 1103
  • 43 / 1
  • БИРУ - БИР!
Вот на такой образец разметки еще наткнулся:
Код
<div itemscope itemtype="http://schema.org/ImageGallery">
    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="large-image.jpg" itemprop="contentUrl">
            <img src="small-image.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
        <meta itemprop="width" content="300">
        <meta itemprop="height" content="600">
        <figcaption itemprop="caption description">
            Long image description
            <span itemprop="copyrightHolder">Photo: AP</span>
        </figcaption>
    </figure>
    <figure itemprop="associatedMedia" itemscope itemtype="http://schema.org/ImageObject">
        <a href="large-image.jpg" itemprop="contentUrl">
            <img src="small-image.jpg" itemprop="thumbnail" alt="Image description" />
        </a>
        <figcaption itemprop="caption description">Long image description</figcaption>
    </figure>
    ...
</div>

 Что будет правильнее?
*

Maffo

  • Захожу иногда
  • 175
  • 1 / 0
Насколько актуален этот код в 201 году? Вплотную подошел в вопросу внедрения микроразметки в JoomGallery *POPCORN*
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

JoomGallery Не меняется заголовок для категории и детального вида

Автор RTEagle

Ответов: 0
Просмотров: 1808
Последний ответ 11.08.2018, 14:50:58
от RTEagle
JoomGallery - не работают опции детального вида

Автор alanbus

Ответов: 5
Просмотров: 3585
Последний ответ 27.04.2017, 21:55:36
от lukinalek
[Решено] Удаление своих фотографий пользователями в JoomGallery 2.1.4

Автор Ariy84

Ответов: 2
Просмотров: 2768
Последний ответ 11.12.2016, 17:36:08
от anoorik
[Решено] CDN + JoomGallery

Автор Sni10

Ответов: 3
Просмотров: 3795
Последний ответ 22.12.2015, 15:52:58
от AdWeb
[Решено] JoomGallery + FancyBox из Simple Image Gallery PRO

Автор x1

Ответов: 14
Просмотров: 7643
Последний ответ 30.07.2015, 04:36:35
от lexxxart