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 次?如何做同样的事情只需请求一个数据库连接。

4

1 回答 1

0

当 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 回答