2010 07 марта

Создание новых стилей вывода модуля в файле modules.php

В шаблонах для движка 1.5 вставка позиции модуля происходит следующим образом
1
<jdoc:include type="modules" name="left" style="xhtml" />
Если с полем name все понятно (имя позиции из списка созданных в XML файле шаблона), то вот с полем style частенько возникают вопросы - что это, зачем и что можно с ним делать. Разберем сначала вывод хтмл по умолчанию при стиле XHTML - в исходном коде получается следующее
1
23
4
<div class="moduletable">
<h3>заголовок модуля</h3>тело модуля
</div>
А что же нам делать, если хотим чуть усложнить структуру, дабы вписаться в разработанный дизайн либо иное? Все очень просто.
Мы идем в папку шаблона, в ней видим (и если не видим то создаем папку [b]html[/b]), в ней находим (а если не находим то создаем файл [b]modules.php[/b]). В нем к примеру пишем такую функцию
1
23
45
67
89
1011
12
function modChrome_mycustomdiv($module, &$params, &$attribs)
{        $headerLevel = isset($attribs['headerLevel'])? (int) $attribs['headerLevel'] : 3;
        if (!empty ($module->content)) : ?>                <div class="mycustomdiv<?php echo $params->get('moduleclass_sfx'); ?>">
                        <?php if ($module->showtitle) : ?>                                <div class="mycustomdivtitle"><h3><?php echo $module->title; ?></h3></div>
                        <?php endif; ?>                        <?php echo $module->content; ?>
                </div>        <?php endif;
}
И в шаблоне index.php для style теперь указываем значение mycustomdiv. То есть имя функции обязательно должно начинаться с modChrome_ а то что после подчеркивания нужно использовать в качестве значения style при выводе в шаблоне
1
<jdoc:include type="modules" name="left" style="mycustomdiv" />
В итоге у нас хтмл вывод будет таким
1
23
4
<div class="mycustomdiv">
<h3>заголовок модуля</h3>тело модуля
</div>
По порядку, что мы здесь видим: $params->get('moduleclass_sfx') - суффикс модуля, заданный в его настройках $module->showtitle - заголовок модуля и соответственно проверку условия, если в настройках отмечен к показу - то выводим в тегах h3 $module->content - тело модуля, зависит от хелпера модуля либо других вариаций вывода

Комментарии

0 xlife пишет нам 10.04.2010 15:51
ругается Parse error: syntax error, unexpected T_ENDIF in Z:\home\eda.local\www\templates\siteground-j15-14\ html\modules.php on line 11 П.С. попробовал дописать ?> как в строке 8 , и всё равно ругается
Сообщить модератору
0 Beliyadm отвечает 10.04.2010 15:56
Скорей всего вы копировали код с блога напрямую, уже неоднократно писал (и пока не починил) что парсер блога перевирает одинарные кавычки, возможно именно это и приводит к ошибке синтаксиса и нарушению условия На всякий случай покажите ваш код в этом файле
Сообщить модератору
0 xlife пишет нам 10.04.2010 16:23
function modChrome_mycustomdiv($module, &$params, &$attribs) { $headerLevel = isset( $attribs['headerLevel'])? (int) $attribs['headerLevel' ] : 3; if (!empty ($module->content)) : ?> <div class="mycustomdiv get('moduleclass_sfx'); ?>" showtitle) : ?> title; ?> content; ?> <?php endif; }
Сообщить модератору
0 xlife пишет нам 10.04.2010 16:25
учёл ваше замечание, теперь вот Parse error: syntax error, unexpected T_ENDIF in html\\\\modules.php on line 12
Сообщить модератору
0 Beliyadm отвечает 10.04.2010 16:33
что то вы намудрили, еще раз, берем стандартную функцию к примеру modChrome_beezDivision из шаблона beez, в ней заменяем modChrome_beezDivision на наш modChrome_mycustomdiv и класс moduletable на mycustomdiv
Сообщить модератору
0 xlife пишет нам 10.04.2010 17:39
так работает, присвоил в index.php style=\"mycustomdiv\" вверху modules.php шаблона beez имеется строка <?php defined(\'_JEXEC\') or die(\'Restricted access\'); если без нее то не работает. П.С. спасибо!
Сообщить модератору
0 Beliyadm отвечает 10.04.2010 17:47
Эта строка обязательна для всех файлов пхп. Что делает - запрещает прямое обращение к данному файлу из браузера либо другими средствами, элементарная необходимая безопасность
Сообщить модератору
0 xlife пишет нам 10.04.2010 17:59
А в корне папки www с джумлой также имеется php файл(index.php) в нём строка начинается просто с <?php =)
Сообщить модератору
0 Beliyadm отвечает 10.04.2010 18:03
Естественно, вы же можете обращаться напрямую к этому файлу http://example.com/index.php, так же и в админке, все же прочие файлы вызываются через логику движка, но никак не напрямую (за очень редким исключением специализированных расширений)
Сообщить модератору
0 Aleks_El_Dia пишет нам 12.04.2010 18:14
Ай спасибо, все четко и ясно - не нужно самому копать что за фишка и с чем ее едят :)
Сообщить модератору

Недостаточно прав для комментирования