djuki/jqgrider

从PHP生成jqGrid

1.0.0 2012-09-14 21:10 UTC

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 并定义两个方法 getDatacountDataRows

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