Joomla 4. Компонент K2 и форк K2ForJ4 (18 янв 2024)

Если вас, как и меня, достало выслушивать (вычитывать) бесконечные обещания разработчика K2 опубликовать версию компонента K2 под Joomla 4 (без чего невозможно реализовать апгрейд from Joomla 3 to Joomla 4) - воспользуйтесь форком K2ForJ4. Который в данный момент установлен и без каких-либо проблем работает на этом веб-сайте.

Разработка шаблонов под joomla. Продолжаем тему

Больше
13 года 1 мес. назад - 13 года 1 мес. назад #1 от anatole
Как скрыть позицию модуля, если в ней нет активных модулей?
Code:
<?php if($this->countModules('user1') : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

А если позиций несколько?
Code:
<?php if($this->countModules('user1 or user2 or user3') : ?> <div id="users"> <?php if($this->countModules('user1') : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?> <?php if($this->countModules('user2') : ?> <div id="user2"> <jdoc:include type="modules" name="user2" style="xhtml" /> </div> <?php endif ?> <?php if($this->countModules('user3') : ?> <div id="user3"> <jdoc:include type="modules" name="user3" style="xhtml" /> </div> <?php endif ?> </div> <?php endif ?>
Как отобразить позицию только для авторизованного пользователя?
Code:
<?php $user =& JFactory::getUser(); ?> <?php if(!$user->guest) : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>
А - только для гостя?
Code:
<?php $user =& JFactory::getUser(); ?> <?php if($user->guest) : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>
А если нужно отобразить позицию для определённой группы, например для «Author»?
Code:
<?php $user =& JFactory::getUser(); ?> <?php if($user->get('usertype') == 'Author') : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

А - для конкретного пользователя, например для пользователя с ником «qwerty»?
Code:
<?php $user =& JFactory::getUser( 'qwerty' ); ?> <?php if($user->id) : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

Как вывести логин пользователя?
Code:
<?php $user =& JFactory::getUser(); ?> <?php if($user->id) : ?> <div id="user1"> <?php echo $user->get('username') ?> </div> <?php endif ?>

Как отобразить позицию в определённом компоненте, например в компоненте «Контакты»?
Code:
<?php $option = JRequest::getVar( 'option' ); ?> <?php if($option == 'com_contact') : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

Как вывести позицию при определённом Itemid, например «35»?
Code:
<?php $itemid = JRequest::getInt( 'Itemid' ); ?> <?php if($itemid == '35') : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

Как показать позицию только на главной странице сайта?
Code:
<?php $option = JRequest::getVar( 'option' ); $id = JRequest::getInt( 'id' ); ?> <?php if($option == 'com_content' && !$id) : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>
Более универсальное решение (определяет пункт меню, у которого стоит метка «По умолчанию»):
Code:
<?php $menu =& JSite::getMenu(); ?> <?php if ($menu->getActive() == $menu->getDefault()) : ?> <div id="user1"> <jdoc:include type="modules" name="user1" style="xhtml" /> </div> <?php endif ?>

Следует заметить, что все используемые параметры типа:
Code:
$menu =& JSite::getMenu(); $user =& JFactory::getUser(); $option = JRequest::getVar( 'option' ); $itemid = JRequest::getInt( 'Itemid' );

нужно писать вначале index.php но не перед:
Code:
defined( '_JEXEC' ) or die( 'Restricted access' );

и только один раз, а вот данные этих параметров возможно использовать любое количество раз.

Теперь - о внутреннем оформлении модулей, имея ввиду HTML-код, генерирующий позиции модулей (пространство имён jdoc). По умолчанию Joomla 1.5 имеет 6 способов генерации кода. Способ генерации указывается в атрибуте «style», например:
Code:
<jdoc:include type="modules" name="top" style="none" />

Рассмотрим все 6 способов более подробно:

1) style=«rounded» — выводит модуль в четырёх вложенных div'ах, для создания закруглённых углов (на самом деле сейчас эта технология устарела, есть менее ресурсоёмкие способы):
Code:
<div class="module_menu"> <div> <div> <div> <h3>Main Menu</h3> <ul class="menu"> <li><!-- various menu items --></li> </ul> </div> </div> </div> </div>

2) style=«table» — выводит модуль в таблице:
Code:
<table cellpadding="0" cellspacing="0" class="moduletable_menu"> <tr> <th valign="top">Main Menu</th> </tr> <tr> <td> <ul class="menu"> <li><!-- various menu items --></li> </ul> </td> </tr> </table>

3) style=«horz» — выводит модуль горизонтально в ячейке окружающей таблицы:
Code:
<table cellspacing="1" cellpadding="0" border="0" width="100%"> <tr> <td valign="top"> <table cellpadding="0" cellspacing="0" class="moduletable_menu"> <tr> <th valign="top">Main Menu</th> </tr> <tr> <td> <ul class="menu"> <li><!-- various menu items --></li> </ul> </td> </tr> </table> </td> </tr> </table>


4) style=«xhtml» — выводит модуль в одном div-элементе:
Code:
<div class="moduletable_menu"> <h3>Main Menu</h3> <ul class="menu"> <li><!-- various menu items --></li> </ul> </div>

5) style=«none» — выводит модуль без форматирования:
Code:
<ul class="menu"> <li><!-- various menu items --></li> </ul>

