У меня есть переменная Smarty, которая выводит массив, как это:
$article = Array(10)
id => "103"categoryid => "6"title => "¿Cuánto espacio necesito para mi siti..."text => "<img class="img-responsive center img..."
Мне нужно извлечь первый URL-адрес изображения из $ article.text и отобразить его в шаблоне. Потому что я хочу динамически создать тег свойства 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'];
Но я не хочу использовать теги {php} от smarty, поскольку они устарели.
Поэтому я просто создаю плагин 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'];
}
Других решений пока нет …