[Решено] Темизация page.tpl.php в зависимости от URL

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

Аватар пользователя Zen Zen 6 ноября 2009 в 15:01

Этот снипет темизирует page.tpl в зависимости от URL.
Если URL содержит europe то нужно создать page-europe.tpl.php

Для Drupal 6:
<?php
function phptemplate_preprocess_page(&$vars) {
if (module_exists('path')) {
$alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
if ($alias != $_GET['q']) {
$template_filename = 'page';
foreach (explode('/', $alias) as $path_part) {
$template_filename = $template_filename . '-' . $path_part;
$vars['template_files'][] = $template_filename;
}
}
}
}
?>

Комментарии

Аватар пользователя Serg_M Serg_M 6 ноября 2009 в 15:49

"Zen" wrote:
а мне нужно page...

ну пробуйте через page раз очень хочется, может что и получится

А вообще, вначале нужно пользоваться "Поиском" ибо это много-много раз обсуждалось.

Аватар пользователя Zen Zen 6 ноября 2009 в 15:54

"Serg_M" wrote:
А вообще, вначале нужно пользоваться "Поиском" ибо это много-много раз обсуждалось.

поиск ничего не дал, я его сразу заюзал

Аватар пользователя Zen Zen 6 ноября 2009 в 18:34

Может лучше тогда попробывать темизировать page.tpl через термины таксономии? или можно только node.tpl ?

Аватар пользователя Zen Zen 7 ноября 2009 в 14:05

Этот снипет темизирует page.tpl в зависимости от URL.
Если URL содержит europe то нужно создать page-europe.tpl.php

<?php
function phptemplate_preprocess_page(&$vars) {
  if (
module_exists('path')) {
    
$alias drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if (
$alias != $_GET['q']) {
      
$template_filename 'page';
      foreach (
explode('/'$alias) as $path_part) {
        
$template_filename $template_filename '-' $path_part;
        
$vars['template_files'][] = $template_filename;
      }
    }
  }
}
?>

это для drupal 6

Аватар пользователя wolfXXXL wolfXXXL 15 декабря 2009 в 15:56

"Zen" wrote:
Этот снипет темизирует page.tpl в зависимости от URL.

Ух ты! Вот нужно было подгрузить страничку в iframe и очистить там от лишнего. А тут решение прям на ладони! Спасибо!

Аватар пользователя iNFerNo iNFerNo 26 января 2012 в 13:44

"Antonio del Toro" wrote:

Если URL содержит не только europe, а к примеру, europe/portugal то page-europe.tpl.php уже не подключается

решилась проблема?

Аватар пользователя ser_house ser_house 3 августа 2012 в 13:30

Drupal 7

<?php
function THEME_preprocess_page(&$variables) {
  if (module_exists('path')) {
    $alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
    if ($alias != $_GET['q']) {
      foreach (explode('/', $alias) as $path_part) {
        $variables['theme_hook_suggestions'][] = 'page__url__' . $path_part;
      }
    }
  }
}

Для адреса europe/portugal получатся шаблоны вида page--url--europe.tpl.php и page--url--portugal.tpl.php.
По этому адресу сработает page--url--portugal.tpl.php, по адресу europe/gadukino — если шаблон page--url--gadukino.tpl.php не реализован, будет использоваться page--url--europe.tpl.php

Остальные нюансы не проверял.

Аватар пользователя elf39 elf39 11 сентября 2013 в 13:07

У меня нечего не выходит. Я правильно понял этот код нужно вставить в template.php темы? В коде нужно заменить только THEME на свое название темы или еще что то нужно заменить? И работает это для синонимов???
Кеш скидывал, везде где можно.

Пытался вставлять в стандартную тему. То же без результативно.

Аватар пользователя elf39 elf39 11 сентября 2013 в 18:24

Санно туда сюда потыкал все получилось. Но тут вопрос возник если у меня url /velo-blog то чем заменить дефис, с ним не работает.

Аватар пользователя grob.82 grob.82 11 сентября 2013 в 18:35

"elf39" wrote:
Но тут вопрос возник если у меня url /velo-blog то чем заменить дефис, с ним не работает.

на id материала

Аватар пользователя elf39 elf39 11 сентября 2013 в 18:40

"grob.82" wrote:
на id материала

Дефис заменить на id материала??? О_О это как??? ))))
Или Вы имели ввиду сделать шаблон ноде? Но у меня там не нода а термин таксономии. Да и вообще хотелось именно к урлу привязываться а не терминам или нодам.

Аватар пользователя elf39 elf39 11 сентября 2013 в 18:47

И еще заметил если ставишь не существующую страницу типа /velo/3dg83 то выдает стандартный шаблон, хотя /velo отображает с помощью переопределенного. Как быть в этом случае?

Аватар пользователя Sadchenko Sadchenko 25 декабря 2013 в 18:36

"ser_house" wrote:

Drupal 7

<?php
function THEME_preprocess_page(&$variables) {
if (module_exists('path')) {
$alias = drupal_get_path_alias(str_replace('/edit','',$_GET['q']));
if ($alias != $_GET['q']) {
foreach (explode('/', $alias) as $path_part) {
$variables['theme_hook_suggestions'][] = 'page__url__' . $path_part;
}
}
}
}
?>

Для адреса europe/portugal получатся шаблоны вида page--url--europe.tpl.php и page--url--portugal.tpl.php.
По этому адресу сработает page--url--portugal.tpl.php, по адресу europe/gadukino — если шаблон page--url--gadukino.tpl.php не реализован, будет использоваться page--url--europe.tpl.php

Остальные нюансы не проверял.

Попробовал данный код, чтото не работает((
Есть еще варианты, как для Drupal 7 сделать подобную функцию?