По дефолту тайтл для всех страниц сайта выводится основным шаблоном - 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 например?
Комментарии
В наблоне ноды, попробуйте так:
<h1 class="title"><?php echo t('Information') .': '. $node->title; ?></h1>
glu2006, большое спасибо, это частично помогло
Видимый на странице результат соответствует задаче, однако есть проблема: почему-то теряется мета-тег тайтла. Точнее, не теряется, а вместо названия конкретной ноды в мета (и естественно в html-коде страницы) отоображается тайтл главной страницы сайта (то есть - просто название сайта).
Он не теряется
вы его сами сбрасываете функцией 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% не уверен но с налету другого решения в голову не пришло, точнее я даже не проверял его работоспособность.
glu2006, в общем чего-то не то он мне выводит
Если есть время, могли бы Вы сделать рабочий код для корректного вывода (разумеется не бесплатно)?
Контакты в профиле.
---
bodro, скажите пожалуйста, можно ли узнать причину, по которой Вы удалили код, который написали в этом сообщении?
Видимо не хочет подводить glu2006 ))
jason32, конечно, ведь речь идет о серьезных деньгах
Другое дело, что решение могло бы пригодиться кому-нибудь еще, так как поиском я находил подобный же вопрос, который остался без ответа.
Да дело вовсе не в деньгах
(если вы думаете что максимум 5 баков которых стоит Ваш вопрос это для меня деньги) вы же даже и не обратились :), и можете поспрашивать со многих ли кто ко мне в аську или скайп обращается я требую деньги за помощь
(речь идет о простой помощи советом а не помочь доработать коммерческий проект в котором работы на 2-3 дня а потом хорошо если спасибо скажут не говоря уж о деньгах), или вы готовы написать пароли доступа на фтп и админский на сайт прямо сюда :), так это только Ваше личное дело.
Телепатически, я просто не вижу что у Вас выводится а что нет :).
glu2006, все нормально, не волнуйтесь, я просто немного удивился происходящему, так как человек написал код, а затем удалил его. К Вам я не обратился пока, так как на машине с которой я весь день пишу, аськи нет. Мне в любом случае нужно нормальное/безглючное решение и я к Вам обязательно обращусь, если не успею сегодня, то сделаю это завтра.
ЗЫ: развели тут уже...
вообще там код был с небольшой очепяткой
ну вы здесь нафлудили )))
в 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 прописываем свой тайтл, должно помочь
bodro, В конечно почудили немного, но в любом случае спасибо за помощь
Ваше решение лично мне не подойдет, но возможно пригодится кому-нибудь еще (я поиском находил такого типа вопросы). Почему мне не подойдет: я вижу, что в этом случае придется основательно переделывать шаблоны, так как тайтл будет выводиться после того, что рисует page.tpl.php на странице по дефолту - табы, хелпы, мессиджи, и т.п. Либо все это надо также уносить из page.tpl.php во все node.tpl.php, либо еще что-то придумывать с этим.
тогда можно добавить:
<?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ы в базу писать :), это не правильный подход с точки зрения кодинга, в шаблоне должен быть шаблон а не селект в базу данных.
Без обид, просто замечание.
с точки зрения кодинга: код для людей, как удобнее/понятнее так и правильно
в шаблоне должен быть шаблон - это стратегия которая способствует удобству
но не обязательно фанатично следовать ей, если удобнее и понятнее когда небольшой SELECT находится в шаблоне
не стоит сковывать себя такими правилами, но знать и понимать их нужно
Без обид
Не соглашусь с Вами хоть и оффтоп :). Стандарты кодирования и оформления кода, как и правила грамотного письма разрабатывались не один год, и если к примеру Вам удобно писать Превед или Зоявление а некоторым еще и удобно такое читать, то это не говорит о том что это правильно. Я не придерживаюсь фанатичного соблюдения стандарта кодирования и иногда могу вызвать расчетную функцию в шаблоне, но это будет никак не запрос в базу данных.
А если бы я по своей работе написал бы в шаблон такой код, то думаю смеялись бы с меня англичане недели две
и в лучшем случае сказали бы что мне просто необходимо отдохнуть от работы пару недель (а это мысль...).
Да, стандарты кодирования и оформления кода разрабатывались не один год
http://www.ozon.ru/context/detail/id/3159814/ - прочтите, тут все толково написано о кодинге
Ну кинусь и Вам в ответ ссылкой :), даже двумя http://pear.php.net/manual/en/standards.php http://drupal.org/coding-standards стандарты кодинга для друпал и не только + соблюдение архитектуры и принципов CMS которую вы же и используете.
bodro
Так не прокатит, надо проверять на тип данных, переменную $node распарывать
Топик стартеру свой код проверил, он рабочий. пример в действии тут http://bigdelo.org/node/1
glu2006, кстати Ваш пример помог определить, что именно надо сделать. Прошу прощения за некоторую тупость, так как мне надо было максимально точно ставить задачу изначально, а я в первом посте написал "требуется перед тайтлом всегда выводить одинаковое слово/фразу", что не совсем верно. Вы сделали именно так, т.е. тайтл отображается в мете без этого дополнения, но думаю - это решаемо. Спасибо за помощь и до связи.
повторяюсь
в 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'.
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 ?> не заворачивать.
?>
Контент кешируется а node_load() берется из static, поэтому в худшем случае это запросы одноразовые
в другом другом случае это данные из массива static $nodes;
по сему немного покорректирую на свой лад :), поскольку вы-то откуда возьмете у себя в темплейт пхп значение $node->title ? тогда надо селект переписывать
<?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); ?>
должно помочь и никаких запросов вообще не надо.
Все вообще в одну строчку
<?php drupal_set_title(t('Information') .': '. $node->title); ?>
да, в шаблон ноды верное решение
только чтобы никаких запросов вообще нужно еще t() убрать
В любом случае в споре из 10 строчек кода родилась одна
Писать в коде кирилицу, это так же некультурно как и неформатированный код. Вы же не на 1С пишите
уважайте язык на котором общаетесь.
Завтра проект захочет стать мультиязычным и вы начнете отлавливать кирилицу по всем местам где только понапихали ее
а если у шаблона слетит кодировка, скажем она станет cp-1251 то мы увидим очередной пост на форуме аяяяяй у меня кракозяблы что делать помогите :).
glu2006 и bodro, большое спасибо, даже не ожидал
Последняя версия (из двух строчек) делает именно то что нужно!