Темизация различных страниц views

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

Аватар пользователя ftomivec ftomivec 29 апреля 2012 в 11:41

Есть сайт с ЧПУ, с многоуровневым видом вложенности:

site.ru/knigi/
site.ru/knigi/fantastika
site.ru/knigi/romany

site.ru/filmy/
site.ru/filmy/boeviki
site.ru/filmy/komediya

site.ru/tovary/
site.ru/tovary/dlya-doma

все страницы открываются при помощи вивс, в вивсе ссылки прописаны на главный термин либо дочерний термин

ВОПРОС: Как переопределить шаблон для каждой из категорий (knigi,filmy,tovary) и для их подкатегорий (knigi/fantastika,filmy/boeviki...)
Нужно именно для категорий и самих нод, для нод я знаю как, можно по питу контента page--node-typa.tpl.html

А как это сделать для вивсов?? Наверняка есть модуль для этой задачи либо другой альтернативное решение...

Комментарии

Аватар пользователя drupby drupby 29 апреля 2012 в 18:04

в template.php

function MYTHEME_preprocess_page(&$variables, $hook) {  
   
   if(arg(0) == knigi) {  
    $variables['theme_hook_suggestions'][] =  'page__knigi';
   } if(arg(0) == filmy) {  
    $variables['theme_hook_suggestions'][] =  'page__filmy';
   }
}

и т.д.

Аватар пользователя ftomivec ftomivec 29 апреля 2012 в 21:22

создал:
page--knigi.tpl.php
page--filmy.tpl.php

выводит ошибку:

    Notice: Use of undefined constant knigi - assumed 'knigi' в функции bartik_preprocess_page() (строка 4 в файле Z:\home\localhost\www\drupal\sites\all\themes\MYTHEME\template.php).
    Notice: Use of undefined constant filmy - assumed 'filmy' в функции bartik_preprocess_page() (строка 6 в файле Z:\home\localhost\www\drupal\sites\all\themes\MYTHEME\template.php).
Аватар пользователя drupby drupby 29 апреля 2012 в 21:45

Z:\home\localhost\www\drupal\sites\all\themes\MYTHEME\template.php
в функции bartik_preprocess_page()
а почему all\themes\MYTHEME?
если у вас bartik ,то замените MYTHEME на bartik.

Аватар пользователя drupby drupby 29 апреля 2012 в 22:03

"ftomivec" wrote:
Неважно какая папка

как это неважно?
вы что то намудрили с названиями .
у меня то все работает.
покажите код своего template.php

Аватар пользователя ftomivec ftomivec 29 апреля 2012 в 22:15
<?php

function bartik_preprocess_page(&$variables$hook) {   
 
   if(
arg(0) == knigi) {  
    
$variables['theme_hook_suggestions'][] =  'page__knigi';
   } if(
arg(0) == filmy) {  
    
$variables['theme_hook_suggestions'][] =  'page__filmy';
   }
}

/**
 * Add body classes if certain regions have content.
 */
function bartik_preprocess_html(&$variables) {
  if (!empty(
$variables['page']['featured'])) {
    
$variables['classes_array'][] = 'featured';
  }

  if (!empty(

$variables['page']['triptych_first'])
    || !empty(
$variables['page']['triptych_middle'])
    || !empty(
$variables['page']['triptych_last'])) {
    
$variables['classes_array'][] = 'triptych';
  }

  if (!empty(

$variables['page']['footer_firstcolumn'])
    || !empty(
$variables['page']['footer_secondcolumn'])
    || !empty(
$variables['page']['footer_thirdcolumn'])
    || !empty(
$variables['page']['footer_fourthcolumn'])) {
    
$variables['classes_array'][] = 'footer-columns';
  }

  

// Add conditional stylesheets for IE
  
drupal_add_css(path_to_theme() . '/css/ie.css', array('group' => CSS_THEME'browsers' => array('IE' => 'lte IE 7''!IE' => FALSE), 'preprocess' => FALSE));
  
drupal_add_css(path_to_theme() . '/css/ie6.css', array('group' => CSS_THEME'browsers' => array('IE' => 'IE 6''!IE' => FALSE), 'preprocess' => FALSE));
}

