管理模板中的完整内容,预告片和修剪内容

时间:2013-07-26 17:07:56

标签: drupal-7 drupal-theming

尽管很长时间处理Drupal,但我觉得Drupal7模板很新。我正在编写一个节点 - product.tpl.php,我需要显示完整版节点主体预告片。如果网站所有者没有专门定义预告片,我想要一个裁剪版本的正文而不是那个预告片。

每个代码都是这样的:

全身

print render($content['body']);

修剪身体

print "substr(render($content['body']), 0, 100);

预告

$body = field_get_items('node', $node, 'body');
$teaser = field_view_value('node', $node, 'body', $body[0],'teaser');
print render($teaser]);

一切都好,直到这里。

现在的问题是猜测是否有任何预告片。第一次在没有预告片的情况下创建节点,$ teaser =“”所以我用

检查它
if (strlen(render($teaser])) > 1) { //there's a teaser -> print teaser }

但是如果有一个预告片并且它已被删除,那么就会显示预告片与全身相同。 : - (

因此,简而言之:检查是否有创建预告片的正确方法是什么?

Thanx提前, 髋

顺便说一句:我发誓我已经在Stackoveflow.com内外检查了论坛,我创建的所有内容都是模块,复杂的问题,......

1 个答案:

答案 0 :(得分:0)

好。

感谢cfox612,经过一番搜索,我发现它可以正常工作。我在这里发布了我的解决方案,以供任何人使用,以防万一您需要它。

//retrieve from DB value of teaser                      
$teaser_db_content = db_query("SELECT body_summary FROM {field_data_body} WHERE entity_id=$node->nid")->fetchField();

//check whether there's a teaser defined (under 3 characters is not considered a valid teaser)                      
if (strlen($teaser_db_content)>3){ //it is defined
     $body = field_get_items('node', $node, 'body');
     $teaser = field_view_value('node', $node, 'body', $body[0],'teaser');
     $post_teaser = render($teaser);
     print $post_teaser; //echo the teaser in HTML
} else { //teaser is not defined
     $post_body = $node->body['und'][0]['value'];
      // check whether there's a body defined
      if (strlen($post_body)>3) { //body defined...
           print substr($post_body, 0, 50)." [...]"; // echo a trimmed version of body
      } else { //no body defined
           print ("No body content defined yet. Wanna help?"); 
      }                         
}

很明显:如果您发现任何不一致之处或改善方法,只需添加一条评论即可。有疑问吗?相同的步骤。