在drupal主题开发中,通常会用到卡片式的布局,一般只显示标题,摘要和其他一些元数据。但大部分情况下,我们很少针对文章主动写摘要,因此就需要自动截取正文的内容作为摘要来使用。下面是几种简单的方法来截取正文摘要
方案1:使用twig过滤器
# 直接处理正文内容生成摘要 #}
{% set body_text = content.body|render|striptags|trim %}
{% set summary = body_text|length > 150 ? body_text|slice(0, 150) ~ '...' : body_text %}
<div class="summary">
{{ summary }}
</div>
方案2:创建预处理函数
1、在themename.theme中创建预处理函数
function themename_preprocess_node(&$variables) {
$node = $variables['node'];
if ($node->hasField('body') && isset($variables['content']['body'])) {
// 使用我们在 hook 中设置的摘要
if (isset($variables['content']['body'][0]['#summary'])) {
$variables['custom_summary'] = $variables['content']['body'][0]['#summary'];
}
// 或者直接在这里生成摘要
elseif (!empty($node->body->value)) {
$text = strip_tags($node->body->value);
$variables['custom_summary'] = mb_substr($text, 0, 150) . (mb_strlen($text) > 150 ? '...' : '');
}
}
}
2、twig模板中通过预处理变量进行调用
{# node.html.twig #}
{% if custom_summary %}
<div class="summary">
{{ custom_summary }}
</div>
{% endif %}