2010-03-16 2 views
0

Я пытаюсь добавить выпадающие меню в тему drupal, которая использует текстовое раздвижное CSS-округление.Drupal Добавление Span внутри тегов в Nice Menus

Текущая версия использует первичные ссылки для инъекции span в теги, которые отлично работают. Но не поддерживает выпадающие меню.

Рабочий код:

<?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?> 

В шаблоне с template.php добавления файла:

<?php 
// function for injecting spans inside anchors which we need for the theme's rounded corner background images 
function strands_guybrush_links($links, $attributes = array('class' => 'links')) { 
    $output = ''; 
    if (count($links) > 0) { 
    $output = '<ul'. drupal_attributes($attributes) .'>'; 

    $num_links = count($links); 
    $i = 1; 

    foreach ($links as $key => $link) { 
     $class = $key; 

     // Add first, last and active classes to the list of links to help out themers. 
     if ($i == 1) { 
     $class .= ' first'; 
     } 
     if ($i == $num_links) { 
     $class .= ' last'; 
     } 
     if (isset($link['href']) && ($link['href'] == $_GET['q'] || ($link['href'] == '<front>' && drupal_is_front_page()))) { 
     $class .= ' active'; 
     } 
     $output .= '<li'. drupal_attributes(array('class' => $class)) .'>'; 

     if (isset($link['href'])) { 
     $link['title'] = '<span class="link">' . check_plain($link['title']) . '</span>'; 
     $link['html'] = TRUE;  
     // Pass in $link as $options, they share the same keys. 
     $output .= l($link['title'], $link['href'], $link);   
     } 
     else if (!empty($link['title'])) { 
     // Some links are actually not links, but we wrap these in <span> for adding title and class attributes 
     if (empty($link['html'])) { 
      $link['title'] = check_plain($link['title']); 
     } 
     $span_attributes = ''; 
     if (isset($link['attributes'])) { 
      $span_attributes = drupal_attributes($link['attributes']); 
     } 
     $output .= '<span'. $span_attributes .'>'. $link['title'] .'</span>'; 
     } 

     $i++; 
     $output .= "</li>\n"; 
    } 

    $output .= '</ul>'; 
    } 
    return $output; 
} 
?> 

Так я добавил Nice Menu module, который хорошо работает и позволяет выпадающее меню функций для моего навигацию, которая теперь обращена из шаблона, используя:

<?php print theme_nice_menu_primary_links() ?> 

Проблема в том, что теги должны иметь промежутки внутри, чтобы разрешить выбранную разметку состояния. Я пробовал каждый угол, который мог найти, чтобы отредактировать функцию drupal menu_item_link, которая используется красивыми меню для создания ссылок.

E.g. Я смотрел на форум drupal в течение двух дней и без радости.

линии в модуле, которые строят ссылки являются:

function theme_nice_menu_build($menu) { 
    $output = ''; 
    // Find the active trail and pull out the menus ids. 

    menu_set_active_menu_name('primary-links'); 
    $trail = menu_get_active_trail('primary-links'); 
    foreach ($trail as $item) { 
    $trail_ids[] = $item['mlid']; 
    } 

    foreach ($menu as $menu_item) { 
    $mlid = $menu_item['link']['mlid']; 
    // Check to see if it is a visible menu item. 
    if ($menu_item['link']['hidden'] == 0) { 
     // Build class name based on menu path 
     // e.g. to give each menu item individual style. 
     // Strip funny symbols. 
     $clean_path = str_replace(array('http://', '<', '>', '&', '=', '?', ':'), '', $menu_item['link']['href']); 
     // Convert slashes to dashes. 
     $clean_path = str_replace('/', '-', $clean_path); 
     $class = 'menu-path-'. $clean_path; 
     $class .= in_array($mlid, $trail_ids) ? ' active' : ''; 
     // If it has children build a nice little tree under it. 
     if ((!empty($menu_item['link']['has_children'])) && (!empty($menu_item['below']))) { 
     // Keep passing children into the function 'til we get them all. 
     $children = theme('nice_menu_build', $menu_item['below']); 
     // Set the class to parent only of children are displayed. 
     $class .= $children ? ' menuparent ' : ''; 
     // Add an expanded class for items in the menu trail. 
     $output .= '<li id="menu-'. $mlid .'" class="'. $class .'">'. theme('menu_item_link', $menu_item['link']); 
     // Build the child UL only if children are displayed for the user. 
     if ($children) { 
      $output .= '<ul>'; 
      $output .= $children; 
      $output .= "</ul>\n"; 
     } 
     $output .= "</li>\n"; 
     } 
     else { 
     $output .= '<li id="menu-'. $mlid .'" class="'. $class .'">'. theme('menu_item_link', $menu_item['link']) .'</li>'."\n"; 
     } 
    } 
    } 
    return $output; 
} 

Как вы можете видеть, что $ вывод использует menu_item_link для разбора массива в ссылки и добавили класс активных к выбранной ссылке навигации.

Вопрос в том, как добавить диапазон внутри тегов или как я могу обернуть теги с помощью span, который имеет активный класс для стиля ссылок на раздвижные двери?

+0

Если ответ решает вашу проблему, вы должны принять его, нажав галочку. Вы также можете использовать функциональность upvote для голосования по хорошим/полезным ответам, щелкнув маленькую стрелку, указывающую в этом ответе. – googletorp

ответ

1

Если вы хотите обернуть теги диапазоном, вы можете перезаписать theme_nice_menu_build и добавить свой диапазон к выходу. Если вы хотите, чтобы внутри тега вам нужно было перезаписать menu_item_link.

Вы можете переписать тему funciton, создав вызов функции your_theme_name_function_name, а Drupal будет использовать эту функцию для рендеринга разметки вместо стандартного. Таким образом, вы можете изменить разметку любым способом. Эта функция должна быть в файле template.php вашей темы.

Хороший способ начать - копировать функцию, которую вы хотите переписать, и просто изменить по своему вкусу.

С тех пор, как Drupal 4.7 произошло много, я не надеюсь, что вы это используете. Вставить теги span очень легко:

function your_theme_name_menu_item_link($link) { 
    if (empty($link['localized_options'])) { 
    $link['localized_options'] = array(); 
    } 
    $link['localized_options']['html'] = TRUE; 
    return l('<span>' . $link['title'] . '</span>', $link['href'], $link['localized_options']); 
} 

Я тестировал это, и он работает нормально.

+0

Я могу обернуть тег в промежутке, как вы говорите. Но как вы обертываете текст в теге с помощью span? – Chris

+0

Итак, вопрос в том, как вы переписываете menu_item_link в файле template.php (и получите его на работу). Я пробовал много подходов, которые не производят никаких тегов. – Chris

+0

Этот подход не удалось: http://drupal.org/node/53233 – Chris

 Смежные вопросы

  • Нет связанных вопросов^_^