Собственно сам вопрос: как в теме (желательно именно в теме а не сторонним модулем) заменить ссылку Read More, которая выводится в тизеровом списке узлов, на картинку (тег img) и прижать ее к правому краю ?
Я в своей теме сделал так:
<?php
/**
* Implements template_preprocess_node().
*/
function kgarland_preprocess_node(&$vars)
{
// Change Read-more link text to img.
if ( isset($vars['content']['links']['node']['#links']['node-readmore']) )
{
$theme_path = drupal_get_path('theme', 'kgarland');
$vars['content']['links']['node']['#links']['node-readmore']['title'] = theme('image', array('path' => $theme_path . '/images/kg_right.png', 'alt' => t('>>>')));
$vars['content']['links']['node']['#links']['node-readmore']['html'] = TRUE;
$vars['content']['links']['#attributes'] = array('class' => array('inline', 'more-link'));
}
}
?>
Вроде картинку получил и все работает, но вот прижать к правой границе не получается. Последняя строчка меняет стандартные CSS классы для списка ссылок с дефлотных "links inline" на "more-link inline", т.к. класс more-link прижимает контейнер вправо. Но почему-то это не работает.
Комментарии
А background-ом нельзя добавить?!
Можно и background-м но есть вопрос: не решается задача прижатия к правому краю, а остальное я уже сделал
зачем тогда background ?
А если серьезно, то для background нужно жестко указать размер картинки, иначе она будет обрезана по размеру контейнера. Мне такое не подходит, потому как при смене картинки (другой размер) нужно менять и CSS.
и опять тихо... хоть посоветуйте что почитать, если помочь не можете
Не обязательно жесткий размер контейнера для background!
Хотелось бы код увидеть! Прижмем к любому краю!
Извините, я не совсем понял какой код хотели бы увидеть?
Поясню свою задачу... мне для сайта подходит стандартная тема Garland, но в ней при выводе тизера статей (на главной странице) под каждым брифом статьи есть ссылка Read More, она прижата к левому краю своего региона.
Меня это не устраивает, нужно текст Read More заменить на картинку и прижать ссылку к правому краю региона.
Для этого я сделал под-тему и в ней реализовал хук который привел выше в теме топика.
Это хук реализован на основе того что я увидел в коде метода node_build_content() - http://api.drupal.org/api/drupal/modules--node--node.module/function/nod...
Этот метод строит рендер-массив для содержимого узла в разных режимах отображения. Именно он добавляет в конец контента ссылки:
<?php
$node->content['links']['node'] = array(
'#theme' => 'links__node__node',
'#links' => $links,
'#attributes' => array('class' => array('links', 'inline')),
);
?>
где links содержит формирование ссылки Read More:
<?php
$links['node-readmore'] = array(
'title' => t('Read more<span class="element-invisible"> about title</span>', array('title' => $node_title_stripped)),
'href' => 'node/' . $node->nid,
'html' => TRUE,
'attributes' => array(
'rel' => 'tag',
'title' => $node_title_stripped,
),
?>
именно эту ссылку я и модифицирую в своем kgarland_preprocess_node, заменяя текст ссылки на тег картинки...
но этим решается только часть задачи (замена текста на картинку).
Теперь я пытаюсь прижат ссылку к правому краю региона... Если посмотреть код node_build_content() и в браузере текст страницы, то видно что ссылки узла оформляются в список ul с классами '#attributes' => array('class' => array('links', 'inline')). Я попытался в kgarland_preprocess_node (последняя строчка) заменить класс links на more-link (этот класс содержит прижатие к правой границе). Но это почему-то не сработало....! Вот и пытаюсь как-то исправить.
мне нужен HTML и CSS
Нужно максимально делать силами CSS, и уж потом код ковырять