Есть сайт с ЧПУ, с многоуровневым видом вложенности:
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
А как это сделать для вивсов?? Наверняка есть модуль для этой задачи либо другой альтернативное решение...
Комментарии
up
в template.php
if(arg(0) == knigi) {
$variables['theme_hook_suggestions'][] = 'page__knigi';
} if(arg(0) == filmy) {
$variables['theme_hook_suggestions'][] = 'page__filmy';
}
}
и т.д.
создал:
page--knigi.tpl.php
page--filmy.tpl.php
выводит ошибку:
Notice: Use of undefined constant filmy - assumed 'filmy' в функции bartik_preprocess_page() (строка 6 в файле Z:\home\localhost\www\drupal\sites\all\themes\MYTHEME\template.php).
Z:\home\localhost\www\drupal\sites\all\themes\MYTHEME\template.php
в функции bartik_preprocess_page()
а почему all\themes\MYTHEME?
если у вас bartik ,то замените MYTHEME на bartik.
Неважно какая папка, другие хуки отлично работают, а ваш выдаёт ошибку ((
как это неважно?
вы что то намудрили с названиями .
у меня то все работает.
покажите код своего template.php
<?php function bartik_preprocess_page(&$variables, $hook) {
// Add conditional stylesheets for IE
// Render the label, if it's not hidden.
// Render the items.
// Render the top-level DIV.
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';
}
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 = '';
if (!$variables['label_hidden']) {
$output .= '<h3 class="field-label">' . $variables['label'] . ': </h3>';
}
$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>';
$output = '<div class="' . $variables['classes'] . (!in_array('clearfix', $variables['classes_array']) ? ' clearfix' : '') . '">' . $output . '</div>';
return
$output;}?>
извиняюсь ,
if(arg(0) == 'knigi') {
$variables['theme_hook_suggestions'][] = 'page__knigi';
} if(arg(0) == 'filmy') {
$variables['theme_hook_suggestions'][] = 'page__filmy';
}
}
в кавычки забыл заключить .
если site.ru/knigi/fantastika ,то условие дополняем
if(arg(0) == 'knigi' && arg(1) == 'fantastika') {
$variables['theme_hook_suggestions'][] = 'page__knigifantastika';
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
ничего невыходит ((( хелп
кэш почистили?
само собой )
только что проверил - все работает ,ищите ошибки у себя.
page--knigi.tpl.php и page--filmy.tpl.php должны быть задействованы .