Как разобрать $links на куски и сохранить в vars для темплейтов? (Zen theme)

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

Аватар пользователя lukevr lukevr 17 марта 2008 в 8:50

Задача в сабже.

Хочу оформить красиво линки - не в одну линию внизу тизера, а с графикой итд...
Для этого надо вычленить отдельно каждый линк из масива $links и сохранить в переменную для темплейта.
В 5 Друпале не работает function phptemplate_links(4.7), но есть хук для модулей http://api.drupal.org/api/function/hook_link_alter/5.
Вообщем, можно обработать уже сформированный массив линков в отдельном модуле. Но как сохранить эти линки из модуля в переменные для контента в template.php, вот в чем вопрос! Подскажите плззз.

Комментарии

Аватар пользователя VladSavitsky VladSavitsky 19 марта 2008 в 0:24

Вот этот код я вырвал из файла template.php темы sky для друпала.
Что он делает? Автор разбирает массив $links и оборачивает каждый элемент в теги, чтобы оформить каждую ссылку как кнопку. Выглядит намного лучше, чем стандартный набор ссылок, но я догадываюсь, что это тоже не предел.
Интересно, что у вас получится... Покажете?

<?php
function phptemplate_links($links, $attributes = array('class' => 'links')) {
$output = '';

if (count($links) > 0) {
$output = '

    ';

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

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

    // Automatically add a class to each link and also to each LI
    if (isset($link['attributes']) && isset($link['attributes']['class'])) {
    $link['attributes']['class'] .= ' ' . $key;
    $class = $key;
    }
    else {
    $link['attributes']['class'] = $key;
    $class = $key;
    }

    // Add first and last classes to the list of links to help out themers.
    $extra_class = '';
    if ($i == 1) {
    $extra_class .= 'first ';
    }
    if ($i == $num_links) {
    $extra_class .= 'last ';
    }
    $output .= '

  • ';

    // Is the title HTML?
    $html = isset($link['html']) && $link['html'];

    // Initialize fragment and query variables.
    $link['query'] = isset($link['query']) ? $link['query'] : NULL;
    $link['fragment'] = isset($link['fragment']) ? $link['fragment'] : NULL;

    if (isset($link['href'])) {
    $output .= l('' . $link['title'] . '', $link['href'], $link['attributes'], $link['query'], $link['fragment'], FALSE, TRUE);
    }
    else if ($link['title']) {
    //Some links are actually not links, but we wrap these in for adding title and class attributes
    if (!$html) {
    $link['title'] = check_plain($link['title']);
    }
    $output .= ''. $link['title'] .'';
    }

    $i++;
    $output .= "

  • \n";
    }

    $output .= '

';
}

return $output;
}
?>

Аватар пользователя lukevr lukevr 20 марта 2008 в 8:22

конечно)
через пару-тройку дней запощу свое решение, сейчас немного отвлекся на другое.

Спасибо всем за советы!

Аватар пользователя goodboy goodboy 9 июля 2008 в 22:01

Подскажите, а как в шаблоне добавить элемент в $links?
$links[] = array( "href" => "www.ya.ru", "title" => "Яндекс" ); не получается - может в двойных кавычках дело...
Или это не массив, а уже строка?

Откуда берется массив $links на входе функции phptemplate_links($links, $attributes = array('class' => 'links')) ?