6) style=«outline» — выводит модуль с названием позиции модуля; словно также, когда к адресу сайта добавляется параметр «tp=1» для просмотра имеющихся позиций модулей в шаблоне:
Code:
<div class="mod-preview"> <div class="mod-preview-info">left[outline]</div> <div class="mod-preview-wrapper"> <ul class="menu"> <li><!-- various menu items --></li> </ul> </div> </div>

Несмотря на наличие 6 способов - на практике обычно используются только два: «xhtml» и «none». Бывают ситуации когда этого недостаточно для реализации какой-либо цели. Что делать? Разумеется, читать документацию и благодарить разработчиков Joomla, которые позаботились даже об этом и предоставили нам возможность создавать свои типы модулей (пользовательские модули). Чтобы определить пользовательский модуль - мы должны в каталоге с шаблоном создать каталог «html» и положить туда файл «modules.php». В этом файле необходимо определить функцию, называемую «modChrome_STYLE», где «STYLE» — это имя нашего пользовательского модуля. Эта функция будет принимать три аргумента: $module, &$params и &$attribs:
Code:
<?php defined('_JEXEC') or die('Restricted access'); function modChrome_STYLE( $module, &$params, &$attribs ) { /* chromed Module output goes here */ } ?>

В рамках этой функции может быть использовано любое модульное свойство (в т.ч. и параметры, которые содержатся в таблице «jos_modules» вашей БД). Основными же. являются:

— $module->content — переменная выводит содержимое модуля;
— $module->showtitle — переменная возвращает значение 1, если в настройках модуля разрешено показывать заголовок модуля, иначе — 0;
— $module->title — переменная выводит заголовок модуля.

Рассмотрим небольшой пример, в котором показан способ проверки отображения заголовка модуля, а также вывод самого заголовка в случае положительного результата:
Code:
<?php if ($module->showtitle) { echo '<h2>' .$module->title .'</h2>'; } ?>

Параметры модуля можно использовать через объект $params. Например вывод суффикса класса модуля (по умолчанию это значение хранится в параметре «moduleclass_sfx») осуществляется следующим способом:
Code:
<div class="moduletable<?php echo $params->get( 'moduleclass_sfx' ); ?>"> <!-- div contents --> </div>

Теперь практика. Создадим пользовательский модуль, назовём его «custom» (это значит, что при использования его в шаблоне нужно будет написать style=«custom» в <jdoc:include />). Ну а толку да от такого модуля? Нужно сделать что-то интересное, чтобы почувствовать действительную необходимость пользовательских модулей! Сделаем первое слово в заголовке модуля красным цветом, а все остальные слова — цветом по умолчанию, описанному в стилях:
Code:
<?php defined('_JEXEC') or die('Restricted access'); function modChrome_custom($module, &$params, &$attribs) { ?> <div class="moduletable<?php echo $params->get('moduleclass_sfx'); ?>"> <?php if ($module->showtitle) : ?> <h3> <?php $title = $module->title; $title = split(' ', $title); $title[0] = '<span style="color:red">'.$title[0].'</span>'; $title = implode(' ', $title); echo $title; ?> </h3> <?php endif; ?> <div> <?php echo $module->content; ?> </div> </div> <?php } ?>

Как уже отмечалось выше, пользовательская функция принимает три аргумента. Для чего нужны два -см. выше, остался последний — &$attribs. Как уже стало понятно, разработчики не остановились на достигнутой гибкости и решили дать возможность использовать дополнительные параметры, которые хранятся в массиве $attribs. Рассмотрим пример:
Code:
<?php defined('_JEXEC') or die('Restricted access'); function modChrome_custom( $module, &$params, &$attribs ) { if (isset( $attribs['headerLevel'] )) { $headerLevel = $attribs['headerLevel']; } else { $headerLevel = 3; } if (isset( $attribs['background'] )) { $background = $attribs['background']; } else { $background = 'blue'; } ?> <div class="moduletable<?php echo $params->get( 'moduleclass_sfx' ); ?>"> <?php if ($module->showtitle) { echo '<h' .$headerLevel .'>' .$module->title .'</h' .$headerLevel .'>'; } ?> <div class="<?php echo $background; ?>"> <?php echo $module->content; ?> </div> </div> <?php } ?>

Затем необходимо установить значения в <jdoc:include />, если этого не сделать, будут использоваться значения по умолчанию: цвет синий, размер заголовка третий. Значения задаются таким образом:

1) <jdoc:include type=«modules» name=«user1» style=«custom» background=«green» /> — задаём значение цвета: background=«green»;
2) <jdoc:include type=«modules» name=«user1» style=«custom» headerLevel=«1» background=«yellow» /> — задаём значение размера заголовка и цвета: headerLevel=«1» и background=«yellow».