/**
 * Override or insert variables into the page template for HTML output.
 */
function bartik_process_html(&$variables) {
  
// Hook into color.module.
  
if (module_exists('color')) {
    
_color_html_alter($variables);
  }
}

/**
 * Override or insert variables into the page template.
 */
function bartik_process_page(&$variables) {
  
// Hook into color.module.
  
if (module_exists('color')) {
    
_color_page_alter($variables);
  }
  
// Always print the site name and slogan, but if they are toggled off, we'll
  // just hide them visually.
  
$variables['hide_site_name']   = theme_get_setting('toggle_name') ? FALSE TRUE;
  
$variables['hide_site_slogan'] = theme_get_setting('toggle_slogan') ? FALSE TRUE;
  if (
$variables['hide_site_name']) {
    
// If toggle_name is FALSE, the site_name will be empty, so we rebuild it.
    
$variables['site_name'] = filter_xss_admin(variable_get('site_name''Drupal'));
  }
  if (
$variables['hide_site_slogan']) {
    
// If toggle_site_slogan is FALSE, the site_slogan will be empty, so we rebuild it.
    
$variables['site_slogan'] = filter_xss_admin(variable_get('site_slogan'''));
  }
  
// Since the title and the shortcut link are both block level elements,
  // positioning them next to each other is much simpler with a wrapper div.
  
if (!empty($variables['title_suffix']['add_or_remove_shortcut']) && $variables['title']) {
    
// Add a wrapper div using the title_prefix and title_suffix render elements.
    
$variables['title_prefix']['shortcut_wrapper'] = array(
      
'#markup' => '<div class="shortcut-wrapper clearfix">',
      
'#weight' => 100,
    );
    
$variables['title_suffix']['shortcut_wrapper'] = array(
      
'#markup' => '</div>',
      
'#weight' => -99,
    );
    
// Make sure the shortcut link is the first item in title_suffix.
    
$variables['title_suffix']['add_or_remove_shortcut']['#weight'] = -100;
  }
}

/**
 * Implements hook_preprocess_maintenance_page().
 */
function bartik_preprocess_maintenance_page(&$variables) {
  if (!
$variables['db_is_active']) {
    unset(
$variables['site_name']);
  }
  
drupal_add_css(drupal_get_path('theme''bartik') . '/css/maintenance-page.css');
}

/**
 * Override or insert variables into the maintenance page template.
 */
function bartik_process_maintenance_page(&$variables) {
  
// Always print the site name and slogan, but if they are toggled off, we'll
  // just hide them visually.
  
$variables['hide_site_name']   = theme_get_setting('toggle_name') ? FALSE TRUE;
  
$variables['hide_site_slogan'] = theme_get_setting('toggle_slogan') ? FALSE TRUE;
  if (
$variables['hide_site_name']) {
    
// If toggle_name is FALSE, the site_name will be empty, so we rebuild it.
    
$variables['site_name'] = filter_xss_admin(variable_get('site_name''Drupal'));
  }
  if (
$variables['hide_site_slogan']) {
    
// If toggle_site_slogan is FALSE, the site_slogan will be empty, so we rebuild it.
    
$variables['site_slogan'] = filter_xss_admin(variable_get('site_slogan'''));
  }
}

/**
 * Override or insert variables into the node template.
 */
function bartik_preprocess_node(&$variables) {
  if (
$variables['view_mode'] == 'full' && node_is_page($variables['node'])) {
    
$variables['classes_array'][] = 'node-full';
  }
}

/**
 * Override or insert variables into the block template.
 */
function bartik_preprocess_block(&$variables) {
  
// In the header region visually hide block titles.
  
if ($variables['block']->region == 'header') {
    
$variables['title_attributes_array']['class'][] = 'element-invisible';
  }
}

/**
 * Implements theme_menu_tree().
 */
