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

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Доброго времени вам!

Может кто-то сталкивался и решал подобное. Быстрый поиск не дал результатов.
Суть: есть свой компонент и модуль к нему. Модуль выводит фильтрацию. Появилась необходимость привязывать модуль к страницам конечных категорий.

Ссылка на категорию это последнее вложение в меню, а отсюда следует, то что все что пойдет дальше этой ссылки будет иметь все привязки модулей.

Так вот в выводе товара этот модуль не нужен. Как избавиться от него? А точнее, от содержимого я избавился, а вот место под модуль все-равно отрезается.

Можно ли это решить не влезая в шаблон?
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
А точнее, от содержимого я избавился
А как именно избавились?

Такое нередко приходится делать. Если не хочется ставить условия в общем шаблоне, то можно в макете самого модуля. Поставить проверку до вывода контента модуля, если его не должно быть, то делать return false; (работает в любом подключаемом пхп-скрипте). А чтоб не было "пустого места" вместо модуля - выводите его без обертки. Для этого в настройках модуля надо выбрать стиль none.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
А как именно избавились?
Вот так в точке входа
Код
// No direct access
defined( '_JEXEC' ) or die;
$app = JFactory::getApplication();
$input = $app->input;
if ($input->get('view','')=='cake') return false;


Попробовал ваш совет со стилем none не помогло
Остается вот такой вывод в любом случае
Код
<div id="sp-left" class="col-sm-3 col-md-3"><div class="sp-column custom-class"></div></div>
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
Остается вот такой вывод в любом случае
Похоже, что это верстка левой колонки из шаблона. В этом случае из модуля ее не вырезать. Там обычно стоит проверка на количество модулей в позиции. А ваш модуль, хоть и не выводит ничего, но засчитывается, что он там есть. Можно изменить проверку на наличие контента в позиции, а не на количество, но это уже изменения в шаблоне.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Нашел вот такое
Код
if ($this->countModules( 'your-module-position' ) && modulesHaveContent( 'your-module-position' )) { /* The code you want */ }

function modulesHaveContent( $position ) { 
    $modules = JModuleHelper::getModules( $position );

    foreach($modules as $module) {
        if (!empty($module->content)) {
            $moduleHasContent = true;
        }
    }

    return $moduleHasContent;
}

Но это в шаблоне... Видимо туда пойдем
Спасибо за помощь +
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
Попробуйте вот такую конструкцию:

Код
if ($this->countModules( 'your-module-position' ) && !empty( $positionContent = trim(JHtml::_('content.prepare', '{loadposition your-module-position}')) )) { echo $positionContent; }

Это предотвратит двойное выполнение модулей. И еще я не уверен, что $module->content будет пустым, если в макете использован return false;
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Попробуйте вот такую конструкцию:

Код
if ($this->countModules( 'your-module-position' ) && !empty( $positionContent = trim(JHtml::_('content.prepare', '{loadposition your-module-position}')) )) { echo $positionContent; }

Это предотвратит двойное выполнение модулей. И еще я не уверен, что $module->content будет пустым, если в макете использован return false;
Огромное спасибо! Ваш код работает в отличии от того что привел я.
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
ну и отлично  *DRINK*
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
Спрошу еще в рамках топика. Мой шаблон helix3. Функции шаблона вынесены в системный плагин. Функция лежит в /plugins/system/helix3/core/helix3.php
Класс Helix3, функция countModules($position)

Как правильно переопределить функцию?

Вот такой вот плагин не прокатывает. С переопределением мало я работал пока.
Код
class plgSystemCountmoduleshelix3 extends Helix3
{
//Count Modules
public static function countModules($position)
{
$doc = JFactory::getDocument();
//Дополнительно проверяем содержимое
return (  ( $doc->countModules($position) && !empty( $positionContent = trim(JHtml::_('content.prepare', '{loadposition '.$position.'}')) ) ) or self::hasFeature($position));

}
}
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
В плагин счетчика модулей лучше не встраивать ту конструкцию. Потому что, во-первых, счетчик будет считать неправильно (пустой модуль ведь все равно модуль и должен быть посчитан). А во-вторых, у вас при таком подходе генерация модулей будет происходить дважды - сперва в счетчике, затем в шаблоне.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
*

platonische

  • Давно я тут
  • 523
  • 2 / 1
  • Парусные экспедиции vk.com/tc670
В плагин счетчика модулей лучше не встраивать ту конструкцию. Потому что, во-первых, счетчик будет считать неправильно (пустой модуль ведь все равно модуль и должен быть посчитан). А во-вторых, у вас при таком подходе генерация модулей будет происходить дважды - сперва в счетчике, затем в шаблоне.
Это и есть функция шаблона. Он лезет к своим плагинам и там обсчитывает видимо. шаблон - helix3
*

sivers

  • Живу я здесь
  • 2462
  • 335 / 0
Это и есть функция шаблона. Он лезет к своим плагинам и там обсчитывает видимо. шаблон - helix3
Это понятно. Но вот эта штука:
Код
JHtml::_('content.prepare', '{loadposition '.$position.'}')
она запускает обработчик контента (плагин) для подготовки к выводу, который находит в тексте фрагменты {loadposition} и подгружает/выполняет модули этих позиций. Возвращает готовый контент, сгенеренный этими модулями. Его остается только вывести уже. Если делать это внутри функции-счетчика, а счетчик вернет только число модулей (или 0 если контента нет), то потом для вывода контента модулей этой позиции придется еще раз проделать всю работу по генерации контента модулей, только уже вне функции. А некоторые модули при этом бывают ресурсоемкими... Двойное выполнение кода на странице - крайне нежелательно. А тут еще и неизвестно заранее какие модули будут выведены в позицию. Поэтому лучше не использовать такую конструкцию внутри счетчика. В шаблоне можно. И то желательно потом вместо позиции модулей вывести именно то, что вернула функция.

Для вашей же задачи, возможно, подойдет другой способ. Вывести модуль в макете категории (через тот же {loadposition}), а в карточке товара его не выводить. Но это если структура верстки позволяет.
Еще проще - добавить проверку на параметр view и, если обнаружено, что открыта карточка товара, то уменьшать счетчик модулей на 1. Но это будет костыль для конкретной задачи.
На связи в telegram @sivers
sivers @ inbox . ru
https://sivers.su/
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Счётчик полей в админке модуля

Автор zeus07

Ответов: 9
Просмотров: 559
Последний ответ 28.06.2021, 13:40:31
от zeus07
Проблема вызова модели компонента из модуля

Автор platonische

Ответов: 1
Просмотров: 573
Последний ответ 24.04.2020, 18:32:32
от platonische
Pagination компонента и данные из формы модуля

Автор platonische

Ответов: 4
Просмотров: 625
Последний ответ 29.01.2020, 11:32:43
от mardok
Доступ к переменной модели из модуля

Автор platonische

Ответов: 18
Просмотров: 1602
Последний ответ 11.01.2020, 22:21:42
от robert
com_ajax использование модуля

Автор Wertos

Ответов: 32
Просмотров: 4679
Последний ответ 24.11.2019, 18:33:57
от CB9T