jdoc:include - метод отображения контента на странице.

В статье Создание шаблонов для Joomla мы поверхностно коснулись темы методов вывода контента в теле шаблона. Давайте теперь подробно разберем что это и с чем его едят. Итак, объявления метода jdoc присутствуют  в каждом шаблоне Joomlaи выводят в тело шаблона (то бишь на страницу сайта) ту или иную информацию. В целом объявление метода выглядит следующим образом

<jdoc:include type="component" />

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

    1. type — типы элементов вывода.

  • component — как писал выше, выводит основное содержание страницы. Может вызываться только один раз в шаблоне.
  • head — объявляется так же один раз после открывающего тэга <head>. Служит для вывода стилей, скриптов, <title> и метаданных текущей страницы.
  • message - выводит системные сообщения. Объявляется один раз в теле документа (body).
  • installation  — ничего не выводит и представляет собой «инструкцию» для установки.
  • module — выводит на странице единичный модуль. Количество объявлений не ограничено.
  • modules — в отличии от предыдущего типа, позволяет выводить в своей позиции не единичое число модулей.

Для первых четырех указанных типов достаточно лишь указать их на странице. В случае с типом модуля задача немного усложняется. Для того, чтобы вывести на странице модуль нам нужно сперва создать для него модульную позицию с уникальным идентификатором (название позиции модуля). Это делается при помощи атрибута name=«имя позиции» и обязательным добавлением строки:

<position>название позиции</position>
в файл templateDetails.xml. Описывая название позиции в templateDetails.xml мы обозначаем ее в системе и видим в менеджере модулей. Имена позиций могут быть произвольными, хотя name=«user3» позиция, по-умолчанию используется для отображения верхнего меню.

    2. style — описание стиля вывода (mod chrome).

От указанного стиля зависит внешний вид и структура оболочки модуля. Выглядит как

:<jdoc:include type="modules" name="user1" style="xhtml" />
По-умолчанию заложено несколько стилей вывода модулей:

  • xhtml - выводит модуль в блоке с заголовком
    function modChrome_xhtml($module, &$params, &$attribs)
    {
        if (!empty ($module->content)) : ?>
            <div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
            <?php if ($module->showtitle != 0) : ?>
                <h3><?php echo $module->title; ?></h3>
            <?php endif; ?>
                <?php echo $module->content; ?>
            </div>
        <?php endif;
    }
  • table — выводит модуль в верстке табличной структуры
    function modChrome_table($module, &$params, &$attribs)
    { ?>
        <table cellpadding="0" cellspacing="0" 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
    }
  • horz — выводит содержимое модуля в ячейке таблицы, горизонтально
    function modChrome_horz($module, &$params, &$attribs)
    { ?>
        <table cellspacing="1" cellpadding="0" width="100%">
            <tr>
                <td>
                    <?php modChrome_table($module, $params, $attribs); ?>
                </td>
            </tr>
        </table>
        <?php
    }
  • rounded — выводит модуль в нескольких вложенных блоках для сложного стилевого оформления в виде графических границ (напр. закругленных углов)
    function modChrome_rounded($module, &$params, &$attribs)
    { ?>
            <div class="module<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?>">
                <div>
                    <div>
                        <div>
                            <?php if ($module->showtitle != 0) : ?>
                                <h3><?php echo $module->title; ?></h3>
                            <?php endif; ?>
                        <?php echo $module->content; ?>
                        </div>
                    </div>
                </div>
            </div>
        <?php
    }
  • outline — добавляет к блоку модуля предустановленные стили css
    function modChrome_outline($module, &$params, &$attribs)
    {
        static $css=false;
        if (!$css)
        {
            $css=true;
            jimport('joomla.environment.browser');
            $doc = JFactory::getDocument();
            $browser = JBrowser::getInstance();
            $doc->addStyleDeclaration(".mod-preview-info { padding: 2px 4px 2px 4px; border: 1px solid black; position: absolute; background-color: white; color: red;}");
            $doc->addStyleDeclaration(".mod-preview-wrapper { background-color:#eee; border: 1px dotted black; color:#700;}");
            if ($browser->getBrowser()=='msie')
            {
                if ($browser->getMajor() <= 7) {
                    $doc->addStyleDeclaration(".mod-preview-info {filter: alpha(opacity=80);}");
                    $doc->addStyleDeclaration(".mod-preview-wrapper {filter: alpha(opacity=50);}");
                }
                else {
                    $doc->addStyleDeclaration(".mod-preview-info {-ms-filter: alpha(opacity=80);}");
                    $doc->addStyleDeclaration(".mod-preview-wrapper {-ms-filter: alpha(opacity=50);}");
                }
            }
            else
            {
                $doc->addStyleDeclaration(".mod-preview-info {opacity: 0.8;}");
                $doc->addStyleDeclaration(".mod-preview-wrapper {opacity: 0.5;}");
            }
        }
        ?>
        <div class="mod-preview">
            <div class="mod-preview-info"><?php echo $module->position."[".$module->style."]"; ?></div>
            <div class="mod-preview-wrapper">
                <?php echo $module->content; ?>
            </div>
        </div>
        <?php
    }
  • none — аналогично не указанному вообще style. Выводит модуль без оформления и заголовка
    function modChrome_none($module, &$params, &$attribs)
    {
        echo $module->content;
    }

Все предустановленные стили располагаются в файле templates/system/html/modules.php. Но мы не ограничены использованием только предоставленных вариантов, а вполне можем создавать свои собственные.

    3. Создание пользовательского mode chrome.


Итак, предоставленные по умолчанию типы представления модулей не удовлетворяют текущих требований. Нужно добавить свой собственный стиль оформления. В качестве примера выберем достаточно часто повторяющуюся ситуацию. По заданию нужно вместо <h3> поместить заголовок модуля в тэг <span>, который является семантически нейтральным. Так же требуется поместить контентблок модуля в отдельный <div>. Для создания собственного стиля вывода модуля, воспользуемся стандартными средствами. В большинстве шаблонов  Joomla существет папка html/ (templates/имя шаблона/html/), используется для так называемой шаблонизации. То есть, если скопировать в эту папку шаблон модуля,  то вместо шаблона из директории modules/my_module/tmpl/default  будет выводиться файл из templates/имя шаблона/html/my_modules/default. Аналогично шаблонизируются и компоненты. Удобно и практично. В папке html/ Вашего шаблона создадим файл modules.php. Если такой папки в шаблоне нет, то создадим ее. В файл запишем

<?php
function modChrome_modbox($module, &$params, &$attribs) // Вызываем функцию
{
    if (!empty ($module->content)) : /* Проверяем наличие в поиции включенного модуля */?>
        <div class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); /* выводим суффикс css класса модуля */ ?>">
        <?php if ($module->showtitle != 0) : /* проверяем включен ли заголовок модуля */ ?>
            <span class="title"><?php echo $module->title; /* Выводим заголовок */ ?></span>
        <?php endif; ?>
            <div class="modcontent">
                <?php echo $module->content; /* Выводим содержимое модуля */ ?>
            </div>
        </div>
    <?php endif;
}
?>
Готово. Теперь нужно только указать его в качестве стиля вывода.

<jdoc:include type="modules" name="user1" style="modbox"/>
Назначаем в нашу позицию модуль и смотрим результат.

0 комментариев
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.