joolist/joolist-zf2-grid

该软件包已被废弃,不再维护。未建议替代软件包。

为ZF2提供的Joolist网格模块

dev-master 2013-12-24 10:18 UTC

This package is not auto-updated.

Last update: 2022-03-05 01:40:39 UTC


README

版本 0.0.1 由Nguyen Tien Minh和Joolist团队创建

简介

Joolist ZF2 Grid提供了一组在多个ZF2模块中使用的常用类。除非您正在安装依赖joolist-zf2-grid的任何网格的模块,否则您可能不需要安装此模块。

要求

  • Zend Framework 2
  • Bootstrap主题

安装

通过克隆项目

只需将此项目克隆到您的 ./vendor/ 目录中,并在您的 ./config/application.config.php 文件中启用它。

使用composer

  1. 在您的 composer.json 中添加此项目

    "require": {
        "joolist/joolist-zf2-grid": "dev-master"
    }
  2. 现在运行以下命令让composer下载joolist-zf2-grid:

    $ php composer.phar update

如何使用

1. 为Zend Framework 2设置全局适配器

遵循:http://framework.zend.com/manual/2.1/en/tutorials/tutorial.dbadapter.html

2. 加载ServiceConfig

在您的模块的Module.php中加载Service Config,如下所示:

 public function getServiceConfig() {
     return array(
         'factories' => array(
             'Application\Model\Table\AlbumTable' =>  function($sm) {
                 $tableGateway = $sm->get('AlbumTableGateway');
                 $table = new AlbumTable($tableGateway);
                 return $table;
             },
             'AlbumTableGateway' => function ($sm) {
                 $dbAdapter = $sm->get('Zend\Db\Adapter\Adapter');
                 $resultSetPrototype = new Album();
                 return new TableGateway('album', $dbAdapter, null, $resultSetPrototype);
             },
         ),
     );
 }

3. 创建一个扩展BaseModel的Model

<?php
	namespace Application\Model;
	
	use JoolistGrid\Model\BaseModel;
	
	class Album extends BaseModel {

}

4. 创建扩展BaseTable的Model Table

<?php
namespace Application\Model\Table;

use Zend\Db\TableGateway\TableGateway;
use JoolistGrid\Model\Table\BaseTable;
use Zend\Db\Sql\TableIdentifier;
use Zend\Db\Sql\Select;

class AlbumTable extends BaseTable {
    protected $_name = 'album';
    
    public function getSelectedGrid() {
        $select = new Select();
        $select->from('album')->join(array('cat' => 'categories'), 'cat.id = album.category_id', 
                                array(
                                    'cat_id' => 'id',
                                    'cat_title' => 'title',
                                ))
                                ->columns(array(
                                    'id' => 'id',
                                    'title'=> 'title',
                                    'artist' => 'artist',
                                ));
       return $select;
    }
}

5. 创建一个如下的Grid

<?php
namespace Application\Grid;

use JoolistGrid\JoolistGrid;
use JoolistGrid\Grid\Collection\CollectionColumn;
use JoolistGrid\Grid\GridColumn;
use JoolistGrid\Grid\Column\Content\ColumnContentTemplate;
use JoolistGrid\Grid\Column\Content\ColumnContentCallBack;

class GridAlbum extends JoolistGrid {
    public function init() {
        $collectionColumn = new CollectionColumn();

        $idColumn = new GridColumn('id');
        $idColumn->setFilter('Combobox');
        $idColumn->addAttribute(array('class' => 'center', 'width' => '4%'));

        $catId = new GridColumn('cat_id');
        $catId->setFilter('Combobox');
        $catId->setLabel('Category Id');

        $cat = new GridColumn('cat_title');
        $cat->setFilter('Combobox');
        $cat->setLabel('Category');

        $titleColumn = new GridColumn('title');
        $titleColumn->setFilter('Text');
        $titleColumn->setLabel('Title');

        $artistColumn = new GridColumn('artist');
        $artistColumn->setFilter('Text');
        $artistColumn->setLabel('Artist');

        $linkDeleteColumn = new GridColumn();
        $linkDeleteColumn->setLabel('Delete');
        $linkDelete = '<a href="/admin/contact/delete/id/${id}" class="must-confirm"><i class="icon-remove"></i></a>';
        $linkDeleteColumn->setContent(new ColumnContentTemplate($linkDelete));
        $linkDeleteColumn->addAttribute(array('class' => 'center', 'width' => '4%'));

        $collectionColumn->addColumns(
                  array(
                        $idColumn,
                        $catId,
                        $cat,
                        $titleColumn,
                        $artistColumn,
                        $linkDeleteColumn
                       ));

        $this->setCollectionColumn($collectionColumn);
    }
}

6. 在您的控制器中

加载模型表、网格,如下所示:

public function indexAction() {
    $sm = $this->getServiceLocator();
    $albumTable = $sm->get('Application\Model\Table\AlbumTable');

    $select = $albumTable->getSelectedGrid();

    $grid = new GridAlbum('boat-grid', $this->getRequest(), $sm);
    $selectGrid = $grid->getGridQuery($select);
    $grid->setCaption('Bateaux');
    $grid->setSource(new ZendDbSelect($this->_dbAdapter, $selectGrid));
    $grid->setEnableCookie();
    $grid->setView(new GridView());
    $grid->deploy();

    return new ViewModel( array('grid' => $grid));
}

7. 在您的视图中

渲染网格:<?php echo $grid->getView()->getHtml(); ?>