Joomla заголовок модуля как ссылка | Joomla

Скопипастим себе статью http://bigemot.ru/portfolio/6-coding/14–joomla- поскольку метод работает и вполне удачен. Себе и другим на заметку.

Задача – сделать заголовки модулей ссылками.

Правим файл administrator/components/com_modules/admin.modules.html.php

Ищем:

<tr>
  <td width="100" class="key">
    <?php echo JText::_( 'Show title' ); ?>:
  </td>
  <td>
    <?php echo $lists['showtitle']; ?>
  </td>
</tr>

Сразу за этим блоком кода вставляем:

<tr>
  <td class="key">
    <label for="islink">
      <?php echo JText::_( 'Title' ).' '.JText::_( 'WEBLINK' ).'?'."\n"; ?>
    </label>
  </td>
  <td>
  <?php if ($params->get('islink', '') == 2){
    $ch2= 'checked="checked"'; $ch1=''; $dis='';
    }else{
    $ch1= 'checked="checked"'; $ch2=''; $dis='style="visibility:hidden"';
    } ?>
     <input type="radio" name="params[islink]" value="1" onclick="togl(1);" <?php echo $ch1 ?>/> <?php echo JText::_( 'NO' )."\n"; ?>
     <input type="radio" name="params[islink]" value="2" onclick="togl(2);" <?php echo $ch2 ?>/> <?php echo JText::_( 'YES' )."\n"; ?>     <script language="javascript" type="text/javascript">
        <!--
        function togl(k){
          if (k==1){
            document.getElementById("isweblink").style.visibility="hidden";
          }else{
            document.getElementById("isweblink").style.visibility="visible";
          }
        }
        //-->
      </script>  </td>
</tr>
<tr>
  <td class="key">
    <label for="isweblink">
    <?php echo JText::_( 'WEBLINK' ); ?>
    </label>
  </td>
  <td id="isweblink" <?php echo $dis ?>>
    <input class="text_area" type="text" name="params[isweblink]" size="35" value="<?php echo $params->get('isweblink', ''); ?>" />
  </td>
</tr>

Он обеспечивает нам в админке возможность активизировать заголовок модуля как ссылку.
Далее идём править заголовок в модуле. Правим файл templates/system/html/modules.php:

<h3><?php echo $module->title; ?></h3>

Меняем на:

<?php if($params->get('islink') == 2){
    echo '<h3><a href="'.$params->get('isweblink').'">'.$module->title.'</a></h3>'."\n";
  }else{?>
    <h3><?php echo $module->title; ?></h3>
<?php }?>

Получаем возможность добавить ссылку в заголовок модуля.

Далее идём в каскад шаблона и правим стиль ссылки. Например так:

.moduletable-custom a {
color: #FFFFFF;
text-decoration:none;
}

Автору хака – особая блгодарность.

  1. Константин:

    Помогите пожалуйста решить проблему: в админке всё прекрасно получилось, а вот сам заголовок ссылкой так и не стал. Стоит Advanced Modules, первый пункт, где предлагается менять по адресу administrator/components/com_modules/admin.modules.html.php то мне не помогло, в админке всё заработало после изменения файла administrator/components/com_advancedmodules/admin.advancedmodules.html.php , а вот заголовок ссылкой так и не стал

  2. admin:

    Изменения в шаблон внесли?
    В этот файл: templates/system/html/modules.php

  3. Константин:

    Да внёс, и ешё внёс в templates/мой сайт/html/modules.php, но не заработало

  4. Константин:

    Такой код получился

    /*
    * xhtml (divs and font headder tags)
    */
    function modChrome_xhtml($module, &$params, &$attribs)
    {
    if (!empty ($module->content)) : ?>
    <div class="moduletableget(‘moduleclass_sfx’); ?>»>
    showtitle != 0) : ?>
    get(‘islink’) == 2){
    echo ‘get(‘isweblink’).’»>’.$module->title.’‘.»\n»;
    }else{?>
    title; ?>

    content; ?>

    <div class="moduleget(‘moduleclass_sfx’); ?>»>

    showtitle != 0) : ?>
    get(‘islink’) == 2){
    echo ‘get(‘isweblink’).’»>’.$module->title.’‘.»\n»;
    }else{?>
    title; ?>

    content; ?>

    addStyleDeclaration($css);

    ?>

    position.»[".$module->style."]«; ?>

    content; ?>

  5. Константин:

    Простите за флуд, видимо в коментах обрезает

  6. admin:

    Если ошибок нет – должно работать. На всякий случай – учтоню – у меня joomla 1.5,
    в templates/system/html/modules.php меняем срочки для всех вариантах модулей – в зависимости от того какие из них использует ваш темплейт – это может быть modCrome_table, modCrome_xhtml, modCrome_rounded и т.д.

    /*
     * xhtml (divs and font headder tags)
     */
    function modChrome_xhtml($module, &$params, &$attribs)
    {
    if (!empty ($module->content)) : ?>
    <div class="moduletable<?php echo $params->get('moduleclass_sfx'); ?>">
    <?php if ($module->showtitle != 0) : ?>
    
    <?php if($params->get('islink') == 2){
        echo '<h3><a href="'.$params->get('isweblink').'">'.$module->title.'</a></h3>'."\n";
          }else{?>
              <h3><?php echo $module->title; ?></h3>
              <?php }?>
    
    <?php endif; ?>
    <?php echo $module->content; ?>
    </div>
    <?php endif;
    }
  7. Константин:

    Спасибо большое, всё заработало

  8. Владислав:

    1.5, все по инструкции, и не работает :( Беда.

  9. Илья:

    Здравствуйте. Уже перерыл все. Помогите. Не могу прикрутить вот это к этому:

    function modChrome_artblock($module, &$params, &$attribs)
    {
    if (!empty ($module->content))
    echo artxBlock(($module->showtitle != 0) ? $module->title : », $module->content,
    $params->get(‘artx-module-classes’));
    }

    Отображается без «блока», т.е. просто ссылка без стилей, если сделать так:
    function modChrome_artblock ($module, &$params, &$attribs)
    {
    if (!empty ($module->content)) : ?>
    <div class="moduletableget(‘moduleclass_sfx’); ?>»>
    showtitle != 0) : ?>

    get(‘islink’) == 2){
    echo ‘get(‘isweblink’).’»>’.$module->title.’‘.»\n»;
    }else{?>
    title; ?>

    content; ?>

    <?php endif;
    }

    Помогите, пожалуйста.