|
The example of advanced search.
Продвинутый поиск по произвольной комбинации условий.
Помимо стандартных операций поиска по колонкам, можно создавать свои особые через параметр search_op.
higrid.net嗨网提供电子表格、在线图形等互联网开发及运营技术,提供相关资料及软件下载,分享奇趣网络时事评论!欢迎访问。
部分内容为俄文,higrid计划翻译一下。敬请期待!
php代码和js代码请点击tab查看。
<?php
class jqOutAdvancedSearch extends jqGrid
{
protected function init()
{
$delivery_types = $this->getDeliveryTypes();
$this->table = 'tbl_order_item';
$this->query = "
SELECT {fields}
FROM tbl_order_item i
JOIN tbl_books b ON (i.book_id=b.id)
JOIN tbl_order o ON (i.order_id=o.id)
JOIN tbl_customer c ON (c.id=o.customer_id)
WHERE {where}
";
#Set columns
$this->cols = array(
'id' => array('label' => 'ID',
'db' => 'i.id',
'width' => 10,
'align' => 'center',
'formatter' => 'integer',
'searchtype' => 'integer',
),
'order_id' => array('label' => 'Order id',
'db' => 'i.order_id',
'width' => 15,
'align' => 'center',
'formatter' => 'integer',
'searchtype' => 'integer',
),
'delivery_type' => array('label' => 'Delivery',
'db' => 'o.delivery_type',
'width' => 20,
'replace' => $delivery_types,
'stype' => 'select',
'searchoptions' => array(
'value' => new jqGrid_Data_Value($delivery_types, 'All'),
'sopt' => array('eq', 'ne'),
),
),
'delivery_cost' => array('label' => 'Deliv. cost',
'db' => 'o.delivery_cost',
'width' => 15,
'align' => 'center',
'searchtype' => 'integer',
),
'customer_name' => array('label' => 'Customer name',
'db' => "CONCAT(c.first_name, ' ', c.last_name)",
'width' => 20,
),
'name' => array('label' => 'Book name',
'db' => 'b.name',
'width' => 30,
'search_op' => 'book',
'searchoptions' => array('sopt' => array('eq')),
),
'price' => array('label' => 'Price',
'db' => 'i.price',
'width' => 15,
'align' => 'center',
'formatter' => 'integer',
'searchtype' => 'integer',
),
);
#Set nav
$this->nav = array(
'search' => true,
'searchtext' => 'Search',
'prmSearch' => array(
'multipleSearch' => true,
'multipleGroup' => true,
'tmplNames' => array('Test template 1', 'Test template 2'),
'tmplFilters' => array(new jqGrid_Data_Raw('template1'), new jqGrid_Data_Raw('template2')),
),
);
}
#Custom search operation
protected function searchOpBook($c, $val)
{
#If numeric input -> search by book id
if(is_numeric($val))
{
return "b.id='$val'";
}
#Non-numeric? Perform common 'LIKE' search by book name
else
{
return parent::searchOpLike($c, $val);
}
}
protected function getDeliveryTypes()
{
$result = $this->DB->query("SELECT * FROM lst_delivery_types");
$rows = array();
while($r = $this->DB->fetch($result))
{
$rows[$r['id']] = $r['name'];
}
return $rows;
}
}
<script>
var template1 = {
'groupOp':'AND',
'rules':[
{'field':'id', 'op':'ge', 'data':500},
{'field':'customer_name', 'op':'bw', 'data':'Joh'},
{'field':'delivery_type', 'op':'eq', 'data':'1'}
]
};
var template2 = {
'groupOp':'AND',
'rules':[
{'field':'price', 'op':'lt', 'data':'1500'}
],
'groups':[
{
'groupOp':'OR',
'rules':[
{'field':'customer_name', 'op':'cn', 'data':'Clyde'},
{'field':'customer_name', 'op':'cn', 'data':'Ernest'}
]
}
]
};
<?= $rendered_grid ?>
</script>
|