функции для вывода модулей описаны в файле templates/system/html/modules.php - как обычно его копируем в шаблон в папку HTML и добавляем новую функцию modChrome() - компоновка на свое усмотрение - в самый конец файла, после последней закрывающей скобки. Для уникализации функции и во избежание конфликтов можно добавить уникальный суффикс по названию шаблона.
modChrome() в данном случае - сама функция, protostar_modulestylenew - название нового стиля для вывода модуля
Упрощенный вариант функции
function modChrome_protostar_modulestylenew ($module, $params, $attribs)
{ ?>
<table cellpadding="20" cellspacing="0"
border="<?php echo $attribs['border'] ?>"
class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ($module->showtitle != 0) : ?>
<tr>
<th>
<?php echo $module->title; ?>
</th>
</tr>
<?php endif; ?>
<tr>
<td>
<?php echo $module->content; ?>
</td>
</tr>
</table>
<?php
}
Данное выражение border="<?php echo $attribs['border'] ?>" берет значение атрибута из файла index.php шаблона, из выражения вывода позиции
<jdoc:include type="modules" name="newposition" style="protostar_modulestylenew" border="2" />
Если при выводе позиции значение атрибута border="n" не указано, это приведет к ошибке (notice). Чтобы этого избежать, в функцию modChrome добавим проверку на наличие значения атрибута в выводе позиции с помощью оператора isset Оператор (int) в данном случае используется для того, чтобы привести переменную $border к целочисленному значению.
<?php $border = (isset($attribs['border'])) ? (int) $attribs['border'] : '0'; ?>
синтаксис выражения для isset выглядит следующим образом
<условие> ? <действие, если условие истинно> : <действие, если условие ложно>
Полный код функции
function modChrome_protostar_modulestylenew ($module, $params, $attribs)
{ ?>
<?php $border = (isset($attribs['border'])) ? (int) $attribs['border'] : '0'; ?>
<table cellpadding="20" cellspacing="0"
border="<?php echo $border ?>"
class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
<?php if ($module->showtitle != 0) : ?>
<tr>
<th>
<?php echo $module->title; ?>
</th>
</tr>
<?php endif; ?>
<tr>
<td>
<?php echo $module->content; ?>
</td>
</tr>
</table>
<?php
}