LiveInternetMail.ru
Форум русской поддержки Joomla!® CMS
23.05.2013, 23:13:19 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 2.5 FAQ Joomla 1.5 FAQ Joomla 1.0 FAQ Правила форума Новости Joomla Войти Регистрация Помощь  
Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор Тема: Отображение модулей в зависимости от параметра переменной $task. (урок)  (Прочитано 16579 раз)
0 Пользователей и 1 Гость смотрят эту тему.
talion2003
Осваиваюсь на форуме
***

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

Сообщений: 117

Не программер я...


« : 03.12.2006, 21:11:02 »

Все ниже приведенное выполяняется в шаблоне сайта!

Предположим, у нас поставлена задача: отобразить модуль слева от основного текста (mainbody) так, чтобы он выводился только в режиме просмотра «таблицы категории», а при открытии материала исчезал. Плюс ко всему, сам модуль вставляется в шаблоне внутри html-таблицы, которая имеет собственное оформление и отведена специально для этого модуля, соответственно и отображается только в случае, когда модуль включен. Наглядно весь этот блок можно представить так:

Код:
<table bgcolor="#000000">
        <tr>
              <td>
                   <?php mosLoadModules ( 'left' ); ?>
              </td>
          </tr>
</table>

Итак, чтобы модуль выводился только в режиме «таблицы категории», нам нужно добавить проверку переменной «$task» и присвоить ей значение «category». Для этого мы добавляем следующие строки:

Код:
<?php if($task == 'category') { ?>
   <table bgcolor="#000000">
        <tr>
              <td>
                   <?php mosLoadModules ( 'left' ); ?>
              </td>
          </tr>
   </table>
<?php } ?>

Теперь весь блок будет отображаться только тогда, когда мы находимся в режиме просмотра «таблицы категории», а при открытии материала он скроется.

Однако возникает проблема: если мы отключим модуль и вернемся в режим просмотра «таблицы категории», то исчезнет лишь выводимое модулем содержимое, а сама таблица - от открывающего тэга <table> до закрывающего тэга </table> - все равно будет отображаться на экране, портя дизайн. Что же делать? Все очень просто: нам нужно добавить еще пару строк кода и использовать тэг <div>:

Код:
<?php if(mosCountModules('left')) { ?>
  <div>
     <?php if($task == 'category') { ?>
        <table bgcolor="#000000">
           <tr>
              <td>
                   <?php mosLoadModules ( 'left' ); ?>
              </td>
          </tr>
       </table>
     <?php } ?>
   </div>
<?php } ?>

Вот! Теперь, если мы находимся, скажем, в режиме просмотра «таблицы категории» и наш модуль выключен, то всё, что находится между первой и последней строчкой выше приведенного кода, отображаться не будет.

Примечание:
Если нам нужно, чтобы модуль отображался не только в режиме просмотра «таблицы категории», но и в режиме «таблицы раздела», то добавляем через «or» всего лишь еще один параметр переменной «task», вот так:

Код:
<?php if(mosCountModules('left')) { ?>
  <div>
     <?php if($task == 'category' or $task == 'section') { ?>
        <table bgcolor="#000000">
           <tr>
              <td>
                   <?php mosLoadModules ( 'left' ); ?>
              </td>
          </tr>
       </table>
     <?php } ?>
   </div>
<?php } ?>

p.s. - рад был помочь.
« Последнее редактирование: 03.12.2006, 21:17:29 от talion2003 » Записан
smart
Администратор
*******

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

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


снова дома...


« Ответ #1 : 04.12.2006, 19:58:47 »

В эти условия нужно добавить еще проверку на текущий компонент, а точнее com_content. Иначе данный модуль может случайным образом появиться на страницах других компонентов, в которых используется параметр task и  значение category. Применительно к последнему примеру, вышесказанное можно применить следующим образом:

Код:
<?php if (mosCountModules('left') && $option == 'com_content' && $task == 'category' or $task == 'section') { ?>
  <div>
        <table bgcolor="#000000">
           <tr>
              <td>
                   <?php mosLoadModules ( 'left' ); ?>
              </td>
          </tr>
       </table>
   </div>
<?php } ?>

@talion2003: респект за статью!
« Последнее редактирование: 11.06.2008, 12:03:25 от smart » Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Рейтинг@Mail.ru Rambler Top100 Powered by SMF 1.1.18 | 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