Создание шаблона Joomla за 6 шагов. Шаг 5.

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

Но в нем всегда будут отображаться три колонки, вне зависимости от того, есть в колонке какое-нибудь содержание или нет. Для шаблона CMS данный факт является недостатком. Статичный сайт меняется редко, но для динамического сайта под управлением Joomla нужно предоставить  возможность администратору изменять содержание любой колонки без правки шаблона CSS. Поэтому перед нами стоит задача автоматически отключать или сворачивать колонку, если в ней нет никакого содержания.

Joomla 1.6 предоставляет простой способ определять количество модулей, которые генерируют содержание для определённой позиции. Таким образом, мы можем разместить проверку такого счетчика в PHP коде, чтобы скрыть пустые колонки и соответственно настроить шаблон. Код PHP для такой проверки будет выглядеть следующим образом:

<?php if($this->countModules('условие')) : ?>
<!-делаем что-то, если условие выполняется-->
<?php else : ?>
<!-делаем что-то, если условие НЕ выполняется-->
<?php endif; ?>

Условие - строка, в которой указывается имя позиции или комбинация имен позиции с ключевыми словами. За более подробной информацией о функции countModules и правилах написания условий обращайтесь к документации по Joomla.

Для проверки работы функции можно вставить следующий код в конец раздела body в в файле index.php нашего шаблона:

left=<?php echo $this->countModules('left');?><br />
left and right=<?php echo $this->countModules('left and right');?><br />
left or right=<?php echo $this->countModules('left or right');?><br />
left + right=<?php echo $this->countModules('left + right');?>

После сохранения изменённого файла index.php и перезагрузки страницы сайта получим следующую картину (важная информация заключена в красный квадрат):

Использование функции countModules

Рассмотрим подробнее, что получилось:

  • countModules ('left') возвращает 3, потому что в позиции left три модуля выводят содержание;
  • countModules('left and right') возвращает 1, потому что в обеих позициях left и right присутствует содержание, выводимое модулями;
  • countModules('left or right') возвращает 1, потому, что либо в позиции left, либо в позиции right присутствует содержание, возвращаемое каким-либо модулем;
  • countModules('left + right') возвращает 4, потому что количество модулей, которые выводят содержание в позиции left и right равно четырем.

Теперь, когда есть представление о том, как проверить наличие содержания в позиции, нужно задействовать функцию countModule , чтобы динамически изменять наш шаблон в соответствии с содержание колонок.

Решить задачу можно различными методами. В нашем шаблоне будет использоваться преимущество сеточной разметки. Мы будем изменять ширину колонки в зависимости от содержания.

Изменим файл index.php нашего шаблона.

Перед контейнером content добавим следующий код PHP:

	<?php
	$leftcolgrid= "3";
	$rightcolgrid= "3"; 
	
	if ($this->countModules('left') == 0):
		$leftcolgrid = "0";
	endif;

	if ($this->countModules('right') == 0):
		$rightcolgrid = "0";
	endif;
	?>

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

Код контейнера также изменим, чтобы изменять класс, применяемый к позиции, в зависимости от наличия содержания в колонке:

	<div id="content" class="container_12">
		<div id="sidebar" class="grid_<?php echo $leftcolgrid;?>">
			<jdoc:include type="modules"  name="left"style="xhtml"/>
		</div>
		<div id="maincolumn" class="grid_<?php echo(12-$leftcolgrid-$rightcolgrid);?>">
			<jdoc:include type="modules"  name="breadcrumbs" style="xhtml" />
			<jdoc:include type="component" />
		</div>
		<div id="sidebar-2" class="grid_<?php echo $rightcolgrid;?>">
			<jdoc:include type="modules"  name="right" style="xhtml" />
		</div>
	</div>

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

Сохраним изменения в файле index.php. Для проверки действия нашего кода были сняты с публикации все модули, привязанные к позиции left. В результате, сайт с нашим шаблоном стал выглядеть следующим образом:

Корректное выравнивание ширины колонок. 

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

sourse

 

Анонс

В следующем уроке мы изменим шаблон так, чтобы он не выводил код пустых блоков.

Данный урок подготовлен для вас командой сайта ruseller.com
Источник урока: net.tutsplus.com/tutorials/site-builds/create-a-template-with-joomla-step-by-step/
Перевел: Сергей Фастунов
Урок создан: 30 Июня 2011
Просмотров: 43866
Правила перепечатки


5 последних уроков рубрики "Joomla!"

или авторизуйтесь, чтобы добавлять комментарии, оценивать уроки и сохранять их в личном кабинете
  • 30 Июня 2011 17:15
    Владислав
    Надеюсь, следующий урок выйдет быстрее.
  • 13 Февраля 2012 20:41
    dementiy
    Здравствуйте. Скажите, пожалуйста, а если код шаблона представляет из себя примерно следующее, то можно ли воспользоваться данным приёмом, и если можно, то как. У меня пока что не получилось. HTML:
    <div id="left"></div>
    <div id="right"></div>
    <div id="center"></div>
    CSS:
    #left { float: left; width: 240px;
    }
    #right { float: right; width: 240px;
    }
    #center { margin: 0 250px;
    }
    Я так полагаю, что если колонка с id right не существует, либо ширина её равна 0, то блок с id center получает margin-right = 0, либо подменяется другим блоком (#center2), где margin-right = 0. Но как написать это на php не зная php!
  • 13 Февраля 2012 22:10
    dementiy
    Кажется, понял. Надо всего-навсего создать названия двух классов используя нижнее подчёркивание и числа, добавить к id center через указанную вами конструкцию, задать им нужные css-свойства и не пудрить себе мозги размышлениями о том, что "ну, я же сам, без модульной сетки верстал".
^ Наверх ^