Здравствуйте.
Вот такая проблемка. Почти на всех своих сайтах использую модуль принт, поэтому для разнообразия хочется фразу "версия для печати" заменить какой-нибудь картинкой. Стал редактировать этот модуль print.module.php , но чот не получается. Вообщем строка 381 в этом модуле помоему отвечает за это. Кто в пхп разберается напишите что нужно изменить, что бы текстовую ссылку заменить картинкой.
вот строка:
---------
function theme_print_link($node) {
$attributes = array('title' => t('Display a printer friendly version of this page.'));
$links = l(t('версия для печати'), "node/$node->nid/print", $attributes);
return $links;
-----------------
Заранее всем спасибо1
Комментарии
Можно попробовать средствами CSS добавить фоновую картинку (background-image) этому элементу. Или list-style-image использовать.
По поводу фоновой картинки: мне кажется будет сложновато, ведь так или иначе, все равно прийдется оперировать модуль print, потомучто ссылка то в нем прописана. Поэтому для людей знающих пхп проще будет подкорректировать только один файл. Хотя...) А вот по второму методу ничего не могу сказать потомучто не понял.
А можно просто вставить такой код:
в page.tpl.php где хотите выводить эту строчку/картинку:
<?php if (!is_forum()) { ?>
<?php if (!is_user_page()) { ?>
<?php print get_print_link($nid) ?>
<?php } ?><?php } ?><?php } ?>
в template.php вставляем функцию
function is_forum() {
if (arg(0) == 'forum') {
return TRUE;
}
if (arg(0) == 'node') {
if (arg(1) == 'add') {
if (arg(2) == 'forum') {
return TRUE;
}
}
}
if (arg(0) == 'node' && ctype_digit(arg(1))) {
$node = node_load(arg(1));
if ($node->type == 'forum') {
return TRUE;
}
}
return FALSE;
}
function is_user_page() {
if (arg(0) == 'user') {
return TRUE;
}
return FALSE;
}
Эти две функции предотвращают вывод ссылки на версию для печати на тех страницах, где модуль печати не работает.
Это контейнеры форумов, некоторые страницы профилей и д.р.
И наконец, в template.php втавляем функцию, которая и будет формировать ссылку для печати
function get_print_link($nid) {
$linkp = base_path() . 'node/' . $nid . '/print' ;
$out = '' . t('Printer-Friendly Version') . '' ;
return $out;
}
а вот здесь вы уже можете оформить ее как вам захочется.
И не надо править модуль print.
Пошел попробую, может и получится.
Кошмар какой, ничего себе просто!
Нужно лишь в template.php добавить функцию типа
$attributes = array('title' => t('Display a printer friendly version of this page.'));
$image = theme('image', file_create_path('print.gif')); // файл print.gif лежит в каталоге files
$links = l($image, "node/$node->nid/print", $attributes, NULL, NULL, FALSE, TRUE);
return $links;
}
Может и кошмар, но зато более гибко, если модуль print проставляет свои ссылки в куче с другими, то таким способом можно вставить эту ссылку там где хочется мне а не модулю. Например сверху и снизу страницы.
А вообще, согласен. Перемудрил я, вопрос то был немного о другом
А как сделать чтоб версия для печати была только на определеных страница?
Не знаю как другие, а я просто в настройках модуля отключаю "показ ссылки" (или как там его).
Затем в page.php уже сам вызываю функцию phptemplate_print_link($node) {, а точнее немного измененную get_print_link($nid) {
например,
<?php if ($nid==12) { ?>
<php print get_print_link($nid) ?>;
<?php } ?>;
Будет выводить эту ссылку только на 12 ноде, также поискав на этом форуме как определяется приндлежность ноды к категории, можно привязать вывод ссылки и к определенной категории.
А не легче в локализации изменить фразу "версия для печати" на
<a href="blabla"><img src="blabla" \></a>
или же закомменть строку с $links в модуле print, а затем в теме где-нить (как предложил nilard@drupal.org) добавь к линкс нужный тебе код.
$links .= '<a href="blabla"><img src="blabla" \></a>'
а править написанные модули - дурной тон.