簡體   English   中英

如何在Smarty的修改器函數中擴展數據庫連接

[英]How to extend db connection in modifier function in smarty

我經常使用smarty修飾符,有時某些功能需要連接到數據庫,但似乎無法擴展父級php連接設置,我需要連接MySQL本身,

的PHP

// connect function
$smarty->assign('datas', $datas');
$smarty->display('template.tpl');

模板

{if $datas}
{foreach $datas as $data}
echo {$data|my_function}
{/foreach}
{/if}

修飾函數

function smarty_modifier_my_function($src) {
    // connect function
    // do something
}

這是否意味着如果我有10個數據,此頁面請求數據庫連接11次? 如何做同樣的事情只要求一個數據庫連接。

我同意Foobar的看法,他說您的“視圖”不應包含數據庫連接,因此我建議您使用另一種解決方案來解決您的問題:

創建一個對象,該對象使用包含按鈕規范的屬性來映射數據。 可以按照以下步驟進行操作:

的PHP

// Define a class that maps your data 
class myClass
{
    public $id;
    public $a; // your data keys here
    public $b; // your data keys here
    public $some_button;

    public function __construct($data)
    {
        $this->id = $data['id'];
        $this->a  = $data['a'];
        $this->b  = $data['b'];

        $this->set_some_button($data['id']);
    }

    protected function set_some_button($id) {

        if ($id == 1) 
            $this->some_button = 'button1';
        elseif ($id == 2) 
            $this->some_button = 'button2';
        else 
            $this->some_button = 'button0';
    }
}

// Create an array of objects that maps your datas 
$objects = array();
foreach ($datas as $data) {
    $objects[] = new myClass($data);
}

// Pass this array to the view
$smarty->assign('objects', $objects);
$smarty->display('template.tpl');

模板

// access your data as follow
{foreach $objects as $obj}
    {$obj->id}
    {$obj->a}
    {$obj->b}
    {$obj->some_button}
{/foreach}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM