Скрыть title нод определенного типа с помощью сниппета

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

Аватар пользователя leramulina leramulina 4 сентября 2008 в 10:42

Хотела скрыть при выводе полной ноды названия нод типа movie и filmmaker

Нашла вот такие решения:

http://drupal.org/node/138910
http://setegnom.com/node/83#comment-1533

Но почему-то у меня ничего не получается

Вроде прописываю в template.php

вот такое:

//titles are now ignored by specific node type when they are anomalous in the design  
$vars['breadcrumb_title'] = $vars['title'];
if (arg(0) == 'node' && is_numeric(arg(1))) {
  $node = node_load(arg(1));
  if (in_array($node->type, array('movie', 'filmmaker'))) {
    $vars['title'] = '';
  }
}

или вот такое:

function _phptemplate_variables($hook, $vars = array()) {
  switch ($hook) {
    case 'page':
    //titles are now ignored by specific node type when they are anomalous in the design
    $vars['breadcrumb_title'] = $vars['title'];
    if (arg(0) == 'node' && is_numeric(arg(1))) {
      $node = node_load(arg(1));
      if (in_array($node->type, array('movie', 'filmmaker'))) {
        $vars['title'] = '';
      }
    }
    break;
  }  
 
  return $vars;
}

А все равно заголовки появляются.

Комментарии

Аватар пользователя olk olk 4 сентября 2008 в 10:52

не проще ли node.tpl.php (в вашей теме)
при выводе $title проверить переменные
$page: Flag for the full page state.
$type: Node type, i.e. story, page, blog, etc.
т.е. , что то типа
<?php if(!($page && in_array($type,array('movie', 'filmmaker')))) { print $title;} ?>

Аватар пользователя olk olk 4 сентября 2008 в 11:24

Ну вот например стандартный node.tpl.php из темы Zen

<div class="node <?php print $node_classes; ?>" id="node-<?php print $node->nid; ?>"><div class="node-inner">

  <?php if ($page == 0): ?>
    <h2 class="title">
      <a href="<?php print $node_url; ?>"><?php print $title; ?></a>
    </h2>
  <?php endif; ?>

  <?php if ($unpublished): ?>
    <div class="unpublished"><?php print t('Unpublished'); ?></div>
  <?php endif; ?>

  <?php if ($picture) print $picture; ?>

  <?php if ($submitted): ?>
    <div class="submitted">
      <?php print $submitted; ?>
    </div>
  <?php endif; ?>

  <?php if (count($taxonomy)): ?>
    <div class="taxonomy"><?php print t(' in ') . $terms; ?></div>
  <?php endif; ?>

  <div class="content">
    <?php print $content; ?>
  </div>

  <?php if ($links): ?>
    <div class="links">
      <?php print $links; ?>
    </div>
  <?php endif; ?>

</div></div> <!-- /node-inner, /node -->

так вот заменяете строку <?php if ($page == 0): ?> на <?php if ($page == 0 && !in_array($type,array('movie', 'filmmaker'))): ?>
ну а в своей теме ищите, что то похожее, и не забудьте почистить кэш Друпала после изменений

Аватар пользователя leramulina leramulina 4 сентября 2008 в 11:30

Заменила и в node.tpl.php и в node-movie.tpl.php но заголовок остался Sad

У меня за основу взята тема framework. Там тоже есть <?php if ($page == 0): ?>

Аватар пользователя glu2006 glu2006 4 сентября 2008 в 11:53

Могу предложить решение через node-api, при загрузке нода заданного типа меняйте значение $node->title из текущего на пробел. Если есть свой модуль проекта то пишите в нем функцию:

function имя-модуля_nodeapi(&$node, $op, $form, $page) {
  switch ($op) {
    case 'load':
      if ($node->type == 'movie' && $page == 1) { //про значение $page не помню надо дебажить))
          $node->title = '';
      }
    break;
}
Аватар пользователя olk olk 4 сентября 2008 в 12:04

Нашел и проверил комбинированное решение Smile
вариант 1:
если у вас не определен node-ваш_тип.tpl.php
то в node.tpl.php вставлем перед выводом переменной $title следующий код.
<?php if($page==1 && $type=='ваш_тип'){ drupal_set_title('');} ?>
вариант 2:
если у вас под нужные типы есть tpl то просто в этих тпл-ях перед вывод переменной $title
<?php if($page==1){ drupal_set_title('');} ?>

Аватар пользователя olk olk 4 сентября 2008 в 12:19

Поставте строку выше перед if($page==0),
вы же должны понимать, что если $page==1, то условие if($page==0) никогда не выполниться Smile и соответственно код не отработает


  <?php if($page==1){ drupal_set_title('');} ?>
  <?php if ($page == 0): ?>
  <h2>
  <a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a>
  </h2>
  <?php endif; ?>
Аватар пользователя leramulina leramulina 4 сентября 2008 в 12:26

Ой, я сейчас разрыдаюсь. Я искала это решение две недели. И вот... сбылось.
Дайте мне какой-нибудь Ваш счет яндекс-деньгами или в банке. Я Вам перечислю маленькое вознаграждение.

Аватар пользователя leramulina leramulina 4 сентября 2008 в 12:31

Давайте-давайте. Это же добровольное преждложение. Тем более, что у direqtor-а ... не хватило терпения довести меня до окончательного решения, а у Вас хватило.

Аватар пользователя direqtor direqtor 4 сентября 2008 в 12:47

Честно говоря мне тут несколько некогда экспериментировать с кодом... Отвлекаюсь на пару минут от копипаста, чтоб моск отвлечь... На новый сайт контент заливаю. Много еще. Sad