Как указать вывод своего тайтла в node.tpl.php

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

Аватар пользователя Onza Onza 16 июня 2009 в 11:42

По дефолту тайтл для всех страниц сайта выводится основным шаблоном - page.tpl.php, для чего в нем соответствующий код:
<?php if ($title) { ?><h1 class="title"><?php print $title ?></h1><?php ?>
А в node-тра-ля-ля.tpl.php тайтл не выводится, ибо если там тоже выводить - на странице отобразится два тайтла. Для чего это понадобилось: есть один тип материала, где требуется перед тайтлом всегда выводить одинаковое слово/фразу. Например, что-то типа:
<?php if ($title) { ?><h1 class="title">Информация: <?php print $title ?></h1><?php ?>
Это возможно реализовать каким-то простым способом? Может быть какое-то условие вписать в page.tpl.php, чтобы оно проверяло, указан ли код тайтла в файлах node.tpl.php например?

Комментарии

Аватар пользователя Onza Onza 16 июня 2009 в 12:25

glu2006, большое спасибо, это частично помогло Smile Видимый на странице результат соответствует задаче, однако есть проблема: почему-то теряется мета-тег тайтла. Точнее, не теряется, а вместо названия конкретной ноды в мета (и естественно в html-коде страницы) отоображается тайтл главной страницы сайта (то есть - просто название сайта).

Аватар пользователя glu2006 glu2006 16 июня 2009 в 13:51

Он не теряется Smile вы его сами сбрасываете функцией drupal_set_title(''); поскольку мета тег тайтла берется именно из функции drupal_set_title(); об этом речи в задаче не было поэтому я Вам и предложил быстрый путь как вы просили, для сохранения мета тегов Вам придется писать к примеру в своем модуле или попробовать в template.php след функцию:

<?php
function set_my_alter_title () {
  if (
arg(0) == 'node' && is_numeric(arg(1))) {
    
$node node_load(arg(1));
    if (
$node->type == 'ваш тип материала') return t('Information');
  }
}
?>

в page.tpl.php где выводится title:


<?php if ($title) { ?><h1 class="title"><?php print set_my_alter_title () .': '.$title ?></h1><?php ?>

Я на 100% не уверен но с налету другого решения в голову не пришло, точнее я даже не проверял его работоспособность.

Аватар пользователя Onza Onza 16 июня 2009 в 16:39

glu2006, в общем чего-то не то он мне выводит Smile Если есть время, могли бы Вы сделать рабочий код для корректного вывода (разумеется не бесплатно)?

Аватар пользователя glu2006 glu2006 16 июня 2009 в 16:53

Onza wrote:
glu2006, в общем чего-то не то он мне выводит Smile Если есть время, могли бы Вы сделать рабочий код для корректного вывода (разумеется не бесплатно)?

Контакты в профиле. Smile

Аватар пользователя Onza Onza 17 июня 2009 в 15:59

bodro, скажите пожалуйста, можно ли узнать причину, по которой Вы удалили код, который написали в этом сообщении?

Аватар пользователя jason32 jason32 16 июня 2009 в 20:36

"Onza" wrote:
bodro, скажите пожалуйста, могу ли я узнать причину, по которой Вы удалили код, который написали в этом сообщении?

Видимо не хочет подводить glu2006 ))

Аватар пользователя Onza Onza 17 июня 2009 в 15:58

jason32, конечно, ведь речь идет о серьезных деньгах Smile Другое дело, что решение могло бы пригодиться кому-нибудь еще, так как поиском я находил подобный же вопрос, который остался без ответа.

Аватар пользователя glu2006 glu2006 16 июня 2009 в 21:04

Да дело вовсе не в деньгах Smile (если вы думаете что максимум 5 баков которых стоит Ваш вопрос это для меня деньги) вы же даже и не обратились :), и можете поспрашивать со многих ли кто ко мне в аську или скайп обращается я требую деньги за помощь Smile (речь идет о простой помощи советом а не помочь доработать коммерческий проект в котором работы на 2-3 дня а потом хорошо если спасибо скажут не говоря уж о деньгах), или вы готовы написать пароли доступа на фтп и админский на сайт прямо сюда :), так это только Ваше личное дело.

