Функция предварительной обработки темы Drupal - основные ссылки

Недавно я написал функцию темы, чтобы добавить класс к моим основным ссылкам, и это прекрасно работает. Затем я написал несколько классов css, чтобы оформить эти ссылки с помощью пользовательских фоновых изображений. Сработало отлично. Теперь возникает проблема, текст ссылки для основных ссылок все еще отображается. Обычно это не проблема, так как я бы просто обернул его в пользовательский класс «скрыть». Например:

<span class="hide"><a href="#">Link Text</a></span>

Итак, мой вопрос: как я могу перебрать основные ссылки и обернуть текст <span>, как в моем примере? Вот моя функция темы, которую я использовал для добавления своих классов.

function zkc_preprocess_page(&$vars, $hook) {

// Make a shortcut for the primary links variables
  $primary_links = $vars['primary_links'];
// Loop thru the menu, adding a new class for CSS selectors
    $i = 1;

    foreach ($primary_links as $link => $attributes){
        // Append the new class to existing classes for each menu item
        $class = $attributes['attributes']['class'] . " item-$i";
        // Add revised classes back to the primary links temp variable
        $primary_links[$link]['$attributes']['class'] = $class;
        $i++;
        } // end the foreach loop

// reset the variable to contain the new markup
$vars['primary_links'] = $primary_links;

}

person slimcady    schedule 25.03.2010    source источник


Ответы (4)


Является ли jQuery вариантом?

Попробуйте что-то вроде этого:

$(document).ready(function(){
  $('#primary li a')
  .wrapInner('<span class="hide">' + '</span>');
});

РЕДАКТИРОВАТЬ:

Или, если вы хотите перейти на Drupal, поместите этого парня в свой цикл foreach:

$link['title'] = '<span class="hide">' . check_plain($link['title']) . '</span>';

person Erik Ahlswede    schedule 25.03.2010
comment
jQuery работал как шарм, спасибо! Немного CSS, и все работает так, как я хочу. Большое спасибо. - person slimcady; 26.03.2010

Если все, что вам нужно, это скрыть текст ссылки, почему бы вам просто не использовать что-то вроде text-indent: -9999px;?

person googletorp    schedule 25.03.2010
comment
Мне тоже нравится эта идея! Я намного лучше разбираюсь в css, чем в php, так что это может работать лучше для меня. - person slimcady; 26.03.2010
comment
Это не плохая практика, это действительно хорошая практика. Если вы используете фоновые изображения для ссылок, это нормально для людей, которые могут видеть, но для программ чтения с экрана у вас все равно должен быть текст ссылки. Таким образом, использование отступа текста, чтобы скрыть его от обычных пользователей, вполне допустимо. Программа чтения с экрана по-прежнему имеет доступ к информации о ссылке, потому что мы были достаточно умны, чтобы оставить там текст ссылки. - person Ben; 16.11.2011

Правильные методы изменения вывода ссылок меню могут быть выполнены на уровне темы. Вы были на правильном пути с использованием хука предварительной обработки, но это еще не все.

Обратитесь к этому для получения дополнительной информации:

http://drupal.org/node/352924#comment-1189890

http://api.drupal.org/api/function/theme_links/6

person Kevin    schedule 26.03.2010
comment
К сожалению, я использую Drupal6, и это руководство применимо только к версиям 4.7 и 5, что-то старое... в любом случае спасибо! - person slimcady; 29.03.2010
comment
Хм, интересно, почему там ничего о Drupal 6 нет. Проверьте это drupal.org/node/352924#comment-1189890 api.drupal.org/api/function/theme_links/6 - person Kevin; 29.03.2010

Опечатка?

$primary_links[$link]['$attributes']['class'] = $class;

Должен прочесть;

$primary_links[$link]['attributes']['class'] = $class;

person abitofcode    schedule 26.03.2010