0

私は 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 回要求するということですか? 同じことを行う方法は、1 つのデータベース接続を要求するだけです。

4

1 に答える 1

0

あなたの「ビュー」にはDB接続が含まれていないはずだと彼が言ったとき、私は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}
于 2013-11-14T16:05:03.910 に答える