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

Mariannka

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Здравствуйте!
Как сделать чтобы иконка (изображение) категории не выводилась в саму категорию (Если сделать ее не разрешенной, тогда категория тоже исчезает из списка)? Ведь если делать категория/подкатегория, то в родительской (главной) категории не должно быть никаких изображений, а туда лезет изображение самой категории.
« Последнее редактирование: 12.05.2015, 16:31:09 от Mariannka »
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Определенная картинка категории
« Ответ #1 : 12.05.2015, 16:59:07 »
в настройках фоки - Category View - Display Image Instead Of Folder Icon. Или надо чтобы это только для вложенных категорий работало?
*

Mariannka

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Определенная картинка категории
« Ответ #2 : 12.05.2015, 17:07:57 »
в настройках фоки - Category View - Display Image Instead Of Folder Icon. Или надо чтобы это только для вложенных категорий работало?
http://www.phoca.cz/documents/2-phoca-gallery-component/511-tips тут написано что нужно просто фото отключить как не разрешенное,
Спойлер
[свернуть]
но тогда у меня категория вообще исчезает из списка категорий, категории я вывожу на главную страницу сайта с помощью плагина PhocaGallery Кнопка Плагин http://www.phoca.cz/phocagallery-button

Нужно чтобы это работало для главных категорий и при возможности и для вложенных.
« Последнее редактирование: 12.05.2015, 17:15:46 от Mariannka »
*

Mariannka

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Re: Определенная картинка категории
« Ответ #3 : 12.05.2015, 17:19:14 »
Нужно чтобы вот это не выводилось, но если запретить это фото в админке, тогда категория главная изсчезает вообще из списка всех категорий.
Это зачеркнутое фото является картинкой родительской категории, но это фото в самой категории раздела быть не должно. Главная категория должна быть пустой, потому что в ней будут только подкатегории.
*

SeBun

  • BanMaster
  • 4030
  • 259 / 5
  • @SeBun48
Re: Определенная картинка категории
« Ответ #4 : 29.06.2015, 01:23:22 »
Есть категория и есть подкатегория. В категории картинок нет. Есть папка категории, в ней - только папки подкатегорий. Я заливаю изображение в папку категории обычным образом. Затем идем в настройки публикации. Опубликовано - опубликовано. Разрешить - запрещено. И картинка не отображается при открытии категории, но папка сменила значок на превью. То, что нужно, если бы в скобках не выводило, что в этой папке есть 1 картинка.

У вас категория может исчезать, если в настройках стоит параметр "Показывать пустые категории" - Нет. Источник.
Оказываю услуги по Joomla | Миграция/Обновление | Сопровождение | IT-аутсорсинг | Недорогие домены и хостинг
*

Ilhom666

  • Завсегдатай
  • 1384
  • 184 / 0
Re: Определенная картинка категории
« Ответ #5 : 17.07.2015, 20:35:05 »
кстати, у меня этот трюк не срабатывает, правда по-другому. Если делаю первую картинку опубликованной и разрешенной, то она как миниатюра категории срабатывает, но ес-но внутри показывается. Если отключаю "Authorized" - то и в категории исчезает и миниатюрой становится картинка следующая по списку.
..UPD..
Так и не нашел как сделать такой вывод миниатюры чисто по понятиям в фоке 4.1.2., пришлось сделать хаком.
в файле \components\com_phocagallery\views\category\tmpl\default_images.php
вместо
   
Код: php
			// IMG Start
if ($extImage && isset($cv->extm) && isset($correctImageRes['width']) && isset($correctImageRes['width'])) {

echo JHtml::_( 'image', $cv->extm, '', array('width' => $correctImageRes['width'], 'height' => $correctImageRes['height'], 'class' => PhocaGalleryRenderFront::renderImageClass($cv->extm)));
} else {
echo JHtml::_( 'image', $cv->linkthumbnailpath, '', array( 'class' => PhocaGalleryRenderFront::renderImageClass($cv->linkthumbnailpath)) );
}
// IMG END
вписал
   
Код: php
			// IMG Start
if ($extImage && isset($cv->extm) && isset($correctImageRes['width']) && isset($correctImageRes['width'])) {
echo JHtml::_( 'image', $cv->extm, '', array('width' => $correctImageRes['width'], 'height' => $correctImageRes['height'], 'class' => PhocaGalleryRenderFront::renderImageClass($cv->extm)));
} else {
// Здесь порылась собака
//var_dump($cv);
if ($cv->id==XXX):
echo "<img src='".JURI::base()."images/hardcore.jpg'>";
elseif ($cv->id==YYY):
echo "<img src='".JURI::base()."images/amateurs.jpg'>";
........
else:
echo JHtml::_( 'image', $cv->linkthumbnailpath, '', array( 'class' => PhocaGalleryRenderFront::renderImageClass($cv->linkthumbnailpath)) );
endif;
}
// IMG END
где XXX, YYY - ID нужных категорий
« Последнее редактирование: 23.07.2015, 15:20:18 от Ilhom666 »
*

Sergey2

  • Давно я тут
  • 651
  • 15 / 1
Re: Определенная картинка категории
« Ответ #6 : 20.08.2015, 21:38:19 »
Это хак, я так понимаю, не для всех способов вывода подходит. У меня мозаика и данный файл даже не вызывается. Я сделал несколько по другому. Нашел функцию, которая отвечает за получение изображений из категории и заставил ее выводить еще изображения из подддиректорий:

\administrator\components\com_phocagallery\libraries\phocagallery\image\imagefront.php

Код
            ' WHERE a.catid = '.(int) $categoryid.'
меняем  на
            ' WHERE (a.catid = '.(int) $categoryid.' OR c.parent_id = '.(int) $categoryid. ')'.
Правда я ожидал что при показе раздела будут выводиться так же и изображения из подразделов, но такого почему то не произошло. Вообщем у меня даный способ работает более чем хорошо.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Несколько картинок в категории

Автор worldmen

Ответов: 3
Просмотров: 2508
Последний ответ 08.05.2024, 17:01:59
от chechelnitskiy
Вывод конкретных изображений из категории по их ИДу

Автор nevill

Ответов: 0
Просмотров: 1238
Последний ответ 07.09.2018, 17:12:42
от nevill
При добавление кода в материал. Картинка на странице материала расползается

Автор antikvar99

Ответов: 0
Просмотров: 1060
Последний ответ 23.05.2018, 03:07:52
от antikvar99
Изображение категории

Автор jud1k

Ответов: 9
Просмотров: 2515
Последний ответ 22.05.2017, 21:06:30
от Ilhom666
Phoca Galley. Как при выводе родительской категории отобразить изображения всех дочерних категорий?

Автор Igoritaly

Ответов: 0
Просмотров: 1961
Последний ответ 15.04.2017, 19:05:50
от Igoritaly