Заменить Read More ссылку на img и сместить ее вправо.

Главные вкладки

Аватар пользователя W32 W32 31 мая 2011 в 1:56

Собственно сам вопрос: как в теме (желательно именно в теме а не сторонним модулем) заменить ссылку 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 прижимает контейнер вправо. Но почему-то это не работает. Sad

Комментарии

Аватар пользователя W32 W32 31 мая 2011 в 12:22

Можно и background-м но есть вопрос: не решается задача прижатия к правому краю, а остальное я уже сделал Smile зачем тогда background ?

А если серьезно, то для background нужно жестко указать размер картинки, иначе она будет обрезана по размеру контейнера. Мне такое не подходит, потому как при смене картинки (другой размер) нужно менять и CSS.

Аватар пользователя W32 W32 1 июня 2011 в 14:13

Извините, я не совсем понял какой код хотели бы увидеть?
Поясню свою задачу... мне для сайта подходит стандартная тема 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 (этот класс содержит прижатие к правой границе). Но это почему-то не сработало....! Вот и пытаюсь как-то исправить.