2017-05-31 3 views
0

A.tplで出力を取得しようとしましたが、出力が得られません。私はtplファイルでPHP関数を呼び出すために何か間違っていると思う。WHMCS用のスマートテンプレートエンジンの使用。 .tplファイルの外部PHPファイルからphp関数を使用する必要があります。

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関数からの出力を取得することです。

ありがとうございました。昼寝をして申し訳ありません。

答えて

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}を使用してその値を出力することができます。

関連する問題