0 Пользователей и 1 Гость просматривают эту тему.
  • 6 Ответов
  • 1298 Просмотров
*

frenzy

  • Захожу иногда
  • 63
  • 1 / 0
Нашел тему: http://joomlaforum.ru/index.php?topic=128413.0
Но проблема в том, что если поменять site.ru/templates/system/html/modules.php, то это будет глобальное изменение, а мне нужно, чтобы заголовки некоторых модулей были h3, а некторых h2.
Подскажите пожалуйста, как можно так сделать?
Есть плохая идея захардкодить if, который будет проверять по суффиксу и в зависимости от этого формировать заголовок, но ведь так делать не очень хорошо.
*

motokraft

  • Завсегдатай
  • 1326
  • 72 / 13
Но проблема в том, что если поменять site.ru/templates/system/html/modules.php, то это будет глобальное изменение

Так вы изменяйте не в системном шаблоне, а просто скопируйте этот файл в шаблон по умолчанию...
...
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Есть плохая идея захардкодить if, который будет проверять по суффиксу и в зависимости от этого формировать заголовок, но ведь так делать не очень хорошо.
Почему не хорошо? И как хорошо тогда в вашем понимании? Зайдите например в шаблон beez5 и посмотрите как там стиль для модуля формируется. В шаблоне задается стиль и уровень для заголовков(beezDivision и headerLevel):
Код: html4strict
<jdoc:include type="modules" name="position-X" style="beezDivision" headerLevel="3" />
в templates\beez5\html\modules.php задается функция для стиля beezDivision:
Код: php
function modChrome_beezDivision($module, $params, $attribs) {
   $headerLevel = isset($attribs['headerLevel'])? (int) $attribs['headerLevel'] : 3; //уровень для заголовков из атрибута
   ...//какой-то там еще HTML
   <?php if ($module->showtitle) { ?> <h<?php echo $headerLevel; ?>> ... //сюрприз! в зависимости от headerlevel формируется <hx> тег заголовка
   ...
}
Разработчики видимо сделали не хорошо раз так жестко захордкодили заголовки) Я все же рекомендую вам делать аналогичным образом. Только $headerLevel брать не из атрибутов а из параметров модуля. А они все лежат в $params.
интернет-блог: http://websiteprog.ru
*

frenzy

  • Захожу иногда
  • 63
  • 1 / 0
Так вы изменяйте не в системном шаблоне, а просто скопируйте этот файл в шаблон по умолчанию...
Что значит не в системном шаблоне? Вопрос же чтоб в одном и том же шаблоне заголовок модуля можно было выводить в h2 и h3. куда именно нужно этот файл скопировать в конкретный шабло? Спрашиваю ради интереса, т.к. проблемы это не решает.

zomby6888, плохо это потому, что... блин, как объяснить... Костыль получается, работающий в зависиомсте от получаемых пользовательских данных из базы. А в твоем примере вроде как  headerLevel прописан так же жестко в шаблоне. Т.е. из админки на него не повлиять. Впрочем это вариант: в index.php для отдельных позиций назначить так же
Код
<jdoc:include type="modules" name="topRight" style="xhtml" headerLevel="3" />
- или другие атрибуты
и соответветственно в modules.php дописать такие же проверки. Вроде это же встроенный функционал и нигде больше правок не надо?

Впрочем я вычитал другйо хитрый вариант: создается альтернативный макет вывода. В моем случае:
Код
site.ru\templates\template\html\mod_custom\header2.php
и внутри дописывается перед <div...
Код
<h2><?php echo $module->title; ?></h2>
Ну а в админке соответственно опция "скрыть заголовок". Этот вариант более универсален в плане того, что на одну позацию можно вывести и h2 и h3 и что еще захочешь, а если нужно просто скрыть заголовок, то выбирается стандартынй макет.

