php - Zend 框架使用数据表

标签 php mysql zend-framework datatables

我正在尝试使用数据表和 zend 框架实现一个网站,以从 mysql 数据库获取数据。这是我的观点.phtml

<table cellpadding="0" cellspacing="0" border="0" class="display" id="shadow-table" width="100%">
        <thead>
            <tr>
                <th>ID</th>
                <th>Name</th>
                <th>Email</th>

            </tr>
        </thead>

        <tbody bgcolor="#E2E4FF">   

        </tbody>

Controller .php

public function getdataAction() {
            $this->_helper->layout()->disableLayout();
        $shadow = new Admin_Model_Shadow();
        $result = $shadow->listall();
        $this->view->a = $result;
        json_encode($result);
        }

和我的 model.php

class Admin_Model_Shadow extends Zend_Db_Table_Abstract {

    protected $_name = "users";
    protected $_primary = "user_id";

    public function listall() {
        $db = $this->getDefaultAdapter();
        $query = $db->select()
                ->from('users',array('user_id','name','email');
        return $db->fetchAll($query);
    }

}

现在我想通过数据表在 view.phtml 中显示 $result 。我怎样才能实现这一目标?

最佳答案

很抱歉回答简短,如果有时间,我会尝试添加更多详细信息。

这是我几年前在一个项目中使用的 Controller 操作。

您必须在 Controller::init() 中告诉您的 datatableAction 将需要返回 JSON,而不是渲染的 View 脚本。

/**
 * Initialise Controller
 *
 * @return void 
 */
public function init() {
    /* 
     * Set Request/Response Context (HTML,XML,JSON) for Ajax Request
     * Add ?format=json to URL e.g. http://test.com/test?format=json
     */
    $this->_helper  ->contextSwitch()
                     //add context for datatablesAction() Response is JSON
                    ->addActionContext('datatable', 'json')
                    ->initContext();

    parent::init();
}

这是我当前正在使用的操作,如果有时间我会修改它以适合您的变量名称。

/**
 * Get evn records via AJAX call converted to jquery datatable format
 * 
 * @link http://www.datatables.net/
 *
 * @return void
 */
protected function datatableAction() {
    /* @var $request Zend_Controller_Request_Http */
    $request    = $this->getRequest();
    /* @var $cache Zend_Session_Namespace */
    $cache      = new Zend_Session_Namespace("cache");

    $array      = $cache->{$module};
    $selected   = $array["selected"];

    /* @var $cdrFactory Evn_Model_RecordsFactory */
    $cdrFactory = new Evn_Model_RecordsFactory();

    //set request object attributes via magic setter from caches selection array
    $cdrFactory->account     = $selected["account"];
    $cdrFactory->direction   = $selected["direction"];
    $cdrFactory->date_start  = $selected["date_start"];
    $cdrFactory->date_end    = $selected["date_end"];

    //get sEcho from Request Object (default 1)
    $page = $request->getParam("sEcho", 1);
    $page = ($page<1) ? 1 : $page;
    //set view variable (auto json format via contextswitch)
    $this->view->sEcho = $page;

    //calculate limit start
    $from   = ($page>1) ? (($page-1) * $selected["entries"]) : 0;
    //calculate limit end
    $end    = ($from + $selected["entries"])-1;

    //set records limit start
    $cdrFactory->limit_begin = $from;
    //set records limit end
    $cdrFactory->limit_end   = $end;

    //request records
    $records    = $cdrFactory->fetch();
    //get size of retrieved records
    $total      = $cdrFactory->getSize();
    //set view variable (auto json format via contextswitch)
    $this->view->iTotalRecords = $total;
    $this->view->iTotalDisplayRecords = $total-(($end-$from)+1);

    //set view variable (auto json format via contextswitch)
    $this->view->sColumns = "call_start,a_partynumber,b_partynumber,seconds,direction,price_complete,price_minute,price_call";
    //create array in datatables format
    $aaData     = array();
    foreach($records as $record) {
        //get plain array 0-x
        $aaData[] = array_values($record);
    }
    //set view variable (auto json format via contextswitch)
    $this->view->aaData = $aaData;
}

看看https://www.datatables.net/manual/server-side有关您的操作可以或需要返回哪些 json 参数的更多信息。

只需将变量添加为 $this->view->[varname],JSON 上下文开关将自动处理输出和 header 。

玩得开心!

关于php - Zend 框架使用数据表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31377978/

相关文章:

javascript - 获取文本字段中的选择值以及更改时的值

mysql - Zend DB 联盟不工作

mysql - select count(*) 结果错误,缓存还是什么?

php - 如何以这样的格式计算过去的小时数 hh :mm - hh:mm?

php - 使用Xampp,php的 session 超时不起作用

mysql - MySQL 的 COUNT() 函数是估计值吗?

php - 使用php从数据库访问数据并将数据输出到HTML

mysql - 无法解析来自服务器的 JSON 数据。这是由使用 group by 时 Zend 框架中的 JSON 格式错误引起的

php - 分页页面 ID 有问题

php - 从 jQuery AJAX 调用的列表项中获取值和名称