我正在尝试使用数据表和 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/