Отдельный вывод для главной страницы

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

Аватар пользователя rampage rampage 7 апреля 2011 в 2:01

Да, вопрос очень частый, но длительные поиски по drupal.ru не дали результата.
Задача: изменить автоматически генерирумый друпалом html-код только для главной страницы (заодно желательно и отдельный .css файл тоже только для главной). Например, чтобы на главной сделать картинку-заставку.
Такие темы встречались время от времени и вопрос решался созданием page--front.tpl.php и добавлением небольшого кода в theme_preprocess_page. Но какого именно кода и есть ли какое-то другое решение?
Заранее спасибо.

Комментарии

Аватар пользователя rampage rampage 7 апреля 2011 в 11:03

Отлично, работает. Подскажите, так:

<?php if($is_front) : ?>
        <?php print 'front content' ?>
    <?php else: ?>
        <?php print 'notfront content' ?>
    <?php endif; ?>

корректно будет (в смысле синтаксиса, формально работает)?

UPD: как переопределить класс <body>, чтобы изменить css только для главной?

Аватар пользователя Stan.Ezersky Stan.Ezersky 7 апреля 2011 в 13:33

"rampage" wrote:
корректно будет
А почему нет?-)
"rampage" wrote:
как переопределить класс , чтобы изменить 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';
}
?>

Аватар пользователя rampage rampage 7 апреля 2011 в 14:15

"Stan.Ezersky" wrote:
А почему нет?-)

На всякий случай переспросил, не разбираюсь в 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', но его темизация не меняла ничего Smile Тогда я заменил 'front' на 'frontpage', заменил в .css-ке темизируемый класс и все заработало. Не понял, в чем дело, но за результат спасибо Smile