2015-07-13 3 views
0

Я пытаюсь реализовать веб-сайт с использованием datatable и zend framework для получения данных из базы данных mysql. Вот мой view.phtmlZend Framework с использованием datatable

<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); 
    } 

} 

Теперь я хочу, чтобы показать $result в view.phtml через DataTable. Как я могу это достичь?

ответ

0

Извините за короткий ответ, я постараюсь добавить несколько подробностей, если у меня найдется время для этого.

Это действие контроллера, которое я использовал в проекте много лет назад.

Вы должны указать в Controller :: init(), что ваш datatableAction должен будет вернуть JSON вместо визуализированного сценария представления.

/** 
* 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 для более INFORS, о ​​которых параметры JSON ваши действия могут или нужно вернуться.

Просто добавьте вары в виде $ this-> view -> [varname], переключатель контекста JSON будет обрабатывать выходные данные и заголовки автоматически.

Удачи!

+0

Благодарим за отзыв! Но я так новичок в этом, вы можете просто дать мне простой пример, похожий на мой код. – user2986673

Смежные вопросы