Новости Joomla

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

talion2003

  • Захожу иногда
  • 95
  • 36 / 6
  • Не программер я...
Все ниже приведенное выполяняется в шаблоне сайта!

Предположим, у нас поставлена задача: отобразить модуль слева от основного текста (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, 20:17:29 от talion2003 »
Да говорю же Вам, не программер я!!!

 www.chelovekdnevnik.ru www.serdcadetey.ru
*

smart

  • Администратор
  • 6478
  • 1318 / 15
  • Хочешь сделать хорошо — сделай!
В эти условия нужно добавить еще проверку на текущий компонент, а точнее 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 »
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться