FAQ Условия вывода модуля в шаблоне

Тема в разделе "Внешний вид, шаблоны, графика", создана пользователем OlegK, 13.03.2015.

  1. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    Код (PHP):
    1. $menu = & JSite::getMenu();
    2. if ($menu->getActive() == $menu->getDefault()) {
    3. // на главной
    4. } else {
    5. // тут всё что не на главной
    6. }

    Вывести модуль везде, кроме просмотра полной текста статьи
    Код (PHP):
    1. <?php
    2. if( ($this->countModules('banner') && (JRequest::getString('view')!=='article') ) : ?>
    3. <jdoc:include type="modules" name="banner" style="xhtml" />
    4. <?php endif; ?>

    Вывести модуль везде, кроме указанных в условиях категорий VirtueMart
    Код (PHP):
    1. <?php
    2. $option = JRequest::getCmd('option');
    3. $category_id = JRequest::getCmd('category_id');
    4. if ((($option == 'com_virtuemart') and ($category_id != '1')) and (($option == 'com_virtuemart') and ($category_id != '2')) ) : ?>
    5. тут позиция твоего модуля
    6. <?php endif; ?>

    Скрывается позиция модуля в нужных категориях все просто дописываются условие через and заключая в скобки
    Код (PHP):
    1. (($option == 'com_virtuemart') and ($category_id != '1'))
    это скрыть в категории id 1
    Ограничить количество товаров в запросе, в точке входа в компонент /components/com_virtuemart/virtuemart.php
    Код (PHP):
    1. $limit = JRequest::getVar('limit');
    2. if($limit > 1053)
    3. $mainframe->redirect('index.php');


    Если запрос больше чем 1053 товаров, то будет срабатывать редирект на главную страницу сайта.
    Код (PHP):
    1. <?php $Itemid = JRequest::getInt( 'Itemid', 1, 'get' );
    2. if ($Itemid == '115') $jname='itemprop="name"'; ?>

    Вывод,задание значение переменной по условию нужной категории, ITemid смотрим в менеджере пунктов меню
    п.с.
    Условия для Джумла 1.5-2.5 . Для Джумла 3 изменен класс доступа к параметрам в URI
    И так для Джумла 3, вывод по условию для определенной категории
    Код (PHP):
    1. <?
    2. //application
    3. $app = JFactory::getApplication();
    4. $category_id = $app->input->getCmd('catid','');
    5. if ($category_id == '2') : ?>
    6. <jdoc:include type="modules" name="banner" style="xhtml" />
    7. <? endif; ?>

    Также можно указать сразу ID категории по умолчанию
    Код (PHP):
    1. $category_id = $app->input->getCmd('catid','ID категории по умолчанию');
     
    Последнее редактирование: 12.05.2015
  2.  
  3. OlegK
    Offline

    OlegK Russian Joomla! Team Команда форума ⇒ Профи ⇐

    Регистрация:
    17.01.2011
    Сообщения:
    7 813
    Симпатии:
    771
    Пол:
    Мужской
    И так для Джумла 3, вывод по условию для определенной категории
    Код (PHP):
    1. <?
    2. //application
    3. $app = JFactory::getApplication();
    4. $category_id = $app->input->getCmd('catid','');
    5. if ($category_id == '2') : ?>
    6. <jdoc:include type="modules" name="banner" style="xhtml" />
    7. <? endif; ?>

    Также можно указать сразу ID категории по умолчанию
    Код (PHP):
    1. $category_id = $app->input->getCmd('catid','ID категории по умолчанию');

    --- добавлено: 31.05.2015, первое сообщение размещено: 12.05.2015 ---
    Еще вариант для подключения плагина, Джумла 2.5, в плагине проверка на запрашиваемый компонент
    Применялся для отключения плагина в Джумла,и запуска в Virtuemart
    Код (PHP):
    1. //draff
    2. $input = JFactory::getApplication()->input;
    3. $option = $input->getCmd('option', '');
    4. if($option != 'com_virtuemart'){
    5. return true;
    6. }

    --- добавлено: 07.07.2015 ---
    Шаблон sj_megashop с yt_framework, скрыть модуль в позиции баннер в карточке товара JoomShopping
    Путь к файлу /plugins/system/yt/includes/site/lib/yt_template.php
    Код (PHP):
    1. //render position with type: modules
    2. function renModulePos ($position, $elementstyle, $elementclass='', $more_attr='', $positionnamesuffix='', $yorn='1' ) {
    3.  
    4. if($yorn == '1'){
    5. //draff
    6. $input = JFactory::getApplication()->input;
    7. $controller = $input->getCmd('controller', '');
    8. ?>
    9.  
    10. <div
    11. <?php if($position['value'] =='banner' && $controller == 'product') :?>style="display:none"</style><?php endif; ?>
    12. id="<?php echo $position['value']; ?>" <?php echo $elementstyle; ?> <?php echo $elementclass; ?> <?php echo $more_attr;?>>
    13. <jdoc:include type="modules" name="<?php echo ($positionnamesuffix=='')?$position['value']:$positionnamesuffix; ?>" style="<?php echo $position['style'];?>" />
    14. </div>

    --- добавлено: 20.08.2015 ---
    Вывод модуля на страницах К2, но не в материале
    Код (PHP):
    1. <?
    2. $app = JFactory::getApplication();
    3. $option = $app->input->getCmd('option', '');
    4. $view = $app->input->getCmd('view','');
    5. if ($view != 'item' && $option == 'com_k2') : ?>
    6. <jdoc:include type="modules" name="banner" style="xhtml" />
    7.  
    8. <? endif; ?>

    --- добавлено: 28.10.2015 ---
    Задача вывести модуль в отдельном файле.Проверено на Джумла 3.4.4
    Код (PHP):
    1. <?php
    2. define( '_JEXEC', 1 );
    3. defined('_JEXEC') or die('Ok');
    4. define('JPATH_BASE', dirname(__DIR__));
    5. define('DS', DIRECTORY_SEPARATOR);
    6.  
    7. $path = JPATH_BASE . DS . 'includes' . DS;
    8. // once использовать необязательно, не думаю, что вы подключите файлы фреймворка дважды
    9. require($path . 'defines.php');
    10. require($path . 'framework.php');
    11.  
    12. $app = JFactory::getApplication('site');
    13. $app->initialise();
    14. $document   = JFactory::getDocument();
    15. $module = JModuleHelper::getModule('mod_rapid_contact');
    16. echo JModuleHelper::renderModule($module);

    Источник
    --- добавлено: 15.11.2015 ---
    Условие для одной статьи
    Код (PHP):
    1. <?php $article_id = JRequest::getCmd('id');
    2. if($article_id == x) :?>
    3. <div id="login">
    4. <jdoc:include type="modules" name="login" />
    5. </div>
    6. <?php endif ?>

    Где х id нужной статьи
    --- добавлено: 10.07.2016 ---
    Задача не выводить модуль IceVmFilter в категории Virtuemart 1.1.9, где нет товара
    В файле модуля mod_ice_vmfilter.php, добавляем условие показа модуля
    Код (PHP):
    1. //draff
    2. $category_id = (int)JRequest::getVar('category_id');
    3. require_once( CLASSPATH. 'ps_product_category.php' );
    4. $ps_product_category = new ps_product_category;
    5. $count_product = $ps_product_category::product_count($category_id);
    6.  
    7. if( $option == 'com_virtuemart' && ($category_id >0 && $count_product > 0)) {

    Есть еще моя разработка для улучшения фильтрации товаров по параметрам с этим модулем.
    А именно,если есть пагинация, то при выборе другой страницы, фильтрация товара очищается.
    Код (javascript):
    1. //jQuery.noConflict();
    2. jQuery(function(){
    3.     var filter = window.location.search;
    4.     filter = filter.slice(1);
    5.     //var linkpagin = jQuery('.pagination .pagenav').attr('href');
    6.     filter = filter.replace(/(limit=\d+)&(limitstart=\d+)/," ");
    7.     if(filter !== "") {
    8.         jQuery('.pagination .pagenav').click(function(el) {
    9.          var linkpagin = jQuery(this).attr('href');
    10.         jQuery(location).attr('href', linkpagin+filter);
    11.         //console.log(linkpagin+"&"+filter);
    12.         el.preventDefault();
    13.   });
    14.     }
    15. });

    Если у кого нет хака для для конфликта яваскриптов, раскоментировать
    Код (javascript):
    1. jQuery.noConflict();

    --- добавлено: 18.06.2018 ---
    В новых версиях Джумла ошибка
    Код (PHP):
    1. Strict Standards: Non-static method Joomla\CMS\Application\CMSApplication::getMenu() should not be called statically, assuming $this from incompatible context in D:\xampp\htdocs\joomla35\libraries\src\Application\SiteApplication.php on line 275

    Меняем
    на
    Код (PHP):
    1. $menu = JFactory::getApplication()->getMenu();

    --- добавлено: 08.03.2020 ---
    Проверка на главную страницу и карточку товара в JoomShopping
    Код (PHP):
    1. <?php
    2. $app  = JFactory::getApplication();
    3. $controller  = $app->input->getCmd('controller');
    4. $menu = JFactory::getApplication()->getMenu();
    5. if($menu->getActive() == $menu->getDefault() &&  $controller != 'product') {
    6. echo "Main page , not product";
    7. }
    8. ?>
     
    Последнее редактирование: 06.11.2020
    Asylum, AKopytenko, CB9T и ещё 1-му нравится это.

Поделиться этой страницей

Загрузка...