Голосование

Полезный материал

Да
10 (100%)
Нет
0 (0%)

Проголосовало пользователей: 10

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

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Вопрос обсуждался не раз. Решил написать краткий мануал, как можно сделать заголовок модуля ссылкой стандартными средствами и минимальными затратами.

Вкратце - заголовок ссылки будет браться из параметров модуля. Т.к. сам заголовок и другие параметры имеют некоторые ограничения на кол-во вводимых сиголовов, я решил использовать поле суффикса класса модуля (это textarea без ограничений).

1. Нам понадобиться файл templates/ШАБЛОН/html/modules.php, если такого файла нет создайте его с следующим содержимым. Если такой файл есть, то см. п.2, добавить код перед "?>"
Код: php
<?php
//защита от прямого доступа
defined('_JEXEC') or die;

//тут будет наши стили для модулей

?>

2. Далее в этот файл необходимо добавить свой стиль, которым будет отображаться модули. Для примера я просто немного модифицировал стандартный стиль html5. Все стандартные стили можно посмотреть в файле templates/system/html/modules.php. Итак вставляем стиль
Код: php
function modChrome_link($module, &$params, &$attribs)
{
$moduleTag      = $params->get('module_tag', 'div');
$headerTag      = htmlspecialchars($params->get('header_tag', 'h3'));
$bootstrapSize  = (int) $params->get('bootstrap_size', 0);
$moduleClass    = $bootstrapSize != 0 ? ' span' . $bootstrapSize : '';
$sfx = $params->get('moduleclass_sfx');
//разбиваем параметр на массив
$sfx = explode("\n", $sfx);
$link = trim($sfx[0]);

//если массив больше 1, то задан суффикс, задаем его
if (count($sfx) > 1) {
$params->set('moduleclass_sfx', $sfx[1]);
}

if (!empty ($module->content)) : ?>
<<?php echo $moduleTag; ?> class="moduletable<?php echo htmlspecialchars($params->get('moduleclass_sfx')); ?><?php echo $moduleClass; ?>">

<?php if ((bool) $module->showtitle) :?>
   <?php $title = '<'. $headerTag . ' class="' .$params->get('header_class'). '">'.$module->title .'</'. $headerTag .'>'; ?>  
   <?php if (!empty($link)) : //если установлена ссылка выводим ее ?>
    <a href="<?php echo JRoute::_($link); ?>"><?php echo $title; ?></a>
   <?php else: ?>
         <?php echo $title; ?>
   <?php endif; ?>
<?php endif; ?>

<?php echo $module->content; ?>

</<?php echo $moduleTag; ?>>

<?php endif;
}

3. Заходим в любой из модулей. Вкладка "Настройки" -> "Дополнительные параметры". Устанавливаем нужный стиль для модуля

Если по каким то причинам у вас нет данного параметра, его можно указать на прямую в шаблоне для нужной позиции
Цитировать
<jdoc:include type="modules" name="position-0" style="link" />

4. Добавляем нужную ссылку. В той же вкладке смотрим параметр "Суффикс CSS-класса модуля". В нем в начале указываем нужную ссылку, затем через "Enter" вводим необходимый суффикс класса модуля, если он нужен.

Обратите внимание, что здесь задаются ссылке без SEF. Если нужно вставить уже какую-то конкретную ссылку, то замените в коде, который указан в п.2 следующее:
Код
<a href="<?php echo JRoute::_($link); ?>"><?php echo $title; ?></a>
заменить на
Код
<a href="<?php echo $link; ?>"><?php echo $title; ?></a>

Все!

*

frag79

  • Давно я тут
  • 611
  • 61 / 0
+ в репу.

Хотя мне больше понравилось как сделано тут, заголовок модуля а рядом ссылка, смотри модуль Top Video Picks и ссылка See all videos
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Хотя мне больше понравилось как сделано тут, заголовок модуля а рядом ссылка, смотри модуль Top Video Picks и ссылка See all videos
ну так никто же не мешает немного переделать функционал)
для этого можно сделать просто несколько манипуляций
В ссылку добавить желаемый ее заголовок. Допустим будет ссылка такого вида:
Цитировать
index.php?...|Тут заголовок ссылки
дальше сделать несколько правок в коде
Код
$link = trim($sfx[0]);
заменить
на
Код
$full_link = explode('|', $sfx[0]);
$link = trim($full_link[0]);
if (isset($full_link[1])) {
    $link_title = utf8_trim($full_link[1]);
} else {
    $link_title = 'Заголовок не задан';
}
...
//выводим
 <?php echo $title; ?> <span class="link_title"><a href="<?php echo JRoute::_($link); ?>"><?php echo $link_title; ?></a></span>