Следует помнить что всё здесь описанное - для шаблонов: некоторые вещи будут работать и в компонента и в модулях, но далеко не все.

Как вывести URL-адрес сайта?
Code:
<?php echo JURI::base() ?>

Как вывести название сайта?
Code:
<?php echo $mainframe->getCfg('sitename') ?>

Как вывести e-mail администратора?
Code:
<?php echo $mainframe->getCfg('mailfrom') ?>

Как вывести текущую дату?
Code:
<?php echo JHTML::Date( 'now', '%d | %m | %Y' ) ?>

Форматирование даты можно подсмотреть в мануале.

Как вывести заголовок текущей страницы?
Code:
<?php $document =& JFactory::getDocument(); echo $document->title; ?>

Как в зависимости от времени суток отображать тот или иной шаблон?
Если шаблоны отличаются только стилями (css) то можно просто от времени суток подгружать тот или иной стиль, например так:
Code:
<link rel="stylesheet" href="<?php echo $this->baseurl ?>/templates/vekta/css/<?php echo (date("%H")>=7 && date("%H")<19) ? "day" : "night" ?>.css" type="text/css" />

Если шаблоны координатно разные то слить (подправить пути там где нужно) шаблоны в один каталог и переименовать файл index.php обеих шаблонов; например в index-day.php и index-night.php. Создать index.php и написать в нём:
Code:
<?php // no direct access defined( '_JEXEC' ) or die( 'Restricted access' ); if (date("%H") >= '7' && date("%H") < '18') { require 'index-day.php'; } else { require 'index-night.php'; } ?>

Как сделать свои страницы ошибок?
По умолчанию Joomla 1.5 использует специальные файл "/templates/system/error.php" для вывода ошибок с кодами статуса: 403, 404, 500. Если мы хотим изменить этот файл - необходимо скопировать его в каталог с нашим шаблоном, а также - скопировать файл стилей из "/templates/system/css/error.css" в каталог со стилями шаблона и в «error.php» подредактировать путь к новому файлу стилей. После этого можно править их как угодно. Всё это нужно для того, в частности, чтобы не возникало проблем при обновлении Joomla.

Теперь - пример. Например для кода ошибки 404 выведем соответствующее сообщение:
Code:
<?php if ($this->error->code = '404') { ?> <div id="errorboxheader">Ошибка 404: Странница не найдена</div> <div id="errorboxbody"> <p>К сожалению, странница, которую вы запрашивали, не найдена.</p> </div> </div> <?php } ?>

Для чего нужен файл «params.ini» в каталоге с шаблоном?

Этот файл служит для записи параметров шаблона, которые задаются в панели управления шаблоном, а описываются в файле «templateDetails.xml». Например сделаем возможность в параметрах шаблона задавать фон шаблона. В «templateDetails.xml» добавим секцию для параметров и сам параметр:
Code:
<params> <param name="backgroundVariation" type="list" default="blue" label="Background Variation" description="Background color variation to use"> <option value="blue">Blue</option> <option value="red">Red</option> <option value="green">Green</option> <option value="orange">Orange</option> <option value="black">Black</option> <option value="white">White</option> </param> </params>

Теперь в тег BODY шаблона добавим атрибут CLASS и получим:
Code:
<body class="color_<?php echo $this->params->get('colorVariation') ?>">

А в стилях шаблона опишем классы:
Code:
.color_blue {color:#3796cf;} .color_red {color:#ff1d1d;} .color_green {color:#438f29;} .color_orange {color:#ff8712;} .color_black {color:#000000;} .color_white {color:#ffffff;}
Последнее редактирование: 13 года 1 мес. назад пользователем anatole.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Dev banner 3
Больше
11 года 6 мес. назад - 11 года 6 мес. назад #2 от prividenie
Могу посоветовать отличный сайт, на котором вы можете разместить для продажи свои шаблоны joomla. Отличный сайт. Продавать свои работы очень просто и удабно.

Примечание модератора. Ссылка удалена.
Последнее редактирование: 11 года 6 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 6 мес. назад - 11 года 6 мес. назад #3 от Aleksej
prividenie, ставлю вас в известность о том, что ссылка в первом же сообщении только что зарегистрировавшегося пользователя по традиции приравнивается в Сети к спаму. Со всеми вытекающими отсюда печальными выводами... К слову - вся реклама на нашем сайте является делом сугубо коммерческим, обращайтесь.
Последнее редактирование: 11 года 6 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 5 мес. назад - 11 года 5 мес. назад #4 от prividenie
если тут есть фрилансеры, то у меня для вас хорошее предложение...

Примечание. Отредактировано модератором.
Последнее редактирование: 11 года 5 мес. назад пользователем Aleksej.

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Больше
11 года 5 мес. назад #5 от Aleksej
Привидения, троллей и прочую нечисть у нас на форуме принято кропить святой водой.... в полном соответствии, так сказать, с традициями. Трах-тебедох-тебедох - и все тебе ок, никаких троллей. :)

Пожалуйста Войти или Регистрация, чтобы присоединиться к беседе.

Работает на Kunena форум