2017-05-31 76 views
0

試圖在A.tpl獲取輸出,但沒有得到任何輸出。我想我做錯了在tpl文件中調用php函數。使用WHMCS的smarty模板引擎。需要使用PHP函數從外部php文件中.tpl文件

A.tpl

{myModifier} 

B.php

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函數輸出。

在此先感謝。對不起,作爲noob。

回答

0

爲此修改添加到Smarty的,並在您的模板中使用它,你最好使用WHMCS掛鉤。

如果你在'〜/ includes/hooks /'目錄下創建一個新的PHP文件(你可以任意命名 - 在這種情況下,我們使用'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文檔中的Hook Index

在每個鉤子文件的函數名稱必須是唯一的。請注意,如果您只想在特定頁面上運行此鉤子,則可以檢查傳入的$vars陣列中的templatefile密鑰。例如,假設你只想要這個鉤子在訂購單上的「查看購物車」頁面上運行:

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()];結尾,你可以在你的Smarty模板中使用{$currentTime}來輸出它的值。