Если еще для главного меню


Я пытаюсь сделать оператор if else для главного меню, у меня есть что-то вроде этого, но я не знаю, с чего начать.

<?php if ( !$is_front ) : ?>
function bartik_links__system_main_menu($variables) {
  $output = '';
  foreach ($variables['links'] as $link) {
    $output .= l('<h2>'. check_plain($link['title']) .'</h2>', $link['href'], $link);
  }
  return $output;
}

<?php else: ?>

function bartik_links__system_main_menu($variables) {
  $output = '';
  foreach ($variables['links'] as $link) {
    $output .= l(''. check_plain($link['title']) .'', $link['href'], $link);
  }
  return $output;
}
<?php endif ?>

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

Author: kiamlaluno, 2011-05-24

4 answers

Список переменных, переданных этой функции темы, приведен в документации для ссылки на темы(); $variables["is_front"] не передается в theme_links() или theme_links__system_main_menu().

Здесь есть недоразумение: template.php это файл, содержащий функции, используемые Drupal при использовании темы, содержащей этот файл; он не должен содержать никаких <?php else: ?>.

Код, который вы должны использовать, примерно следующий (он не оптимизирован):

function bartik_links__system_main_menu($variables) {
  $output = '';
  $opening_tag = '';
  $closing_tag = '';

  if (!drupal_is_front_page()) {
    $opening_tag = '<h2>';
    $closing_tag = '</h2>';
  }

  foreach ($variables['links'] as $link) {
    $output .= l($opening_tag . check_plain($link['title']) . $closing_tag, $link['href'], $link);
  }
  return $output;
} 
 2
Author: kiamlaluno, 2011-05-24 21:52:12

Не уверен, где/когда вызывается эта функция, но вот ваш код с некоторыми исправлениями:

function bartik_links__system_main_menu($variables) {
    $output = '';
    $prefix = drupal_is_front_page() ? '' : '<h2>';
    $suffix = drupal_is_front_page() ? '' : '</h2>';

    foreach ($variables['links'] as $link) {
        $output .= l($prefix.check_plain($link['title']).$suffix, $link['href'], $link);
    }
    return $output;
}
 2
Author: nonsenz, 2011-05-25 05:49:08

Вам нужно выполнить проверку if внутри функции темы, где это, вероятно, $variables['is_front'], и если это не сработает, используйте drupal_is_front_page().

Переменная $is_front доступна только внутри файла шаблона, а не template.php .

 1
Author: Berdir, 2011-05-24 21:14:55

С помощью нескольких настроек это правильный способ сделать это.

function bartik_links__system_main_menu($variables) {
    $output = '';
    $opening_tag = '<h2>';
    $closing_tag = '</h2>';

    if (!drupal_is_front_page()) {
      $opening_tag = '';
      $closing_tag = '';
    }

    foreach ($variables['links'] as $link) {
    $output[] = l($link['title'], $link['href']);
    }
    return $opening_tag . implode($closing_tag . $opening_tag, $output) . $closing_tag;
}
 0
Author: Jeremy Love, 2011-05-25 15:04:23