djuki / jqgrider
从PHP生成jqGrid
1.0.0
2012-09-14 21:10 UTC
Requires
- php: >=5.3.0
This package is auto-updated.
Last update: 2024-08-29 03:29:11 UTC
README
#jqGrider
##简介
jqGrider 是一个PHP库,用于生成jqGrid而无需编写JavaScript代码。我创建jqGrider是为了我应用程序的admin部分。我希望能够不费太多力气将我的数据库表和数据显示在ajax网格中。
jqGrid是目前最完整的全栈javascript网格。目前jqGrider仅支持jqGrid的基本和最需要的功能。
使用jqGrider,您可以
- 展示数据库表中的数据
- 在网格中展示数组数据
- 使用任何运算符搜索网格数据
- 刷新数据网格
- 分页结果
- 为列添加自定义匿名函数
##代码示例
jgGrider的基本使用
展示网格的主操作
public function action_grid()
{
$view = $this->app->forge('View', 'grid');
$grid = new \JqGrider\Grid(\JqGrider\Grid::DATA_TYPE_JSON);
$grid
->addColumn('ID', 'id', 200)
->addColumn('Full Name', 'name', 450)
->setUrl('https:///fuelphp2/public/index.php/welcome/grid_data');
$view->set('grid_js', $grid->getJavaScriptCode(), false);
return $view;
}
带有网格的视图
<?=$grid_js?>
Ajax操作,它将通过Ajax调用返回网格数据
public function action_grid_data()
{
$grid = new \JqGrider\Grid(\JqGrider\Grid::DATA_TYPE_JSON);
$grid
->setRepository(new \App\Model\User())
->addColumn('ID', 'id', 200)
->addColumn('Full Name', 'name', 450);
$grid->printRespositoryData();
}
用户模型需要实现 IGridRepository 并定义两个方法 getData 和 countDataRows。
getData 可以返回包含数据的对象,并且它必须具有列名属性。它还可以返回数组,并且键名也必须命名为列名。
countDataRows 将根据条件计算数据行数。
对象 Conditions 表示搜索查询,它将帮助您生成数据库查询以计算搜索条件中的行数。
namespace App\Model;
use JqGrider\Data\IGridRepository;
use JqGrider\Data\Conditions;
class User implements IGridRepository
{
protected $pdo;
public function __construct()
{
// Connect on database with pdo object for example
}
public function getData(Conditions $dataConditions)
{
$offset = $dataConditions->page == 1 ? 0 : $dataConditions->rowsLimit * ($dataConditions->page - 1);
$sql = 'SELECT id, name FROM user ';
if ($dataConditions->search === 'true')
{
$sql .= ' WHERE '.$dataConditions->searchCondition;
}
$sql .=' ORDER BY '.$dataConditions->sortBy.' '.$dataConditions->sort;
$sql .= ' LIMIT '.$dataConditions->rowsLimit.' OFFSET '.$offset;
$statement = $this->pdo->prepare($sql, array(\PDO::ATTR_CURSOR => \PDO::CURSOR_FWDONLY));
@$statement->bindParam(':grid_search_string',$dataConditions->searchString);
if ($statement->execute())
{
return $statement->fetchAll(\PDO::FETCH_CLASS);
}
}
public function countDataRows(Conditions $dataConditions)
{
$sql = 'SELECT count(id) FROM user';
if ($dataConditions->search === 'true')
{
$sql .= ' WHERE '.$dataConditions->searchCondition;
}
if ($result = $this->pdo->query($sql))
{
return $result->fetchColumn();
}
}
}
###使用匿名函数
可以将匿名函数添加到 Column 对象中,以更改列内容。
$nameFunction = function ($content)
{
return 'Member name is: '.$content;
};
$grid = new Grid(Grid::DATA_TYPE_JSON);
$grid->addColumn('Full Name', 'name', 450, $nameFunction);
###使用本地数据为网格
public function action_grid()
{
$view = $this->app->forge('View', 'grid');
$grid = new Grid(Grid::DATA_TYPE_JSON);
$grid
->addColumn('ID', 'id', 200)
->addColumn('Full Name', 'name', 450);
$grid->setLocalData(array(
array('id' => 4, 'name' => 'William Harrison'),
array('id' => 5, 'name' => 'Erick Hawkins'),
array('id' => 6, 'name' => 'Gene Autry'),
));
$view->set('grid_js', $grid->getJavaScriptCode(), false);
return $view;
}