| 5 theme.inc | theme_links($links, $attributes = array('class' => 'links')) |
| 6 theme.inc | theme_links( |
| 7 theme.inc | theme_links($variables) |
| 8 theme.inc | theme_links($variables) |
Returns HTML for a set of links.
Parameters
$links: An associative array of links to be themed. The key for each link is used as its CSS class. Each link should be itself an array, with the following elements:
- title: The link text.
- href: The link URL. If omitted, the 'title' is shown as a plain text item in the links list.
- html: (optional) Whether or not 'title' is HTML. If set, the title will not be passed through check_plain().
- attributes: (optional) Attributes for the anchor, or for the <span> tag used in its place if no 'href' is supplied.
If the 'href' element is supplied, the entire link array is passed to l() as its $options parameter.
$attributes: An associative array of attributes for the UL containing the list of links.
Return value
A string containing an unordered list of links.
Related topics
11 theme calls to theme_links()
File
- includes/
theme.inc, line 1215 - The theme system, which controls the output of Drupal.
Code
function theme_links($links, $attributes = array('class' => 'links')) {
global $language;
$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()))
&& (empty($link['language']) || $link['language']->language == $language->language)) {
$class .= ' active';
}
$output .= '<li' . drupal_attributes(array('class' => $class)) . '>';
if (isset($link['href'])) {
// 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;
}
Login or register to post comments
Comments
Use theme_links to theme primary links
Note, this theme function is the one to override for theming primary links.
Your statement is not entirely true
You use this function to override the the output of anywhere the theme_links function is being used. So not just primary links, could also be secondary links as well. Lullabot has a good video on this http://www.lullabot.com/videos/using-secondary-menus.
Allow HTML in Link Title
In case you need to allow HTML in link titles, simply change this
if (isset($link['href'])) {// Pass in $link as $options, they share the same keys.
$output .= l($link['title'], $link['href'], $link);
}
with this:
if (isset($link['href'])) {$link['html'] = true;
// Pass in $link as $options, they share the same keys.
$output .= l($link['title'], $link['href'], $link);
}
dont hack the core...
please dont suggest other users to hack the core... core hacking will be prevent you from updates. You can create a theme override in your template.php and modify the code at this point.
best regards
Dennis
The right way: allow HTML in Link Title
You
don'tnever need to break the core. Use the option 'html' => TRUE.<?php$links = array();
$links[my_link] = array(
'title' => '<h2>un BIG title<br /> with html</h2>'
'href' => 'page/path',
'html' => TRUE,
);
$links[my_link_separator] = array(
'title' => '<hr />'
'html' => TRUE,
);
$output = theme_links($links,array('id' => 'my_links'));
?>
If you want pass more specific html use theme_item_list
Error
While PHP may let you get away with, this, you are still producing error messages.
$links[my_link]needs apostrophes around that array key ($links['my_link']).Print theme
Can someone explain how to use this piece of function? I would like to print non links in menu, but can't figure out how to make this work. How to trigger this code?
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>';
}
Not
Theme_links is NOT a menu function. I'm not even sure menu.inc uses this theme function.
This kind of question belongs in the forums.