1

尽管与 Drupal 打交道很长时间,但我对 Drupal7 模板感到很陌生。我正在编写一个 node--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 }

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

所以,简而言之:检查是否创建了预告片的正确方法是什么?

提前感谢,臀部

顺便说一句:我发誓我已经检查过 Stackoveflow.com 内外的论坛,我创建的只是模块、复杂的问题......

4

1 回答 1

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?"); 
      }                         
}

显而易见:如果您发现任何不一致之处或改进方法,只需添加评论即可。怀疑?相同的程序。

于 2019-04-25T12:41:52.800 回答