当前位置: 首页>>建站开发>>正文


如何在节点标题之前显示字段?

webfans 建站开发 , , , 去评论

问题描述

我想在D7中显示预告片时在节点标题之前渲染某个字段。

实际上我想从thisthis

我已经研究过更新node.tpl.php,但我注意到它将$title$content分开,所以我不确定如何处理这个问题。经过一番搜索,我发现有人建议使用CCKConTemplate模块在Drupal-6中解决这个问题,但我想知道是否有更多的Drupal-7解决方案。

有什么建议?

最佳解决方案

Drupal 7非常简单。

使用renderhide,您知道可以控制$content中单个元素的放置,而无需像Drupal 6中那样自己打印出所有项目。

简化的节点模板如下所示:

<div>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

稍加修改就可以满足您的需求:

<div>
  <?php print render($content['field_name_of_image']); ?>
  <h2><?php print $title; ?></h2>
  <div class="content">
    <?php print render($content); ?>
  </div>
</div>

使用render,您可以输出一个元素。这比仅仅打印东西更聪明,因为Drupal会跟踪渲染的内容,以避免在这个地方打印两次相同的东西。渲染标题上方的字段时,您还要删除渲染$content时渲染的内容。

次佳解决方案

Display Suite也很酷。

Display Suite allows you to take full control over how your content is displayed using a drag and drop interface. Arrange your nodes, views, comments, user data etc. the way you want without having to work your way through dozens of template files. A predefined list of layouts (D7 only) is available for even more drag and drop fun!

第三种解决方案

看看Title模块 – http://drupal.org/project/title。它可能对您的方案有用。我出于某种原因安装/启用它,可能与你的类似,并且它似乎提供了如何放置标题字段的灵活性。

我已经禁用它(并使用Display Suite),所以我的回忆可能有点粗略。

第四种方案

这是一个hackish解决方案,我相信有人会提出更优雅的东西,但万一你被卡住了,没有人做…

您可以使用page.tpl.php完全删除$title的打印,并添加一个名为Title的新自定义字段,机器名称为$ new_title或类似名称。然后在节点编辑上隐藏原始标题框,并在节点上保存使用计算字段或一些自定义php将$new_title复制到$title

毕竟,编写一些css使$ new_title看起来像以前的页面标题,你应该能够以你喜欢的顺序放置任何字段,只需在管理字段屏幕中拖放即可。因为您通过$new_title复制到$title,浏览器栏中的页面标题仍应有效,并且没有任何内容可以抱怨缺少节点标题。

就像我说的,这是一个黑客 – 但它会起作用。如果您需要更多信息,请告诉我

第五种方案

page.tpl.php(花环)

...
      <div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">
          <?php print $breadcrumb; ?>
          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          /*
           * Print custom block or var
           */
          <?php if ($custom_block): print '<div id="custom-block" class="clear-block">'. $custom_block .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>
          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>
          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>
          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>
          <?php if ($show_messages && $messages): print $messages; endif; ?>
          <?php print $help; ?>
          <div class="clear-block">
            <?php print $content ?>
          </div>
          <?php print $feed_icons ?>
          <div id="footer"><?php print $footer_message . $footer ?></div>
      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->
...

的template.php

/**
 * Override or insert variables into the page template.
 */
function phptemplate_preprocess_page(&$variables) {
  $node = $variables['node'];
  if($node->type == MY_NODE_TYPE) {
    $variables['custom_block'] = 'bla bla bla';
  }
}

第六种方案

这不适用于原始帖子中的Teaser问题,但对于偶然发现并且只想在完整视图中实现的人来说,这里是code-free选项:在块中显示字段(例如,使用视图) )并将该块放在内容块上方但位于同一区域。

第七种方案

我认为你应该在template.php中使用预处理函数

/**
 * Override or insert variables into the page template.
 */
function THEMENAME_process_page(&$variables) {
  // look for $variables['page_title'] if i remember
}

另外

/**
 * Override or insert variables into the node template.
 */
function THEMENAME_preprocess_node(&$variables) {
  //
}

转储变量并做任何你想做的事情。添加/删除/更新。

第八种方案

我通过使用Display Suite及其“Region to Block”附加功能的无代码解决方案解决了这个问题。我最喜欢这个解决方案的灵活性。

基本上,启用“Region to Block”附加部分,在Display Suite中启用”Fulltext Content”显示。 (假设您要在full-node显示中显示标题上方的内容,同样您可以将其用于除Default之外的任何其他视图模式)。现在,在”Fulltext Content”的”Manage display”部分,在屏幕的底部,应出现”Block Regions”选项卡。在那里输入新的块名称,保存并拖放所需的字段到此块。最后,在块屏幕中移动节点标题上方的新创建的块。

您可以在此处看到相同方法的视频:http://www.youtube.com/watch?v=y4wyjxyhbNA,当然您需要将块放在标题上方(而不是左侧边栏)的末尾。

第九种方案

对于zen模板,代码适用于我。

<?php
// this goes in template.php
// check if node type page and then add to $vars array
// declaring $vars['foo'] gives you a $foo variable to use in page.tpl.php

function YOURTHEMENAME_preprocess_page(&$vars, $hook) {
    if (isset($vars['node'])) :
        if($vars['node']->type == 'page'):       
            $node = node_load($vars['node']->nid);
            $output = field_view_field('node', $node, 'field_image', array('label' => 'hidden'));       
            $vars['my_image_field'] = $output;               
        endif;
    endif;
}
?>

最后,您可以在page.tpl.php中轻松打印您的字段;

<?php
if ($my_image_field):
   print render($my_image_field);
endif;
?>

第十种方案

我知道你已经使用了一些主题来构建,现在尝试在标题的顶部添加字段。

我对所有在Drupal 7上构建主题的开发人员的建议是使用:Omega主题+上下文和Delta模块。这为您的布局提供了坚实的基础。

并且灵活地安排区域,块和字段。

参考资料

本文由朵颐IT整理自网络, 文章地址: https://duoyit.com/article/2715.html,转载请务必附带本地址声明。