Title++, или невероятные приключения заголовка

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

Аватар пользователя validoll validoll 28 июля 2007 в 14:20

Вот наваял тут небольшую функцию. Делает она примерно следующее:
если текущая страница не является нодой, то cool_title(0) выводит заголовок страницы, а cool_title(1) остается пустым. Если текущая страница - нода, то в cool_title(0) выводится термин, к которому отнесена нода, а в cool_title(1) выводится заголовок ноды.

function cool_title($op) {
   $sql=db_fetch_array(db_query("SELECT nid FROM {node_revisions } WHERE title='%s'",drupal_get_title()));
   $terms = taxonomy_node_get_terms($sql['nid']);
   foreach ($terms as $term){
       $t=$term->name;
   }
 switch ($op) {
    case 0:
         if (drupal_is_front_page()){
           $result=drupal_get_title();
         }
         else{
                if (!$sql) {
                        $result=drupal_get_title();
                }
                else{
                   if (!$t){
                      $result=drupal_get_title();
                   }
                   else{
                          $result=$t;
                   }
                }
         }
        break;
        case 1:
          if (!drupal_is_front_page() && $t){
                if ($sql['nid']){
                        $node=node_load($sql['nid']);
                        $result=$node->title;
                }
          }
        break
 }
 return $result;
}

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

Комментарии

Аватар пользователя validoll validoll 29 июля 2007 в 10:02

На этом сайте есть реализация этой функции. В Оранжевом блоке под шапкой выводится cool_title(0). А если открыть ноду, то большими буквами будет заголовок cool_title(1).
А все это не "зачем", а для КРАСОТЫ.

Аватар пользователя validoll validoll 29 июля 2007 в 16:27

А если нет ноды? Например менюшка какая-нибудь, или еще что-то, что не имеет массива $node.
А мне нужно было, чтобы Заголовок ноды выводился в другом месте, отличном от места вывода заголовка просой страницы.
Например, на странице "События" отображается список новостей, и мне не нужно, чтобы заголовок этой страницы выводился посередине, как в ноде.
Вот поэтому все так сложно.

Аватар пользователя cwer cwer 29 июля 2007 в 17:48

$node передается в page.tpl.php в 5м друпале)
если $node нет, значит это не нода. Как раз можно определить, что не нода. Чем плохо?)
юзать в этом случае $title

Аватар пользователя validoll validoll 29 июля 2007 в 18:59

Согласен, мысль дельная. Надо будет как-нибудь воспользоваться.
Просто у меня в ноде вместе с заголовком выводится термин, к которому эта нода приписана.
Может можно как-нибудь и проще. Просто мне в голову это пришло.
За совет спасибо. Может еще чего подскажете?

Аватар пользователя cwer cwer 30 июля 2007 в 23:57

В page.tpl.php у меня заголовок выводится так:

<?php
if (isset($title) && $title != "") {
print $title . " - ";
}
if (isset($node->taxonomy)) {
$taxterm = "";
foreach ($node->taxonomy as &$as) {
if ($taxterm) {$taxterm .= ", ";}
$taxterm .= $as->name;
}
if ($taxterm) {print $taxterm . " - ";}
}
print "$site_name";
?>

Если находимся в ноде или блоге есть переменная $title. Печатаю ее и "-"
Если материал отнесен к какой-либо категории, печатаю их через запятую
потом печатаю название сайта
Получается примерно так

Находимся в новости:
Новость - категория1, категория2, категория3 - Название сайта

Находимся в категории:
Категория - Название сайта

Находимся в блоге
Блог - название сайта

На главной
Название сайта

Мне нравится так Smile

Вообще если есть тестовая установка вывести

<?php
print_r($node);
?>

и посмотреть что там есть)

Аватар пользователя validoll validoll 31 июля 2007 в 0:07

Придумано здорово. Только мне не подходит.
$title не пустой, если открыта не нода. Там заголовок текущей страницы.
Я сделал, чтобы на месте заголовка обычной страницы, в открытой ноде отображался термин(ы) к которому это нода приписана.

p.s. Спасибо за еще один способ!