шаблон модуля Joomla

’tag’

Переопределение макета (шаблона) модуля в Joomla 1.7

Май 26, 2012

Как ранее я уже писал, макеты отображения для модуля mod_simple хранятся в папке tmpl:
/modules/mod_simple/tmpl

Для переопределения макета для используемой темы необходимо создать папку с именем модуля в папке с темой. Для темы beez_20:
/templates/beez_20/html/mod_simple

Папка mod_simple находится в подпапке html.

В папке html создается файл с именем макета, для default это будет default.php.

Сначала берется оригинальное содержимое макета:
/modules/mod_simple/tmpl/default.php

<?php defined( '_JEXEC' ) or die; ?>
<ul>
	<?php foreach ($rows as $row) : ?>
		<li><?php echo $row->name; ?></li>
	<?php endforeach; ?>
</ul>

Копируется в файл в теме:
/templates/beez_20/html/mod_simple/default.php

И изменяется, например:

<?php defined( '_JEXEC' ) or die; ?>
<?php
$i = 1;
foreach ($rows as $row) :
	echo $i . ': ' . $row->name . '<br />';
	$i++;
endforeach;

Tags: , , , ,
Записано в Joomla, Программирование    |    Постоянная ссылка

Добавляем макеты (шаблоны) отображения модуля в Joomla 1.7

Май 25, 2012

Макеты отображения модуля хранятся в папке tmpl в папке с модулем mod_simple:
/modules/mod_simple/tmpl

С помощью JModuleHelper модуль выводится через указанный макет.

Пример кода демонстрирует выборку имени макета из Настроек модуля по имени layout:

require JModuleHelper::getLayoutPath('mod_simple', $params->get('layout'));

Можно задать макет по умолчанию default, если его имя в Настройках не указывается:

require JModuleHelper::getLayoutPath('mod_simple', $params->get('layout', 'default'));

JModuleHelper просматривает папку tmpl в поисках макета с указанным именем.

Класс JModuleHelper располагается в:
/libraries/joomla/application/module/helper.php

/**
 * Get the path to a layout for a module
 *
 * @param   string  $module  The name of the module
 * @param   string  $layout  The name of the module layout. If alternative
 *                           layout, in the form template:filename.
 *
 * @return  string  The path to the module layout
 *
 * @since   11.1
 */
public static function getLayoutPath($module, $layout = 'default')
{
	$template = JFactory::getApplication()->getTemplate();
	$defaultLayout = $layout;

	if (strpos($layout, ':') !== false ) {
		// Get the template and file name from the string
		$temp = explode(':', $layout);
		$template = ($temp[0] == '_') ? $template : $temp[0];
		$layout = $temp[1];
		$defaultLayout = ($temp[1]) ? $temp[1] : 'default';
	}

	// Build the template and base path for the layout
	$tPath = JPATH_THEMES.'/'.$template.'/html/'.$module.'/'.$layout.'.php';
	$bPath = JPATH_BASE.'/modules/'.$module.'/tmpl/'.$defaultLayout.'.php';

	// If the template has a layout override use it
	if (file_exists($tPath)) {
		return $tPath;
	}
	else {
		return $bPath;
	}
}

Как видно, сначала проверяется на существование папка внутри папки с шаблоном сайта:

$tPath = JPATH_THEMES.'/'.$template.'/html/'.$module.'/'.$layout.'.php';

И в случае, если она существует, то стандартный макет заменяется.

Для того, чтобы иметь возможность выбрать макет в Настройках модуля в Закрытой части сайта, в обновляется файл Настроек mod_simple.xml:

Станут доступны 3 вида макета:

<option value="default">Обычный список</option>
<option value="ordered">Нумерованный список</option>
<option value="paragraphs">Параграфы</option>

Для того, чтобы макет загрузился с помощью класса JModuleHelper в папке tmpl должны находиться файлы с соответствующими названиями:

  • default.php
  • ordered.php
  • paragraphs.php

Файл макета default.php

<?php defined( '_JEXEC' ) or die; ?>
<ul>
	<?php foreach ($rows as $row) : ?>
		<li><?php echo $row->name; ?></li>
	<?php endforeach; ?>
</ul>

Файл макета ordered.php

<?php defined( '_JEXEC' ) or die; ?>
<ol>
	<?php foreach ($rows as $row) : ?>
		<li><?php echo $row->name; ?></li>
	<?php endforeach; ?>
</ol>

Файл макета paragraphs.php

<?php defined( '_JEXEC' ) or die; ?>
<?php foreach ($rows as $row) : ?>
	<p><?php echo $row->name; ?></p>
<?php endforeach; ?>

Tags: , , , ,
Записано в Joomla, Программирование    |    Постоянная ссылка