我有一个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'];
}