Smarty插件从文本中获得第一个图像


smarty plugin to get the first image from a text

我有一个smarty变量,它输出一个像这样的数组:

$article = Array(10)
                  id => "103"
                  categoryid => "6"
                  title => "¿Cuánto espacio necesito para mi siti..."
                  text => "<img class="img-responsive center img..."

我需要从$article中提取第一个图像url。文本并显示在模板上。因为我想动态创建facebook og:image属性标签:

<meta property="og:image" content="image.jpg" />

我知道在php上这段代码是有效的:

$texthtml = $article['text'];
preg_match('/<img.+src=[''"](?P<src>.+)[''"].*>/i', $texthtml, $image);
return $image['src'];

但是我不想使用smarty的{php}标签,因为它们已经被弃用了。

所以我用下面的代码构建了一个smarty插件:
* Smarty plugin
* -------------------------------------------------------------
* File:     function.articleimage.php
* Type:     function
* Name:     articleimage
* Purpose:  get the first image from an array
* -------------------------------------------------------------
*/
function smarty_function_articleimage($params)
{
$texthtml = $article['text'];
preg_match('/<img.+src=[''"](?P<src>.+)[''"].*>/i', $texthtml, $image);
return $image['src'];
}

然后像这样插入到模板中:

<meta property="og:image" content="{articleimage}" />

但它不工作:(

什么线索吗?

看起来您需要将您的$article传递给函数。

在Smarty模板函数文档中,它说:

所有从模板传递给模板函数的属性都以关联数组的形式包含在$params中。

根据这个文档,传递变量的语法看起来像这样:

{articleimage article=$article}

然后在函数中,您应该能够像这样从$params中获得它:

function smarty_function_articleimage($params)
{
    $text = $params['article']['text'];
    preg_match('/<img.+src=[''"](?P<src>.+)[''"].*>/i', $text, $image);
    return $image['src'];
}