[FAQ] Условия вывода модулей в JoomShopping

  • 275 Ответов
  • 50404 Просмотров

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

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Обновление поста 21.11.2014, рецепты ниже не будут работать на J1.5, J1.6, J1.7. Только для последних версий J2.5 и J3.x

По мотивам - Различные условия в шаблонах

Варианты вызова модуля в шаблонах компонента Jshop

[spoiler title=как вызвать модуль, например, в шаблоне категории или товара, 3 способа]1. Вывод конкретного модуля, на примере модуля меток
Код: php
<?php echo JHTML::_('content.prepare', '{loadmodule mod_jshopping_label_products}'); ?>


2. Вывод любого (всех) модулей, опубликованных в конкретной позиции - bottom
Код: php
<?php echo JHTML::_('content.prepare', '{loadposition bottom}'); ?>

3. Еще вариант вызова модулей по позиции
Код: php
<?php  $modules = JModuleHelper::getModules('Указать позицию модулей');
if ($modules && is_array($modules)) {
foreach ($modules as $module) {
//заголовок
echo $module->title;
//контент
echo JModuleHelper::renderModule($module);
};
} ?>
[/spoiler]

Различные условия в шаблоне Joomla (templates/ВАШ_Шаблон/index.php)

1. Получаем необходимые параметры

Перед составлением условий, рекомендую - отключить SEF, тогда будет видно в URL какие у вас параметры

Код: php
$input = JFactory::getApplication()->input;
$option = $input->getCmd('option', '');
$controller = $input->getCmd('controller', '');

$option определяет компонент, в нашем случае $option это 'com_jshopping'
$controller работает уже внутри компонента - это может быть 'category', 'product', 'cart' и другое; все это можете узнать отключив SEF в настройках и посмотрев чему равен $controller (в адресной строке) на интересующих вас страницах.

Логические операторы
(для совсем новичков, чтоб вы сами могли составлять условия)
[spoiler title=логические операторы]
==  РАВНО
напр. - $controller == 'product' (показать в товарах)
!=  НЕ РАВНО!
напр. - $controller != 'product' (НЕ показывать в товарах)
&&  И
напр. - $controller == 'category' && $controller == 'product' (и в категориях и в товарах)[/spoiler]

Примеры для шаблона Joomla (templates/ВАШ_Шаблон/index.php)

1. Компонент Jshop установлен как главный пункт меню (для красивых ссылок, допустим), но не хотим выводить его на главной
Код: php
<?php if (JURI::current()!= JURI::base()):?> //само условие
<jdoc:include type="component" /> //непосредственно вывод компонента
<?php endif;?>

2. Позицию модуля не показывать в корзине и при оформлении заказа
Код: php
<?php if ( $option == 'com_jshopping' && $controller != 'cart' && $controller != 'checkout' ) : ?>
<jdoc:include type="modules" name="left" />
<?php endif; ?>

3. Показать модуль только в категории, у которой ID=5
Код: php
<?php if ( $option == 'com_jshopping' && $controller == 'category' && $category_id == '5') : ?>
<jdoc:include type="modules" name="left" />
<?php endif; ?>
тут новая переменная - $category_id, поэтому в самом начале ее тоже нужно определить
Код
$category_id = $input->getCmd('category_id', '');
и т.д., думаю, смысл понятен - можно составлять различные комбинации

Различные условия в шаблонах компонента Joomshopping