Телепатически, я просто не вижу что у Вас выводится а что нет :).

Аватар пользователя Onza Onza 16 июня 2009 в 21:30

glu2006, все нормально, не волнуйтесь, я просто немного удивился происходящему, так как человек написал код, а затем удалил его. К Вам я не обратился пока, так как на машине с которой я весь день пишу, аськи нет. Мне в любом случае нужно нормальное/безглючное решение и я к Вам обязательно обращусь, если не успею сегодня, то сделаю это завтра.
ЗЫ: развели тут уже... Smile

Аватар пользователя bodro bodro 16 июня 2009 в 21:35

в page.tpl.php:


<?php if ($title && !(arg(0)=='node' && is_numeric(arg(1)) && !arg(3))) { ?><h1 class="title"><?php print $title ?></h1><?php ?>

дальше во всех node.tpl.php прописываем свой тайтл, должно помочь

Аватар пользователя Onza Onza 16 июня 2009 в 21:47

bodro, В конечно почудили немного, но в любом случае спасибо за помощь Smile Ваше решение лично мне не подойдет, но возможно пригодится кому-нибудь еще (я поиском находил такого типа вопросы). Почему мне не подойдет: я вижу, что в этом случае придется основательно переделывать шаблоны, так как тайтл будет выводиться после того, что рисует page.tpl.php на странице по дефолту - табы, хелпы, мессиджи, и т.п. Либо все это надо также уносить из page.tpl.php во все node.tpl.php, либо еще что-то придумывать с этим.

Аватар пользователя bodro bodro 16 июня 2009 в 22:04

тогда можно добавить:
<?php
if(arg(0)=='node' && is_numeric(arg(1)) && !arg(3)){
$type = db_result(db_query('SELECT type from node where nid=%d',arg(1)));
if ($type == 'нужный тип ноды') $title = 'Информация: '.$title;
}
?>

перед
<?php if($title) { ?><?php print $title ?><?php } ?>

только "нужный тип ноды" заменить на нормальное значение

Аватар пользователя glu2006 glu2006 16 июня 2009 в 22:12

bodro wrote:
тогда можно добавить:
<?php
if(arg(0)=='node' && is_numeric(arg(1)) && !arg(3)){
$type = db_result(db_query('SELECT type from node where nid=%d',arg(1)));
if ($type == 'нужный тип ноды') $title = 'Информация: '.$title;
}
?>

перед
<?php if($title) { ?><?php print $title ?><?php } ?>

только "нужный тип ноды" заменить на нормальное значение

Ну вы еще научите молодежь в шаблонах SELECTы в базу писать :), это не правильный подход с точки зрения кодинга, в шаблоне должен быть шаблон а не селект в базу данных.
Без обид, просто замечание.

Аватар пользователя bodro bodro 16 июня 2009 в 23:37

с точки зрения кодинга: код для людей, как удобнее/понятнее так и правильно

в шаблоне должен быть шаблон - это стратегия которая способствует удобству
но не обязательно фанатично следовать ей, если удобнее и понятнее когда небольшой SELECT находится в шаблоне

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

Без обид Wink

Аватар пользователя glu2006 glu2006 16 июня 2009 в 23:46

bodro wrote:
с точки зрения кодинга: код для людей, как удобнее/понятнее так и правильно

в шаблоне должен быть шаблон - это стратегия которая способствует удобству
но не обязательно фанатично следовать ей, если удобнее и понятнее когда небольшой SELECT находится в шаблоне

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

Без обид ;)

Не соглашусь с Вами хоть и оффтоп :). Стандарты кодирования и оформления кода, как и правила грамотного письма разрабатывались не один год, и если к примеру Вам удобно писать Превед или Зоявление а некоторым еще и удобно такое читать, то это не говорит о том что это правильно. Я не придерживаюсь фанатичного соблюдения стандарта кодирования и иногда могу вызвать расчетную функцию в шаблоне, но это будет никак не запрос в базу данных.

