Темизация page-node.tpl.php

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

Аватар пользователя Finx Finx 4 июля 2016 в 19:55

Доброго времени суток. Прошу помочь пользователей форума, ибо весь день убил на решения данной проблемы.
Вопрос заключается в следующем:
Как изменить id ноды на имя?
Т.е. есть страница sitename.ru/company/contacts/ask которая использует ноду page--node--127.tpl.php как с нее сделать page--node--ask или page--node--company--contacts--ask.tpl.php ?

Перечитал кучу материала по поводу темизации page.tpl.php, находил записи на форумах с подобными вопросами http://www.drupal.ru/node/36403, http://xandeadx.ru/blog/drupal/89, http://drupalace.ru/lesson/bystryi-start-v-temizatsii-drupal. Использовал те функции которые нужно было прописывать в template.tpl.php , переименовывал ноду сотни раз с различными именами page__url__ask, page--url--ask, page--node--ask, page-company-contacts-ask и т.д. , чистил кэш- но результата ни какого

Прошу тыкнуть носом если я что-то упускаю, всю голову сломал данным вопросом.

Комментарии

Аватар пользователя chimir chimir 5 июля 2016 в 2:07

Вы вроде все сами нашли, по идеи должно быть так:

<?php
function THEMENAME_preprocess_page(&$vars) {
  if (isset(
$vars['node']) && ($vars['node']->nid == 127)) {
    
$vars['theme_hook_suggestions'][] = 'page__node__ask';
  }
}
?>

page--node--ask.tpl.php

только не понятно какой в этом смысл

Аватар пользователя Finx Finx 5 июля 2016 в 8:47

Спасибо за ответ.
Да, я находил подобный код, но он применялся ко всем нодам с 1 по 99.
Мне нужно что бы к примеру 101му ноду один шаблон был, к 127му второй, 150му, третий и т.д.
Как я могу это реализовать? или мне нужно будет в template наплодить кучу if-ов где буду менять индентификаторы?

  if (isset($vars['node']) && ($vars['node']->nid == 127)) {
    $vars['theme_hook_suggestions'][] = 'page__node__ask';
  }

Смысл в том, что когда большой проект, на фтп лежит больше 20 нод с различными идентификаторами, и что бы найти нужный, потребуется некоторое время, а так смотришь page--node--ask и понимаешь, к чему относится данный шаблон

Аватар пользователя sergeybelya sergeybelya 5 июля 2016 в 11:07

Создайте у типа контента поле-список для выбора нужного шаблона и для его значений определите несколько разных шаблонов, несколько изменив коды выше. Такой функциональности к сожалению нет в Друпале, иногда она действительно бы не помешала по примеру page templates в WP. Приходится либо создавать разные типы контентов, либо мудрить с селектом.

Аватар пользователя Finx Finx 5 июля 2016 в 12:58

Это не совсем то, что нужно.
Мне больше нравится предыдущий вариант, только там не понятно как реализовать вывод для каждой ноды а не только определенной

Аватар пользователя sergeybelya sergeybelya 5 июля 2016 в 13:13

А что вам нужно? Если нужно создать отдельный темплейт для типа контента page.tpl.php, то это несложно - https://www.drupal.org/node/1089656#comment-4662688
Конкретно для страницы должен подхватиться шаблон page--company--contacts--ask.tpl.php - тут решение - https://cheekymonkeymedia.ca/blog/creating-drupal-7-template-suggestions...

Аватар пользователя sergeybelya sergeybelya 6 июля 2016 в 18:16

Не за что, но это решение честно говоря мне не нравится, вы ставите темизацию страницы в зависимость от ее URL, а это неправильно. Какой-нибудь сеошник заменит урл и все повалится.

Аватар пользователя Orion76 Orion76 6 июля 2016 в 22:39

лайфхак..
В папке с шаблонами создаете пустые файлы, имена которых начинаются так-же как и у шаблонов с nid.
т.е.
шаблон: page--node--127.tpl.php
"копия": page--node--127--ask.tpl.php

При сортировке файлов по имени шаблон и копия всегда быдут рядом.

еще вариант..
Все также как Вам и писали выше (suggestion и т.п.) только вместо суффикса шаблона (ask) подставляете значение специального текстового поля, которое нужно предварительно создать в материале и заполнить нужным значением.
например имя поля-суфикса: field_template_suffix

<?php
if (isset($vars['node']) && !empty($vars['node']->field_template_suffix['und'][0]['value'])) {
    
$vars['theme_hook_suggestions'][] = 'page__node__'.$vars['node']->field_template_suffix['und'][0]['value'];
  }
?>