function bartik_menu_tree($variables) {
  return 
'<ul class="menu clearfix">' $variables['tree'] . '</ul>';
}

/**
 * Implements theme_field__field_type().
 */
function bartik_field__taxonomy_term_reference($variables) {
  
$output '';

  

// Render the label, if it's not hidden.
  
if (!$variables['label_hidden']) {
    
$output .= '<h3 class="field-label">' $variables['label'] . ': </h3>';
  }

  

// Render the items.
  
$output .= ($variables['element']['#label_display'] == 'inline') ? '<ul class="links inline">' '<ul class="links">';
  foreach (
$variables['items'] as $delta => $item) {
    
$output .= '<li class="taxonomy-term-reference-' $delta '"' $variables['item_attributes'][$delta] . '>' drupal_render($item) . '</li>';
  }
  
$output .= '</ul>';

  

// Render the top-level DIV.
  
$output '<div class="' $variables['classes'] . (!in_array('clearfix'$variables['classes_array']) ? ' clearfix' '') . '">' $output '</div>';

  return 

$output;
}
?>
Аватар пользователя drupby drupby 29 апреля 2012 в 22:27

извиняюсь ,

function bartik_preprocess_page(&$variables, $hook) {  
 
   if(arg(0) == 'knigi') {  
    $variables['theme_hook_suggestions'][] =  'page__knigi';
   } if(arg(0) == 'filmy') {  
    $variables['theme_hook_suggestions'][] =  'page__filmy';
   }
}

в кавычки забыл заключить .

Аватар пользователя drupby drupby 29 апреля 2012 в 22:36

если site.ru/knigi/fantastika ,то условие дополняем
if(arg(0) == 'knigi' && arg(1) == 'fantastika') {
$variables['theme_hook_suggestions'][] = 'page__knigifantastika';

Аватар пользователя ftomivec ftomivec 29 апреля 2012 в 22:53

drupby
ошибка, ушла, но шаблон почему то не подставляется

нашел тут описание на английском, посмотрите плз http://robmalon.com/drupal-7-0-preprocess-page-templates-theme_hook_sugg...

полный код:

<?phpfunction mytheme_preprocess_page(&$vars) {
  if (isset($vars['node']->type)) { // We don't want to apply this on taxonomy or view pages
    // Splice (2) is based on existing default suggestions. Change it if you need to.
    array_splice($vars['theme_hook_suggestions'], -1, 0, 'page__'.$vars['node']->type);
    // Get the url_alias and make each item part of an array
    $url_alias = drupal_get_path_alias($_GET['q']);
    $split_url = explode('/', $url_alias);
    // Add the full path template pages
    // Insert 2nd to last to allow page--node--[nid] to be last
    $cumulative_path = '';
    foreach ($split_url as $path) {
      $cumulative_path .= '__' . $path;
      $path_name = 'page' . $cumulative_path;
      array_splice($vars['theme_hook_suggestions'], -1, 0, str_replace('-','_',$path_name));
    }
    // This does just the page name on its own & is considered more specific than the longest path
    // (because sometimes those get too long)
    // Also we don't want to do this if there were no paths on the URL
    // Again, add 2nd to last to preserve page--node--[nid] if we do add it in
    if (count($split_url) > 1) {
      $page_name = end($split_url);
      array_splice($vars['theme_hook_suggestions'], -1, 0, 'page__'.str_replace('-','_',$page_name));
    }
  }
}?>

затем можно прописывать шабы через урлы какя понял:

page–[path-1].tpl.php – These next three are examples of what the custom preprocess_page code does.
page–[path-1]–[path-2].tpl.php – This has all the paths now. You’re not limited to two, but your file names might get crazy if you have a lot of paths, long paths, or both.
page–[path-1]–[path-2]–[node-name].tpl.php – The final and most precise (overrides all prior since its more specific) includes the nodes title.

пробую по всякому:
page-[knigi].tpl.php
page--[knigi].tpl.php
page-knigi.tpl.php
page--knigi.tpl.php

ничего невыходит ((( хелп