Работа с шаблонным движком smarty для WHMCS. Необходимо использовать функцию php из внешнего файла php в файле .tpl

Попытка получить вывод в A.tpl, но не получить никакого вывода. Я думаю, что я делаю что-то не так, чтобы вызвать функцию php в файле tpl.

{myModifier}
class Geolocation{
public function sm_loc($params, Smarty_Internal_Template $template)
{
return "100.70";
}
}

$smarty1 = new Smarty();

$smarty1->registerPlugin('modifier', 'myModifier', array('Geolocation', 'sm_loc'));

Я уже использовал этот код. И это не похоже на работу. Это также нарушает мой существующий рабочий код в A.tpl после этого использования.

Здесь мне нужно получить вывод из функции php в A.tpl из внешнего файла php.

Заранее спасибо. Извините за то, что нуб

0

Решение

Чтобы добавить этот модификатор в Smarty и использовать его в своем шаблоне, лучше всего использовать хук WHMCS.

Если вы создадите новый PHP-файл в каталоге ~ / includes / hooks / (вы можете назвать его как угодно — в данном случае, давайте использовать myhook.php), WHMCS автоматически вставит этот хук при каждом запросе.

Для этого вы захотите использовать ClientAreaPage крюк. Внутри вашего крючка, вы можете получить доступ к глобальному $smarty переменная.

Пример:

function MySmartyModifierHook(array $vars) {
global $smarty;

// I recommend putting your Geolocation class in a separate PHP file,
// and using 'include()' here instead.
class Geolocation{
public function sm_loc($params, Smarty_Internal_Template $template) {
return "100.70";
}
}

// Register the Smarty plugin
$smarty->registerPlugin('modifier', 'myModifier', array('Geolocation', 'sm_loc'));
}

// Assign the hook
add_hook('ClientAreaPage', 1, 'MySmartyModifierHook');

Это должно делать свое дело. Если вы хотите исследовать с другими крючками, вы можете взглянуть на Индекс крючка в документации WHMCS.

Имена функций в каждом из ваших файлов ловушек должен быть уникальный.

В качестве примечания: если вы хотите запускать этот хук только на определенных страницах, вы можете проверить templatefile введите пройденное $vars массив. Например, скажем, вы хотели, чтобы этот хук запускался только на странице «Просмотр корзины» в форме заказа:

function MySmartyModifierHook(array $vars) {
global $smarty;

// If the current template is not 'viewcart', then return
if ($vars['templatefile'] != 'viewcart')
return;

// ... your code here ...
}

Также обратите внимание, что при использовании хуков, таких как хук ClientAreaPage, возвращение массива ключей и значений автоматически добавит их в качестве переменных Smarty. Так что если ваша функция ловушки закончилась return ['currentTime' => time()];, вы могли бы затем использовать {$currentTime} в вашем шаблоне Smarty вывести его значение.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]