Да, вопрос очень частый, но длительные поиски по drupal.ru не дали результата.
Задача: изменить автоматически генерирумый друпалом html-код только для главной страницы (заодно желательно и отдельный .css файл тоже только для главной). Например, чтобы на главной сделать картинку-заставку.
Такие темы встречались время от времени и вопрос решался созданием page--front.tpl.php и добавлением небольшого кода в theme_preprocess_page. Но какого именно кода и есть ли какое-то другое решение?
Заранее спасибо.
Комментарии
В page.tpl.php
<?php if($is_front) : ?>
<?php print 'my content' ?>
<?php endif; ?>
Отлично, работает. Подскажите, так:
<?php if($is_front) : ?>
<?php print 'front content' ?>
<?php else: ?>
<?php print 'notfront content' ?>
<?php endif; ?>
корректно будет (в смысле синтаксиса, формально работает)?
UPD: как переопределить класс
<body>
, чтобы изменить css только для главной?Откройте garland, увидите:
<?php
/**
* Sets the body-tag class attribute.
*
* Adds 'sidebar-left', 'sidebar-right' or 'sidebars' classes as needed.
*/
function phptemplate_body_class($left, $right) {
if ($left != '' && $right != '') {
$class = 'sidebars';
}
else {
if ($left != '') {
$class = 'sidebar-left';
}
if ($right != '') {
$class = 'sidebar-right';
}
}
if (isset(
$class)) {print ' class="'. $class .'"';
}
}?>
Добавьте
<?php
if (drupal_is_front_page()) {
$class = 'front';
}
?>
На всякий случай переспросил, не разбираюсь в php на желаемом уровне)
Использую тему bartik. Тут есть файлик theme.inc:
<?php
function template_preprocess_html(&$variables) {
// Compile a list of classes that are going to be applied to the body element.
// This allows advanced theming based on context (home page, node of certain type, etc.).
// Add a class that tells us whether we're on the front page or not.
$variables['classes_array'][] = $variables['is_front'] ? 'front' : 'not-front';
// Add a class that tells us whether the page is viewed by an authenticated user or not.
$variables['classes_array'][] = $variables['logged_in'] ? 'logged-in' : 'not-logged-in';
<!--и далее-->
?>
Соответственно, на главной
<body>
и так имел класс 'front', но его темизация не меняла ничего Тогда я заменил 'front' на 'frontpage', заменил в .css-ке темизируемый класс и все заработало. Не понял, в чем дело, но за результат спасибоВот же ж-)) Я писал решения для Drupal 6
Внезапно
Ну что ж, тогда наверно стоит добавить Drupal 6.* в список тегов сообщения.