尽管很长时间处理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内外检查了论坛,我创建的所有内容都是模块,复杂的问题,......
答案 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?");
}
}
很明显:如果您发现任何不一致之处或改善方法,只需添加一条评论即可。有疑问吗?相同的步骤。