Форум русской поддержки Joomla!® CMS
05.12.2016, 02:29:27 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Страниц: [1] 2 3 4 5 6 7 8 9 10   Вниз
  Добавить закладку  |  Печать  
Автор

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

 (Прочитано 44758 раз)
0 Пользователей и 1 Гость смотрят эту тему.
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« : 17.05.2012, 14:25:20 »

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

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

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

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

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

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

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

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

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

Логические операторы
(для совсем новичков, чтоб вы сами могли составлять условия)
логические операторы

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

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

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

3. Показать модуль только в категории, у которой ID=5
Код
<?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 
       $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
$user = JFactory::getUser();
if ($user->get('guest') == '1') { } else { ?>
//тут что-то выводим (например цена для оптовиков)
<?php } ?>

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

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #1 : 17.05.2012, 14:48:27 »



<?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, 01:48:29 от ELLE » Записан
aorr
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 15


« Ответ #2 : 21.05.2012, 12:25:36 »

А если добавить в шаблон странички товара модульную позицию?
или так делать неправильно?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #3 : 21.05.2012, 12:38:59 »

почему же неправильно, делайте как вам нужно Azn
-----------------
только не в шаблон странички товара в прямом смысле, делается на уровне шаблона Joomla по указанному принципу

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

Репутация: +0/-0
Offline Offline

Сообщений: 15


« Ответ #4 : 21.05.2012, 13:09:31 »

<?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
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 15


« Ответ #5 : 21.05.2012, 13:38:05 »

Код
<?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
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #6 : 05.06.2012, 13:54:28 »

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

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #7 : 05.06.2012, 14:05:27 »

Да, ссылку воланда тож видела)
ладно, буду пробовать, спс.
Записан
user5
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 41


« Ответ #8 : 04.08.2012, 16:56:31 »

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

подскажите пожалуйста где это сделать?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #9 : 05.08.2012, 00:03:59 »

templates/шаблон/index.php
после
<?php
// No direct access.
defined('_JEXEC') or die;
Записан
user5
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 41


« Ответ #10 : 05.08.2012, 13:34:28 »

как написать,чтобы когда допустим левая колонка пуста,т.е нет модулей в ней на этой страничке,другой модуль принимал ширину 100%?где-то встречал,но не помню где.заранее благодарен!
Записан
user5
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 41


« Ответ #11 : 05.08.2012, 13: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, 14:00:13 от user5 » Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #12 : 05.08.2012, 14:02:29 »

Различные условия в шаблонах
Записан
user5
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 41


« Ответ #13 : 05.08.2012, 15:25:22 »

спасибо,получилось.вот только с этим никак:
Работает корректно только на страницах JS. .Модуль пропадает со всех страниц не являющихся страничкой JS.Как быть?
<?php if ( $this->countModules('user5') && $option == 'com_jshopping' && $controller != 'product' ) : ?>
    <jdoc:include type="modules" name="user5" />
<?php endif; ?>
Записан
user5
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 41


« Ответ #14 : 05.08.2012, 15:49:55 »

спасибо)
Записан
Oleg24
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 45



« Ответ #15 : 20.08.2012, 14:36:24 »

ELLE, подскажите, что я делаю не такSad

после 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) и вставляю в шаблон.

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

J 2.5, JS 2.8.1

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

сайт klever-floor.ru
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #16 : 20.08.2012, 14:41:41 »

позицию нужно прописать, а не название модуля
Записан
Oleg24
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 45



« Ответ #17 : 20.08.2012, 14:44:25 »

то есть, если это левая колонка, то все что будет в ней прописано не будет выводится в корзине и категориях?
Записан
ELLE
Support Team
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #18 : 20.08.2012, 14:46:02 »

да
Записан
Oleg24
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 45



« Ответ #19 : 20.08.2012, 14:47:40 »

от блин... а мне нужно только модуль...

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

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #20 : 20.08.2012, 14:49:28 »

ну так можно под него новую позицию сделать...
Записан
Oleg24
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 45



« Ответ #21 : 24.08.2012, 12:47:07 »

ELLE, подскажите пожалуйста. Все сделал так Вы и сказали - работает, спасибо!  (+)

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

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

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #22 : 24.08.2012, 13:11:27 »

список товаров это
$controller == 'category'

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

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

Репутация: +1/-0
Offline Offline

Пол: Мужской
Сообщений: 45



« Ответ #23 : 24.08.2012, 14:11:58 »

ELLE, все работает! СПАСИБО!
Записан
Silent_Breeze
Осваиваюсь на форуме
***

Репутация: +33/-0
Offline Offline

Сообщений: 168



« Ответ #24 : 27.08.2012, 02: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, 02:08:12 от Silent_Breeze » Записан
Sinn
Осваиваюсь на форуме
***

Репутация: +0/-0
Offline Offline

Сообщений: 26


« Ответ #25 : 05.09.2012, 19:06:25 »

Мне нужно что бы модуль выводился только на главной странице категорий.
после defined('_JEXEC') or die; в шаблоне вставляю переменные
$option = JRequest::getVar('option', null);
$controller = JRequest::getVar('controller', null);

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

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

Репутация: +3/-0
Offline Offline

Пол: Женский
Сообщений: 81


Нет предела самосовершенствованию


« Ответ #26 : 13.09.2012, 14: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
*****

Репутация: +862/-0
Offline Offline

Пол: Женский
Сообщений: 4723



« Ответ #27 : 13.09.2012, 14:51:11 »

смотрите то, что первом посте -
Варианты вызова модуля в шаблонах компонента Jshop
- этот способ вам больше подойдет (если правильно поняла вопрос)
Записан
Phoenix88
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Пол: Женский
Сообщений: 81


Нет предела самосовершенствованию


« Ответ #28 : 13.09.2012, 14:52:42 »

сейчас проверю сорри
Записан
Phoenix88
Осваиваюсь на форуме
***

Репутация: +3/-0
Offline Offline

Пол: Женский
Сообщений: 81


Нет предела самосовершенствованию


« Ответ #29 : 13.09.2012, 15:07:38 »

сейчас проверю сорри

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

Знаю всё очень запутано..... Сама не могу разобраться, тк занимаюсь вёрсткой, а в программировании ни так ни сяк))
Записан
Страниц: [1] 2 3 4 5 6 7 8 9 10   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet