1

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

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

我需要从 $article.text 中提取第一个图像 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 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}" />

但它不起作用:(

有什么线索吗?

4

1 回答 1

1

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

Smarty Template Function 文档中,它说:

从模板传递给模板函数的所有属性都包含在 $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'];
}
于 2015-08-11T21:50:57.817 回答