А если бы я по своей работе написал бы в шаблон такой код, то думаю смеялись бы с меня англичане недели две Smile и в лучшем случае сказали бы что мне просто необходимо отдохнуть от работы пару недель (а это мысль...).

Аватар пользователя glu2006 glu2006 17 июня 2009 в 0:23

bodro wrote:
Да, стандарты кодирования и оформления кода разрабатывались не один год
http://www.ozon.ru/context/detail/id/3159814/ - прочтите, тут все толково написано о кодинге

Ну кинусь и Вам в ответ ссылкой :), даже двумя http://pear.php.net/manual/en/standards.php http://drupal.org/coding-standards стандарты кодинга для друпал и не только + соблюдение архитектуры и принципов CMS которую вы же и используете.

Аватар пользователя Onza Onza 17 июня 2009 в 15:58

glu2006, кстати Ваш пример помог определить, что именно надо сделать. Прошу прощения за некоторую тупость, так как мне надо было максимально точно ставить задачу изначально, а я в первом посте написал "требуется перед тайтлом всегда выводить одинаковое слово/фразу", что не совсем верно. Вы сделали именно так, т.е. тайтл отображается в мете без этого дополнения, но думаю - это решаемо. Спасибо за помощь и до связи.

Аватар пользователя glu2006 glu2006 17 июня 2009 в 0:10

повторяюсь Smile в page.tpl.php
<?php if ($title) { ?><h1 class="title"><?php print set_my_alter_title () .$title ?></h1><?php ?>

в template.php вашей темы

<?php
function set_my_alter_title () {
  if (
arg(0) == 'node' && is_numeric(arg(1)) && !arg(2)) {
    
$node node_load(arg(1));
    if (
$node->type == 'page') return t('Information') .': ';
  }
}
Функцию в теги <?php ?> не заворачивать.
?>

в моем случае это применяется к материалам типа 'page'.

Аватар пользователя bodro bodro 17 июня 2009 в 10:44

node_load() = лишние запросы

page.tpl.php трогать не нужно
в template.php

<?php
if(arg(0)=='node' && is_numeric(arg(1)) && !arg(3)){
  
$node db_fetch_object(db_query('SELECT type from node where nid=%d',arg(1)));
  if (
$node->type == 'нужный тип ноды'drupal_set_title('Информация: '.$node->title);
}

в теги <?php ?> не заворачивать.
?>
Аватар пользователя glu2006 glu2006 17 июня 2009 в 11:47

bodro wrote:
node_load() = лишние запросы

Контент кешируется а node_load() берется из static, поэтому в худшем случае это запросы одноразовые Smile в другом другом случае это данные из массива static $nodes;

по сему немного покорректирую на свой лад :), поскольку вы-то откуда возьмете у себя в темплейт пхп значение $node->title ? тогда надо селект переписывать Smile

<?php
$node 
db_fetch_object(db_query("SELECT type, title FROM {node} WHERE nid = %d "arg(1)));
?>

В шаблоне типа материала, чтоб не трогать page.tpl.php


<?php $title t('Information') .': '$node->title?>
<?php drupal_set_title
($title); ?>

должно помочь и никаких запросов вообще не надо.
Все вообще в одну строчку Smile


<?php drupal_set_title(t('Information') .': '$node->title); ?>
Аватар пользователя glu2006 glu2006 17 июня 2009 в 11:54

bodro wrote:
да, в шаблон ноды верное решение
только чтобы никаких запросов вообще нужно еще t() убрать :)

В любом случае в споре из 10 строчек кода родилась одна Smile

Писать в коде кирилицу, это так же некультурно как и неформатированный код. Вы же не на 1С пишите Smile уважайте язык на котором общаетесь. Smile Завтра проект захочет стать мультиязычным и вы начнете отлавливать кирилицу по всем местам где только понапихали ее Smile а если у шаблона слетит кодировка, скажем она станет cp-1251 то мы увидим очередной пост на форуме аяяяяй у меня кракозяблы что делать помогите :).

Аватар пользователя Onza Onza 17 июня 2009 в 16:23

glu2006 и bodro, большое спасибо, даже не ожидал Smile Последняя версия (из двух строчек) делает именно то что нужно!