×
Покер бот на Ruby on Rails (12 сен 2018)

Третья ипостась покера на ruby. Искреннее спасибо всем, кто прислал замечания по предыдущим релизам.

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

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

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

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

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

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

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

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

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

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

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

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

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

6) style=«outline» — выводит модуль с названием позиции модуля; словно также, когда к адресу сайта добавляется параметр «tp=1» для просмотра имеющихся позиций модулей в шаблоне:
<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:
<?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 — переменная выводит заголовок модуля.

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

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

Теперь практика. Создадим пользовательский модуль, назовём его «custom» (это значит, что при использования его в шаблоне нужно будет написать style=«custom» в <jdoc:include />). Ну а толку да от такого модуля? Нужно сделать что-то интересное, чтобы почувствовать действительную необходимость пользовательских модулей! Сделаем первое слово в заголовке модуля красным цветом, а все остальные слова — цветом по умолчанию, описанному в стилях:
<?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. Рассмотрим пример:
<?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-адрес сайта?
<?php echo JURI::base() ?>

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

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

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

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

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

Как в зависимости от времени суток отображать тот или иной шаблон?
Если шаблоны отличаются только стилями (css) то можно просто от времени суток подгружать тот или иной стиль, например так:
<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 и написать в нём:
<?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 выведем соответствующее сообщение:
<?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» добавим секцию для параметров и сам параметр:
<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 и получим:
<body class="color_<?php echo $this->params->get('colorVariation') ?>">

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

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

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

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

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

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

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

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

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

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

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

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