*

step-di

  • Захожу иногда
  • 91
  • 5 / 0
все хорошо, но
при выводе
$module->content
его содержимое берется из  шаблона модуля
и если в шаблоне где -то выводится суффикс, то он будет выводиться таким, как задан в настройках модуля и заданная ссылка поселится там

так как
$params->set('moduleclass_sfx', новое значение суффикса);
не срабатывает

я пробовал у меня так и вышло

пришлось вместо
echo $module->content;
написать
$sfx[]="\n"; echo str_replace($sfx, '', $module->content);
этим я вывожу шаблон модуля с удалением из него всех строчек из суффикса, в том числе и переносы строк

еще я прицепил проверку каждой строчки в суффиксе на наличие .css и на .js
если они встречаются, то внедряю стиль и js скрипт, соответственно, через функции

$document->addStyleSheet(путь к CSS файлу, 'text/css' );
$document->addScript(путь к js файлу)

где $document = JFactory::getDocument();

Внедрение дополнительных CSS и JS удобно при использовании модуля типа HTML
В инете полно уроков по созданию каких нибудь эффектов на базе JS плагинов.
Они как раз требуют подключение этих CSS и JS файлов
« Последнее редактирование: 06.11.2013, 13:22:04 от step-di »
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Цитировать
его содержимое берется из  шаблона модуля
и если в шаблоне где -то выводится суффикс, то он будет выводиться таким, как задан в настройках модуля и заданная ссылка поселится там
Ну это уже вопрос к этим модулям. Зачем где-то в шаблоне выводить суффикс, если он задается в родительском элементе и предназначен для этого не очень понятно. Уже бы сделали тогда дополнительный параметр, если надо.
*

step-di

  • Захожу иногда
  • 91
  • 5 / 0
Ну это уже вопрос к этим модулям. Зачем где-то в шаблоне выводить суффикс, если он задается в родительском элементе и предназначен для этого не очень понятно. Уже бы сделали тогда дополнительный параметр, если надо.

зачем делать дополнительный параметр у модуля, когда можно вывод всех имеющихся модулей подкорректировать в одном месте
через суффикс - стандартный параметр каждого модуля - вполне хорошее решение
*

Azizkz

  • Осваиваюсь на форуме
  • 15
  • 0 / 0
Всем привет! читал читал тут... как сделать Заголовок модуля ссылкой? Тоже ломал над этим вопрос голову... но есть вообще простой вариант .... заходим в phpMyAdmin кликаем по своей базе, находим там таблицу _modules кликаем по ней там ищем наш модуль к которому надо сделать ссылку... нашли нажимаем изменить и где названия просто вбиваем ссылку такого рода ... <p><a href="здесь ссылка, типа(http://sait.com/dsds)">Здесь названия модуля</a></p> (в названия модуля будет отображаться тока его названия...) нажимаем сохранить и все готово ))) если сразу не появилось рекомендую очистить кеш сайта и обновить страницу... ДУМАЮ КОМУ НЕБУДЬ ПОМОЖЕТ =)
*

elsid

  • Новичок
  • 5
  • 0 / 0
Azizkz расскажи пожалуйста об этом более подробно, на примере модуля VirtueMart Товары.
*

elsid

  • Новичок
  • 5
  • 0 / 0
Все спасибо разобрался. Способ простой и эффективный.
*

master-smeta

  • Захожу иногда
  • 295
  • 10 / 0
А я просто допилил стандартный модуль вывода материалов категории (мне заголовок-ссылка нужен только для такого модуля). К админке модуля добавил пару полей, в которые просто руками прописываю ссылку и анкор для нее, а потом добавил вывод данных в шаблоне модуля.
Такой способ немного сложнее, но более функциональный и расширяемый.
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Такой способ немного сложнее, но более функциональный и расширяемый.
при таком способе надо делать отдельный свой модуль
просто при следующем обновлении макет то останется, если он переопределен в шаблоне, а вот XML с параметрами может и не остаться.
*

umbabaraumba

  • Живу я здесь
  • 2415
  • 153 / 1
  • если помог можете поставить +
Картинки в первом сообщении не увеличиваются и на них ничего не видно.
Можно их побольше сделать или чтоб они при нажатии увеличивались ?
Errare humanum est
Ubuntu по-русски
Пишу не сложные модули и компоненты, не дорого но не срочно
*

coolhtml

  • Захожу иногда
  • 69
  • 2 / 1
