Форум русской поддержки Joomla!® CMS
04.12.2016, 03:59:17 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
   
   Начало   Поиск Joomla 3.0 FAQ Joomla 2.5 FAQ Joomla 1.5 FAQ Правила форума Новости Joomla Реклама Войти Регистрация Помощь  
Голосование
Вопрос: Полезный материал
Да - 8 (100%)
Нет - 0 (0%)
Всего голосов: 8

Страниц: [1]   Вниз
  Добавить закладку  |  Печать  
Автор

[FAQ] Как сделать заголовок модуля ссылкой?

 (Прочитано 7658 раз)
0 Пользователей и 1 Гость смотрят эту тему.
SmokerMan
Профи
********

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« : 05.09.2013, 13:30:50 »

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

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

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

2. Далее в этот файл необходимо добавить свой стиль, которым будет отображаться модули. Для примера я просто немного модифицировал стандартный стиль html5. Все стандартные стили можно посмотреть в файле templates/system/html/modules.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
Завсегдатай
*****

Репутация: +61/-0
Offline Offline

Пол: Мужской
Сообщений: 597


« Ответ #1 : 05.09.2013, 14:18:25 »

+ в репу.

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

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #2 : 05.09.2013, 14:48:12 »

Хотя мне больше понравилось как сделано тут, заголовок модуля а рядом ссылка, смотри модуль 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
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 67


« Ответ #3 : 06.11.2013, 13:05:35 »

все хорошо, но
при выводе
$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
Профи
********

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #4 : 06.11.2013, 16:10:49 »

Цитировать
его содержимое берется из  шаблона модуля
и если в шаблоне где -то выводится суффикс, то он будет выводиться таким, как задан в настройках модуля и заданная ссылка поселится там
Ну это уже вопрос к этим модулям. Зачем где-то в шаблоне выводить суффикс, если он задается в родительском элементе и предназначен для этого не очень понятно. Уже бы сделали тогда дополнительный параметр, если надо.
Записан
step-di
Осваиваюсь на форуме
***

Репутация: +4/-0
Offline Offline

Сообщений: 67


« Ответ #5 : 06.11.2013, 19:20:47 »

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

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

Репутация: +0/-0
Offline Offline

Сообщений: 11


« Ответ #6 : 03.02.2014, 01:28:57 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 5


« Ответ #7 : 19.02.2014, 00:17:30 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 5


« Ответ #8 : 19.02.2014, 23:28:21 »

Все спасибо разобрался. Способ простой и эффективный.
Записан
master-smeta
Давно я тут
****

Репутация: +8/-0
Offline Offline

Пол: Мужской
Сообщений: 254


« Ответ #9 : 14.07.2014, 11:55:24 »

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

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #10 : 15.07.2014, 02:31:52 »

Такой способ немного сложнее, но более функциональный и расширяемый.
при таком способе надо делать отдельный свой модуль
просто при следующем обновлении макет то останется, если он переопределен в шаблоне, а вот XML с параметрами может и не остаться.
Записан
umbabaraumba
Практически профи
*******

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 2558

если помог можете поставить +


« Ответ #11 : 17.07.2014, 13:21:02 »

Картинки в первом сообщении не увеличиваются и на них ничего не видно.
Можно их побольше сделать или чтоб они при нажатии увеличивались ?
Записан
coolhtml
Осваиваюсь на форуме
***

Репутация: +2/-1
Offline Offline

Сообщений: 82


« Ответ #12 : 18.09.2014, 20:06:30 »

Для Joomla 2.5 не подходит. Нельзя enter нажать, возможно как решить эту проблемку?
Записан
SmokerMan
Профи
********

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #13 : 18.09.2014, 20:26:40 »

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

Репутация: +0/-0
Offline Offline

Сообщений: 7


« Ответ #14 : 30.09.2014, 11:55:56 »

Сработало на ура. Спасибо
Записан
AlekVolsk
Профи
********

Репутация: +316/-3
Offline Offline

Пол: Мужской
Сообщений: 6452



« Ответ #15 : 30.09.2014, 14:28:22 »

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

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

Репутация: +692/-25
Offline Offline

Пол: Мужской
Сообщений: 5215



« Ответ #16 : 30.09.2014, 17:10:01 »

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

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 2558

если помог можете поставить +


« Ответ #17 : 27.03.2015, 22:12:40 »

! !
? ?
Записан
umbabaraumba
Практически профи
*******

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 2558

если помог можете поставить +


« Ответ #18 : 27.03.2015, 22:49:51 »

ЧТО ЭТО?
Записан
jureus
Захожу иногда
**

Репутация: +0/-0
Offline Offline

Сообщений: 10


« Ответ #19 : 12.04.2015, 19:23:59 »

спасибо за туториал
Записан
leilweb
Новичок
*

Репутация: +3/-0
Offline Offline

Сообщений: 2



« Ответ #20 : 06.08.2015, 18:54:05 »

Спасибо, сработало на ура!
Записан
tati-2000
Осваиваюсь на форуме
***

Репутация: +1/-0
Offline Offline

Сообщений: 101


« Ответ #21 : 13.01.2016, 00:00:21 »

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


* 2016-01-12 22-53-02 Скриншот экрана.jpg (170.36 Кб, 1910x868 - просмотрено 132 раз.)
Записан
Arturs2006
Осваиваюсь на форуме
***

Репутация: +0/-1
Offline Offline

Сообщений: 41



« Ответ #22 : 14.05.2016, 19:15:44 »

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

Репутация: +153/-1
Offline Offline

Пол: Мужской
Сообщений: 2558

если помог можете поставить +


« Ответ #23 : 14.05.2016, 22:19:26 »

Автор реально молодец! Бескорыстно всё написал и пояснил, так что даже новички поймут. Побольше бы таких людей, а не самовлюблённых моральных уродов, которые в ответ на элементарные вопросы начинают оскорблять.
Только у меня вопрос: а как сделать так, чтобы заголовок модуля вёл себя как любая другая ссылка? Т.е. чтобы менял цвет, подчёркивался при наведении и тд? А то ссылка-то работает, но никто не догадается, что она там есть...
Это все легко делается через CSS .
Записан
Страниц: [1]   Вверх
  Добавить закладку  |  Печать  
 
Перейти в:  

Powered by SMF 1.1.21 | SMF © 2006, Simple Machines

Joomlaforum.ru is not affiliated with or endorsed by the Joomla! Project or Open Source Matters.
The Joomla! name and logo is used under a limited license granted by Open Source Matters
the trademark holder in the United States and other countries.

LiveInternet