Если еще для главного меню
Я пытаюсь сделать оператор 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 ?>
Как вы можете видеть, я хочу, чтобы теги были на первой странице, и если это не так, то я хочу, чтобы теги исчезли.
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;
}
Не уверен, где/когда вызывается эта функция, но вот ваш код с некоторыми исправлениями:
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;
}
Вам нужно выполнить проверку if внутри функции темы, где это, вероятно, $variables['is_front'], и если это не сработает, используйте drupal_is_front_page().
Переменная $is_front доступна только внутри файла шаблона, а не template.php .
С помощью нескольких настроек это правильный способ сделать это.
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;
}