Новости Joomla

Рендер пользовательского поля внутри другого пользовательского поля. Joomla 5.3

Писал ранее о том, как внутри одного пользовательского поля рендерить другое пользовательское поле. Применил для этого возможность Joomla обращаться к методам плагинов напрямую. Процитирую строчку кода из предыдущего поста:

<?php
$joomlaFieldContentPlugn->onContentPrepare('com_content.article', $fakeItem, $app->getParams());

Joomla постепенно переходит от простого указания аргументов для триггеров плагинов к собственным классам событий. Это позволяет не запоминать порядок передачи аргументов класса и использовать человекопонятные методы $event->getContext(), $event->getItem() и т.д. А то в одном месте в Joomla было $article, в другом - $item, в третьем ещё как-то... Порядку больше становится.

Сегодня обновил сайт клиентов до Joomla 5.3. В ней обновили контент-плагин fields и мой финт ушами с вызовом метода плагина отвалился потому, что я передавал в нём 3 аргумента, вместо одного. И для события onContentPrepare это должен быть объект класса ContentPrepareEvent. Как меняется фрагмент кода из предыдущего поста:

<?php
// мы находимся в файле макета поля

use Joomla\CMS\Event\Content\ContentPrepareEvent;
use Joomla\CMS\Factory;

$app = Factory::getApplication();
$fakeItem = new \stdClass();
// Получаем id текущего материала из объекта Input
$fakeItem->id = $app->getInput()->getInt('id');
// {field 29} - это шорт код вставки поля с id 29 - "ассортимент проекта"
// к содержимому поля конкатенируем шорт-код для обработки
$fakeItem->text = $field->value . '{field 29}';
// Получаем объект плагина
$joomlaFieldContentPlugn = $app->bootPLugin('fields', 'content');
// вызываем метод обработки напрямую
// вместо 3-х аргументов теперь указываем один
// это объект класса ContentPrepareEvent
$joomlaFieldContentPlugn->onContentPrepare(new ContentPrepareEvent('onContentPrepare', [
            'context' => 'com_content.article',
            'subject' => $fakeItem,
            'params'  => $app->getParams(),
            'page'    => 0,
        ]));
// выводим оба поля
echo $fakeItem->text;

@webtolkru 

Вышел релиз Joomla 5.3.0

Вышел релиз Joomla 5.3.0

Проект Joomla с радостью объявляет о выходе Joomla 5.3 — последней минорной версии в серии Joomla 5.

Этот релиз сосредоточен на продуманных улучшениях, которые совершенствуют работу с CMS. От лучшей организации файлов и журналирования задач до расширенной обработки электронной почты и улучшенной доступности — Joomla 5.3 помогает администраторам и разработчикам работать более эффективно, сохраняя ваш сайт современным, безопасным и готовым к будущему.

0 Пользователей и 1 Гость просматривают эту тему.
  • 4 Ответов
  • 2593 Просмотров
*

revil

  • Захожу иногда
  • 103
  • 5 / 0
Имеется такая структура

Категория 1 - подкатегория 1.1 - подкатегория 1.2 ...
Категория 2 - подкатегория 2.1 - подкатегория 2.2 ...
Категория 3 - подкатегория 3.1 - подкатегория 3.2 ...

Ссылки на корневые категории сделаны в виде картинок, эти ссылки отображаются на каждой странице.
Нужно чтобы "подсвечивалась картинка" той категории, в которой сейчас находится ползьзователь,
то есть, если он в подкатегории 2.2, то активным становится изображениие Категории 2.

Хотел посмотреть по url, но там не как не отображается иерархия подкатегорий, просто разные category_id.
Можно конечно тупо прописать для каждой картинки все category_id, когда ее нужно менять, но хотелось бы найти более изящное решение :)
*

tug

  • Захожу иногда
  • 333
  • 40 / 4
Забавно... недавно делал такой хак. В каком месте картинка нужна?
*

revil

  • Захожу иногда
  • 103
  • 5 / 0
вот ссылка на тестовую версию сайта http://artantiq.revil.ru, там по центру под меню как раз эти 3 нужные ссылки, буду признателен за помощь в решении :)
*

tug

  • Захожу иногда
  • 333
  • 40 / 4
В нужное Вам место в shop.browse.php (например перед строкой "$child_list = $ps_product_category->get_child_list($category_id);") вставьте следующий код
Код
  //<!-- tugged
  function get_category_image($category_id, $stoplevel = 2, $level = 0) {
    if($stoplevel && $level > $stoplevel) {
      return false;
    }
    else {
      $level++;
    }
   
    $db = new ps_DB;
    $q = "SELECT category_name, category_full_image, category_thumb_image, category_parent_id FROM #__{vm}_category, #__{vm}_category_xref WHERE category_id = '".$category_id."' AND category_child_id = category_id";
    $db->query($q);
   
    if( $db->f('category_thumb_image') ) $image = $db->f('category_thumb_image');
    elseif( $db->f('category_full_image') ) $image = $db->f('category_full_image');
   
    if( $image ) {
      $image = 'category/'.$image;
      $imagepath = IMAGEPATH.$image;
      $imageurl = IMAGEURL.$image;
    }
   
    if( is_file($imagepath) ) {
      return $imageurl;
    }
    else {
      if( $imageurl = get_category_image($db->f('category_parent_id'), $stoplevel, $level) ) {
        return $imageurl;
      }
      else {
        return false;
      }
    }
  }
 
  if( !empty($category_id) ) {   
    if( $imageurl = get_category_image($category_id) ) {
      echo '<p><img src="'.$imageurl.'" alt="'.$db->f('category_name').'" /></p>';
    }
    else {
      //echo '<p>Файл не найден</p>';
    }
  }
  // tugged -->
*

myorion

  • Осваиваюсь на форуме
  • 11
  • 1 / 0
Здравствуйте.
tug, спасибо за хак - пригодится.
А можно ли этот имидж главной категории поместить вне shop.browse.php
Например, где-то слева под главным меню сайта?
Подскажи, пожалуйста, как это реализовать!
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Скидка на категорию [почти решено]

Автор baloon

Ответов: 4
Просмотров: 2445
Последний ответ 06.04.2016, 20:00:27
от Ejov
Вывод категории и только некоторых подкатегорий

Автор ИринаМ

Ответов: 8
Просмотров: 1854
Последний ответ 30.04.2014, 11:20:17
от ИринаМ
Как вывести в категорию "Доступен Обычно отгружается в течение: "

Автор stardel

Ответов: 1
Просмотров: 1133
Последний ответ 10.10.2012, 17:19:24
от vtx
Как вывести категорию в таблице?

Автор Damag

Ответов: 1
Просмотров: 1347
Последний ответ 31.07.2012, 11:52:37
от Damag
Вывод подкатегорий на главной

Автор pl4cebo

Ответов: 0
Просмотров: 1147
Последний ответ 09.04.2012, 06:14:45
от pl4cebo