Мне удалось заставить работать jqGrid 3.8 в моем проекте (Zend Framework
) с использованием json. Хотя базовая выборка данных работает, мне не удалось понять, почему я не вижу кнопок, отображаемых на панели навигации.вот что я сделал на стороне клиента:
<script type="text/javascript">
$(function(){
$("#roomgrid").jqGrid({
url:'/admin/admin-room/view',
datatype: "json",
autowidth: true,
colNames:['Room ID','Room Number','Room Type','Image', 'Price','Facilities'],
colModel:[ {name:'id',index:'id', width:55,editable:false,hidden:true,editoptions:{readonly:true,size:10}},
{name:'room_number',index:'room_number', width:55,editable:false,editoptions:{readonly:true,size:10}},
{name:'name',index:'name', width:80,editable:true,editoptions:{size:10}},
{name:'pic_url',index:'pic_url', width:90,editable:true,editoptions:{size:25}},
{name:'price',index:'price', width:60, align:"right",editable:true,editoptions:{size:10}},
{name:'facilities',index:'facilities', width:60, editable:true,editoptions:{size:10}}],
rowNum:5,
rowList:[5,8,10,20,30],
pager: '#paged',
sortname: 'id',
sortorder: "desc",
viewrecords: true,
caption: 'Manage Rooms'});
});
$("#roomgrid").jqGrid('navGrid','#paged', {view: true,del:true});
</script>
<table id="roomgrid"></table>
<div id="paged"></div>
на стороне сервера у меня есть это:
public function preDispatch(){
$this->_helper->viewRenderer->setNoRender();
$this->_helper->layout()->disableLayout();
}
public function viewAction() {
$filters = array(
'page'=>array('HtmlEntities','StringTrim'),
'rows'=>array('HtmlEntities','StringTrim'),
'sidx'=>array('HtmlEntities','StringTrim'),
'sord'=>array('HtmlEntities','StringTrim'));
$validators = array(
'page'=>array('NotEmpty','Int'),
'rows'=>array('NotEmpty','Int'),
'sord'=>array('NotEmpty'));
$input = new Zend_Filter_Input($filters,$validators);
$input->setData($this->getRequest()->getParams());
if($this->getRequest()){
if($input->isValid()){
$this->response->page = $input->page;
$input->rows);
echo $this->getRooms('jqgrid', $input->page, $input->rows);
}
}
}
public function getRooms($switch, $page, $rows){
$q = Doctrine_Query::create()->select("r.id,r.room_number,t.name,r.pic_url, r.price, r.facilities")
->from("Hotel_Model_Room r")
->leftJoin("r.RoomType t");
$pager = new Doctrine_Pager($q,$page, $rows);
$result = $pager->execute(array(), Doctrine_Core::HYDRATE_ARRAY);
$totalpages = $pager->getLastPage();
$totalrecord = Doctrine_Core::getTable("Hotel_Model_Room")->count();
switch ($switch){
case 'array':
return $result;
break;
case 'jqgrid' :
return $this->formatJqgridRoom($result, $page,$totalpages, $totalrecord);
break;
}
}
public function formatJqgridRoom($resultset, $page='1', $totalpages, $count){
$rows= array();
$response->page = $page;
$response->total = $totalpages;
$response->records = $count;
foreach ($resultset as $key => $value){
$response->rows[$key]['id'] = $value['id'] ;
$response->rows[$key]['cell'] = array($value['id'], $value['room_number'],$value['RoomType']['name'], $value['pic_url'], $value['price'],$value['facilities']) ;
}
return json_encode($response);
}
Я использую тему jquery ui redmond, я убедился, что jqGridиспользует его, когда css include закомментирован, сетка больше не синяя. Я также пытался ссылаться на сам css, используя опцию imagepath
, и это не имело никакого значения.есть структура папок css
\css
\redmond
\images
jquery-ui-1.8.5.custom.css
ui.jqgrid.css
layout.css
Другая проблема заключается в том, что я не могу найти, откуда выбираются строчные шрифты. Здесь они слишком большие. Я думаю, что я скачал их прямо с сайта jqueryui, так чтосейчас я немного запутался. Очевидно, что-то я делаю неправильно, и до сих пор я не могу его найти. Так что я немного запутался в этом.
спасибо за прочтение.