Первым делом переопределяем шаблоны -  всю папку /components/com_jshopping/templates/default/ копируем, переименовываем в com_jshopping и загружаем по адресу /templates/ваш_шаблон/html/*

1. Выводить описание категории только на первой странице (на второй и последующих - описания не будет)
/templates/ваш_шаблон/html/com_jshopping/category/category_default.php
Код: php
<?php 
        $input = JFactory::getApplication()->input;
$start = $input->getCmd('limitstart', 0);
$option = $input->getCmd('option', '');
If (!$start && $option == 'com_jshopping'){ ?>
<?php print $this->category->description?> //описание категории товаров
<?php } ?>

2. Выводить что угодно в магазине только для авторизованных пользователей
Код: php
<?php
$user = JFactory::getUser();
if ($user->get('guest') == '1') { } else { ?>
//тут что-то выводим (например цена для оптовиков)
<?php } ?>

В основном мануал собран из тех решений что уже встречались на форуме, для вашего удобства - всё в одном месте, довольно подробно, с пояснениями, - поэтому не стесняйтесь - экспериментируйте с условиями :)
« Последнее редактирование: 22.11.2014, 20:40:37 от ELLE »

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867


<?php if ( $this->countModules('my_module') && $option == 'com_jshopping' && $controller != 'category' && $controller != 'cart' ) : ?>
    <jdoc:include type="modules" name="my_module" />
<?php endif; ?>

данный модуль не будет показан в категориях и в корзине, ну и остальное по аналогии

а в начале надо определить переменные
$option = JRequest::getVar('option', null);
$controller = JRequest::getVar('controller', null);

« Последнее редактирование: 31.08.2012, 03:48:29 от ELLE »

*

aorr

  • Захожу иногда
  • **
  • 15
  • 0
А если добавить в шаблон странички товара модульную позицию?
или так делать неправильно?

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
почему же неправильно, делайте как вам нужно :)
-----------------
только не в шаблон странички товара в прямом смысле, делается на уровне шаблона Joomla по указанному принципу

<?php if ( $this->countModules('zakaz') && $option == 'com_jshopping' && $controller == 'product' ) : ?>
<jdoc:include type="modules" name="zakaz" />
<?php endif; ?>
« Последнее редактирование: 21.05.2012, 14:44:09 от ELLE »

*

aorr

  • Захожу иногда
  • **
  • 15
  • 0
<?php if ( $this->countModules('zakaz') && $option == 'com_jshopping' && $controller == 'product' ) : ?>
<jdoc:include type="modules" name="zakaz" />
<?php endif; ?>

Этот момент полностью понятен, Спасибо.

А вот если в шаблоне странички товара components/com_jshopping/templates/default/product/product_default.php разместить модульную позицию?
Какой вариант более правильный или корректный?

*

aorr

  • Захожу иногда
  • **
  • 15
  • 0
Код: php
<?php  $modules = JModuleHelper::getModules('Указать позицию модулей');
if ($modules && is_array($modules)) {
foreach ($modules as $module) {
//заголовок
echo $module->title;
//контент
echo JModuleHelper::renderModule($module);
};
} ?>
Вот сейчас как раз этот вариант и использую.

Но подумал, что может правильнее:
<?php if ( $this->countModules('my_module') && $option == 'com_jshopping' && $controller != 'category' && $controller != 'cart' ) : ?>
    <jdoc:include type="modules" name="my_module" />
<?php endif; ?>

Или особой разницы нет и на производительности это никак не сказывается?

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Efanych, а вот как не модуль вывести через шаблон карточки товара product_default.php , а вот это <jdoc:include type="message" /> ?

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Да, ссылку воланда тож видела)
ладно, буду пробовать, спс.

*

user5

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
а в начале надо определить переменные
$option = JRequest::getVar('option', null);
$controller = JRequest::getVar('controller', null);

подскажите пожалуйста где это сделать?

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
templates/шаблон/index.php
после
<?php
// No direct access.
defined('_JEXEC') or die;

*

user5

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #10 : 05.08.2012, 15:34:28 »
как написать,чтобы когда допустим левая колонка пуста,т.е нет модулей в ней на этой страничке,другой модуль принимал ширину 100%?где-то встречал,но не помню где.заранее благодарен!

*

user5

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #11 : 05.08.2012, 15:51:09 »
Работает корректно только на страницах JS. .Модуль пропадает со всех страниц не являющихся страничкой JS.Как быть?
<?php if ( $this->countModules('user5') && $option == 'com_jshopping' && $controller != 'product' ) : ?>
    <jdoc:include type="modules" name="user5" />
<?php endif; ?>
« Последнее редактирование: 05.08.2012, 16:00:13 от user5 »


*

user5

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #13 : 05.08.2012, 17:25:22 »
Различные условия в шаблонах
спасибо,получилось.вот только с этим никак:
Работает корректно только на страницах JS. .Модуль пропадает со всех страниц не являющихся страничкой JS.Как быть?
<?php if ( $this->countModules('user5') && $option == 'com_jshopping' && $controller != 'product' ) : ?>
    <jdoc:include type="modules" name="user5" />
<?php endif; ?>

*

user5

  • Осваиваюсь на форуме
  • ***
  • 41
  • 0
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #14 : 05.08.2012, 17:49:55 »
спасибо)

*

Oleg24

  • Осваиваюсь на форуме
  • ***
  • 45
  • 1
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #15 : 20.08.2012, 16:36:24 »
ELLE, подскажите, что я делаю не так:(

после defined('_JEXEC') or die; в шаблоне вставляю переменные
$option = JRequest::getVar('option', null);
$controller = JRequest::getVar('controller', null);

Затем в коде <?php if ( $this->countModules('my_module') && $option == 'com_jshopping' && $controller != 'category' && $controller != 'cart' ) : ?>
    <jdoc:include type="modules" name="my_module" />
<?php endif; ?>

меняю my_module на название своего модуля (mod_jshopping_last_visit_products) и вставляю в шаблон.

Уже как только не пробовал, модуль все равно выводится и в корзине и в категории:(

J 2.5, JS 2.8.1

Что я делаю не так? :(

сайт klever-floor.ru

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #16 : 20.08.2012, 16:41:41 »
позицию нужно прописать, а не название модуля

*

Oleg24

  • Осваиваюсь на форуме
  • ***
  • 45
  • 1
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #17 : 20.08.2012, 16:44:25 »
то есть, если это левая колонка, то все что будет в ней прописано не будет выводится в корзине и категориях?


*

Oleg24

  • Осваиваюсь на форуме
  • ***
  • 45
  • 1
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #19 : 20.08.2012, 16:47:40 »
от блин... а мне нужно только модуль...

ладно, спасибо! Буду искать решение дальше:(

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #20 : 20.08.2012, 16:49:28 »
ну так можно под него новую позицию сделать...

*

Oleg24

  • Осваиваюсь на форуме
  • ***
  • 45
  • 1
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #21 : 24.08.2012, 14:47:07 »
ELLE, подскажите пожалуйста. Все сделал так Вы и сказали - работает, спасибо!  (+)

Еще остался такой вопрос - модуль "Вы смотрели" не отображается в списке товаров, как его туда добавить? например http://klever-floor.ru/laminat

Вообще нужно чтобы модуль вы смотрели не отображался только на главной и в корзине, во всех остальных местах в-принципе он не критичен.

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #22 : 24.08.2012, 15:11:27 »
список товаров это
$controller == 'category'

корзина это -
$controller == 'cart'

попробуйте так
<?php if (JURI::current()!= JURI::base() && $controller != 'cart' ):?>
не на главной и не в корзине
<?php endif;?>

*

Oleg24

  • Осваиваюсь на форуме
  • ***
  • 45
  • 1
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #23 : 24.08.2012, 16:11:58 »
ELLE, все работает! СПАСИБО!

*

Silent_Breeze

  • Осваиваюсь на форуме
  • ***
  • 167
  • 33
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #24 : 27.08.2012, 04:05:05 »
Сделал так:
  • Поставил Advanced Module Manager - http://www.nonumber.nl/extensions/advancedmodulemanager(В любом случае нужен был и для других целей)
  • Опубликовал фильтр в позицию (в моём случае это была "Left")
  • Открыл редактирование модуля
  • Открыл слайдер "Отображение модуля по условиям"
  • Условие "Компоненты", жмём "Выбрать" и в списке выбираем (ставим галочку напротив) JoomShopping (что бы фильтр показывался только в магазине)
  • Условие "URL", "Активировать при" выбираем "Исключить выбранное". В поле "Соответствие URL (SEF вЫключен)" вставляем части ссылок: com_jshopping&controller=product и com_jshopping&controller=cart (соответственно, что бы пустой модуль фильтра скрывался и не занимал колонку "Left" при показе карточки товара и корзины.)

Надеюсь не сильно запутанно описал?
« Последнее редактирование: 27.08.2012, 04:08:12 от Silent_Breeze »
Здесь всё есть... просто нужно поискать немного... ;)

*

Sinn

  • Захожу иногда
  • **
  • 23
  • 0
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #25 : 05.09.2012, 21:06:25 »
Мне нужно что бы модуль выводился только на главной странице категорий.
после defined('_JEXEC') or die; в шаблоне вставляю переменные
$option = JRequest::getVar('option', null);
$controller = JRequest::getVar('controller', null);

Потом пробую вставить код, но Dreamviewer ругается из-за синтаксической ошибки ...
Если убираю <?php ругаться перестает, но ничего так и не работает

С ошибкой вроде разобрался. Поставил ?> перед копируемым кодом.
Но нужная позиция все равно отображается на всех страницах, плюс в самом низу страницы отображается дубль содержимого позиции. Но уже на нужной странице
« Последнее редактирование: 07.09.2012, 00:51:26 от Sinn »

*

Phoenix88

  • Осваиваюсь на форуме
  • ***
  • 81
  • 3
  • Нет предела самосовершенствованию
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #26 : 13.09.2012, 16:48:22 »
Спасибо большое.. добавила модуль в страничку товара.

<?php if ( $this->countModules('last_2') && $option == 'com_jshopping' && $controller == 'product' ) : ?>
<jdoc:include type="modules" name="last_2" />
<?php endif; ?>

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


МОДУЛЬ - lastest products
(=~ Овечки - для слабаков! Перед сном считай интегралы ~=)

*

ELLE

  • Support Team
  • *****
  • 4577
  • 867
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #27 : 13.09.2012, 16:51:11 »
смотрите то, что первом посте -
Варианты вызова модуля в шаблонах компонента Jshop
- этот способ вам больше подойдет (если правильно поняла вопрос)

*

Phoenix88

  • Осваиваюсь на форуме
  • ***
  • 81
  • 3
  • Нет предела самосовершенствованию
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #28 : 13.09.2012, 16:52:42 »
сейчас проверю сорри
(=~ Овечки - для слабаков! Перед сном считай интегралы ~=)

*

Phoenix88

  • Осваиваюсь на форуме
  • ***
  • 81
  • 3
  • Нет предела самосовершенствованию
Re: [FAQ] Условия вывода модулей в JoomShopping
« Ответ #29 : 13.09.2012, 17:07:38 »
сейчас проверю сорри

Модуль привязан к определённой категории таким образом, чтобы отображать товары только из определённой категории..
с левой стороны у меня блок с товарами, а с правой контент.
При нажатии на товар в модуле (если прописать модуль для отдельных страниц, в моём случае - это категории товаров в меню), при отображении товара, пропадает модуль..
А отобразить модуль для всех страниц естественно не подходит.
вот я и пытаюсь прописать условия для категории и модуля, присвоенного данной категории и товара и модуля, присвоенного его категории..

Знаю всё очень запутано..... Сама не могу разобраться, тк занимаюсь вёрсткой, а в программировании ни так ни сяк))
(=~ Овечки - для слабаков! Перед сном считай интегралы ~=)