Я не знаю, почему здесь происходит сбой $ smarty-> get_template_vars ('datasheet'), но вы можете обойти это, явно передав параметр и читая с помощью $ inParam []:
ваш .tpl файл
{assign var="datasheet" value=$product->reference|escape:'htmlall':'UTF-8'}
... ...
{testsk datasheet=$datasheet}
function.testsk.php
<?php
function smarty_function_testsk($inParam, $inSmarty){
$ch = curl_init ("http://www.domain.com/path/to/".$inParam['datasheet']."/name.html");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$page = curl_exec($ch);
preg_match("/\s<div id=\"divname\">(.*)<\/div>/siU", $page, $matches);
foreach ($matches as &$match) {
$match = $match;
}
echo '<table>';
echo $matches[1];
echo '</table>';
}
?>
[код не проверен]
http://www.smarty.net/docs/en/plugins.functions.tpl
(отредактировано выше для разделения содержимого файла. Ниже приведено новое)
Я предположил, что smarty v3. Должно работать аналогично для v2.x.
В файле smarty .tpl внутри {php} ... {/ php} вы находитесь в глобальной области видимости и используете $ smarty-> get_template_vars ('var_name'); вместо $ this-> get_template_vars ('var_name');.
При втором взгляде на ваш исходный код, $ smarty-> get_template_vars () завершается ошибкой, потому что $ smarty не определен в области действия функции, поэтому вы получаете null (и уведомление о неопределенной переменной). Поместите "глобальный $ smarty;" в качестве первой строки вашего тела функции плагина или, что лучше, измените объявление параметра функции "function smarty_function_testsk ($ param, $ smarty)", которое определяет $ smarty как экземпляр текущего объекта шаблона.