P.S. Что характерно мне пригодилось больше решение zomby6888, т.к. выяснилось, что проще поменять заголовки у других модулей, а в тех модулях почему-то небыло предусмотрено альтернативных шаблонов в админке, но они как раз все на одну позицию выводились.
« Последнее редактирование: 23.09.2014, 18:18:13 от frenzy »
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Костыль получается, работающий в зависиомсте от получаемых пользовательских данных из базы. А в твоем примере вроде как  headerLevel прописан так же жестко в шаблоне. Т.е. из админки на него не повлиять.
Вы невнимательно читаете, вам  вовсе необязательно headerlevel получать из атрибута. Все что вам требуется это добавить соответствующий парметр в XML файле модуля (назовете его headerlevel например). В шаблоне прописать:
Код: php
<jdoc:include type="modules" name="topRight" style="сustom"/>
Далее создать в шаблоне в папке HTML файл modules.php с таким примерно содержимым:
Код: php
defined('_JEXEC') or die;

function modChrome_custom($module, $params) {
   $headerlevel = $params->get('headerLevel');
   echo "<h$headerlevel>".$module->title."</h$headerlevel>".$module->content;
}

Впрочем я вычитал другйо хитрый вариант
Вот это больше напоминает костыль. Будет работать только для mod_custom к тому же. Используя параметр $module->showtitle можно создать и более универсальное решение заменив в моем примере строку $headerlevel = $params->get('headerLevel'); на $headerlevel = $module->showtitle ? 2 : 3;
« Последнее редактирование: 23.09.2014, 18:30:52 от zomby6888 »
интернет-блог: http://websiteprog.ru
*

frenzy

  • Захожу иногда
  • 63
  • 1 / 0
zomby6888, что озачает ? 2 : 3; ? Так же из админки же можно выставить showtitle только в 0 и 1 - получается админку нужно будет пилить. Или у форм создания в админке тоже есть шаблоны?
*

zomby6888

  • Завсегдатай
  • 1473
  • 171 / 3
Это конструкция означает что если $module->showtitle отличен от нуля то в $headerlevel будет присвоено 2, в противном случае будет присвоено 3. Соответственно для стиля custom уровень заголовка будет <h2> или <h3> в зависимости от параметра "показывать заголовок". IMHO не самое логически правильное решение, я его привел как аналогию предыдущему и оно не требует доп. параметров в админку модуля добавлять.

По мне так лучше добавить какой нибудь парметр в модуль ну или на основе какого нибудь другого парметра headerlevel формировать. По тому же суффиксу например. Например если суффикс будет headerlevel-x (x-это уровень):
Код: php
...
function modChrome_custom($module, $params) {
    $sfx = htmlspecialchars($params->get('moduleclass_sfx'));;
    $classes = explode(' ', $sfx);
    foreach( $classes as $classname )
    {
          if ( strpos($classname, 'headerlevel')!== false ) {
               $headerlevel = array_pop(explode('-', $classname));
          }
    }  
    echo "<h$headerlevel>".$module->title."</h$headerlevel>".$module->content;
}
...
Чуть больше кода но зато можно использовать гибридные суффиксы например: "classname1  headerlevel-2"
« Последнее редактирование: 24.09.2014, 15:38:11 от zomby6888 »
интернет-блог: http://websiteprog.ru
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Как сделать что бы заголовки статей на сайте были в теге <h1>?

Автор MultiMatrix83

Ответов: 10
Просмотров: 1650
Последний ответ 27.04.2022, 15:56:45
от MultiMatrix83
Сделать отступ справа и слева для баннера

Автор MultiMatrix83

Ответов: 9
Просмотров: 1095
Последний ответ 19.08.2019, 16:55:43
от MultiMatrix83
Управление модулем из другого модуля

Автор capvic

Ответов: 7
Просмотров: 1033
Последний ответ 27.05.2019, 11:46:21
от capvic
Можно ли извлечь материалы из бэкапа?

Автор Cherr23

Ответов: 3
Просмотров: 2619
Последний ответ 14.12.2018, 07:09:04
от lexxbry
Как сделать так чтобы данные о клике на кнопку переходили в Метрику?

Автор dan4ik

Ответов: 3
Просмотров: 1834
Последний ответ 30.11.2018, 09:38:33
от Geinado