Для Joomla 2.5 не подходит. Нельзя enter нажать, возможно как решить эту проблемку?
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Для Joomla 2.5 не подходит. Нельзя enter нажать, возможно как решить эту проблемку?
разделитель без разницы какой будет
пусть для примера будет "$"
тогда нужно заменить
Код
	//разбиваем параметр на массив
$sfx = explode("\n", $sfx);
$link = trim($sfx[0]);
на
Код
	//разбиваем параметр на массив
$sfx = explode("$", $sfx);
$link = trim($sfx[0]);
*

sovatey

  • Новичок
  • 7
  • 0 / 0
Сработало на ура. Спасибо
*

AlekVolsk

  • Гуру
  • 6915
  • 414 / 4
Все бы ничего, но, имхо, лучше добавить свой стиль в modules.php шаблона, ибо системный modues периодически перезаписывается при обновах.

разделитель без разницы какой будет
пусть для примера будет "$"
тогда нужно заменить
Код
	//разбиваем параметр на массив
$sfx = explode("\n", $sfx);
$link = trim($sfx[0]);
на
Код
	//разбиваем параметр на массив
$sfx = explode("$", $sfx);
$link = trim($sfx[0]);
Идеально в качестве разделителя подходит прямой слэш |
*

SmokerMan

  • Гуру
  • 5293
  • 720 / 26
Все бы ничего, но, имхо, лучше добавить свой стиль в modules.php шаблона, ибо системный modues периодически перезаписывается при обновах.
ну так читаем внимательно пункт 1
1. Нам понадобиться файл templates/ШАБЛОН/html/modules.php, если такого файла нет создайте его с следующим содержимым. Если такой файл есть, то см. п.2, добавить код перед "?>"
*

umbabaraumba

  • Живу я здесь
  • 2415
  • 153 / 1
  • если помог можете поставить +
Errare humanum est
Ubuntu по-русски
Пишу не сложные модули и компоненты, не дорого но не срочно
*

umbabaraumba

  • Живу я здесь
  • 2415
  • 153 / 1
  • если помог можете поставить +
Errare humanum est
Ubuntu по-русски
Пишу не сложные модули и компоненты, не дорого но не срочно
*

jureus

  • Осваиваюсь на форуме
  • 10
  • 0 / 0
спасибо за туториал
*

leilweb

  • Новичок
  • 2
  • 3 / 0
Спасибо, сработало на ура!
*

tati-2000

  • Захожу иногда
  • 308
  • 2 / 0
А как сделать ссылкой заголовок категории отображаемой в модуле newspro. Сам заголовок модуля скрыт, в настройках: категория как ссылка . И так чтобы при обновлениях не слетало.
*

Arturs2006

  • Осваиваюсь на форуме
  • 36
  • 0 / 1
Автор реально молодец! Бескорыстно всё написал и пояснил, так что даже новички поймут. Побольше бы таких людей, а не самовлюблённых моральных уродов, которые в ответ на элементарные вопросы начинают оскорблять.
Только у меня вопрос: а как сделать так, чтобы заголовок модуля вёл себя как любая другая ссылка? Т.е. чтобы менял цвет, подчёркивался при наведении и тд? А то ссылка-то работает, но никто не догадается, что она там есть...
*

umbabaraumba

  • Живу я здесь
  • 2415
  • 153 / 1
  • если помог можете поставить +
Автор реально молодец! Бескорыстно всё написал и пояснил, так что даже новички поймут. Побольше бы таких людей, а не самовлюблённых моральных уродов, которые в ответ на элементарные вопросы начинают оскорблять.
Только у меня вопрос: а как сделать так, чтобы заголовок модуля вёл себя как любая другая ссылка? Т.е. чтобы менял цвет, подчёркивался при наведении и тд? А то ссылка-то работает, но никто не догадается, что она там есть...
Это все легко делается через CSS .
Errare humanum est
Ubuntu по-русски
Пишу не сложные модули и компоненты, не дорого но не срочно
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

[Решено] Создание модуля. Генерировать CSS для каждой копии модуля

Автор eugenes

Ответов: 10
Просмотров: 19790
Последний ответ 13.02.2019, 12:48:40
от passer
[Решено] Как сделать название меню в две строки?

Автор alexeyhead

Ответов: 10
Просмотров: 15765
Последний ответ 10.03.2014, 20:43:49
от alexeyhead
[Решено] Почему не работает опция "HTML-тег модуля"?

Автор Kiskenbassker

Ответов: 2
Просмотров: 13726
Последний ответ 22.09.2013, 23:54:18
от Kiskenbassker