Ca y est, voici la première version téléchargeable de sfGridSolutionPlugin. Attention, il s'agit d'une version alpha pas encore vraiment débuggée sur IE, des fonctionnalités risquent fortement de changer.

Vous pouvez jeter un oeil sur la démo.

Exemple d'implémentation :

Dans votre contrôleur symfony :

  1. /**
  2.   * getting main data
  3.   * @param sfWebRequest $request A request object
  4.   */
  5. public function executeGetData(sfWebRequest $request)
  6. {
  7. //initialise
  8. $gridAction = new sfGridSolutionQuery($request);
  9. //defining get datas query
  10. $gridAction->setQuery(
  11. Doctrine_Query::create()
  12. ->select('*')
  13. ->from('Exemple e')
  14. );
  15. die($gridAction->execute());
  16. }
  17. /**
  18.   * Showing demo grid
  19.   * @param sfRequest $request A request object
  20.   */
  21. public function executeIndex(sfWebRequest $request)
  22. {
  23. //init grid
  24. $this->grid = new sfGridSolution('grid', 'mygrid', array(
  25. 'showHeader' => true,
  26. 'resizeColumns' => true,
  27. 'selectRow' => true,
  28. 'sortOn' => 'id',
  29. 'sortBy' => 'DESC',
  30. 'getDataUrl' => 'Exemple/getData', // => route to find datas
  31. 'saveDataUrl' => 'Exemple/saveData', // => route to save data
  32. 'getDataMethod' => 'post',
  33. 'page' => 1,
  34. 'perPageOptions' => array(10, 15, 20, 50),
  35. 'perPage' => 20,
  36. 'height' => 300,
  37. 'imagesPath' => 'sfGridSolutionPlugin/images'
  38. ));
  39. //adding id
  40. $this->grid->addGroup(
  41. new sfGridSolutionGroup(
  42. 'label' => ' ',
  43. 'isResizable' => true,
  44. 'cssClass' => 'group',
  45. 'columns' => array(
  46. new sfGridSolutionColumn(
  47. 'label' => 'id',
  48. 'model' => 'id',
  49. 'align' => 'right',
  50. 'filterable' => true,
  51. 'sortable' => true,
  52. 'width' => '90',
  53. 'actions' => array(
  54. new sfGridSolutionAction(
  55. 'title' => 'Show details',
  56. 'method' => 'showDetails', // => will call javascript showDetails() method
  57. 'icon' => 'viewmag.png'
  58. )
  59. )
  60. )
  61. )
  62. )
  63. )
  64. )
  65. )
  66. );
  67. //group1
  68. $this->grid->addGroup(
  69. new sfGridSolutionGroup(
  70. 'label' => 'group1',
  71. 'isResizable' => true,
  72. 'cssClass' => 'group',
  73. 'collapsable' => 'true',
  74.  
  75. 'collapse' => false,
  76. 'columns' => array(
  77. new sfGridSolutionColumn(
  78. 'label' => 'int_field1_1',
  79. 'model' => 'int_field1_1',
  80. 'align' => 'right',
  81. 'filterable' => false,
  82. 'sortable' => true,
  83. 'width' => '90'
  84. )
  85. ),
  86. new sfGridSolutionColumn(
  87. 'label' => 'char_field1_2',
  88. 'model' => 'char_field1_2',
  89. 'align' => 'right',
  90. 'filterable' => true,
  91. 'sortable' => true,
  92. 'editable' => true,
  93. 'width' => '90'
  94. )
  95. ),
  96. new sfGridSolutionColumn(
  97. 'label' => 'date_field1_3',
  98. 'model' => 'date_field1_3',
  99. 'editable' => true,
  100. 'align' => 'left',
  101. 'filterClass' => 'DateFilter',
  102. 'filterable' => true,
  103. 'sortable' => true,
  104. 'width' => '130'
  105. )
  106. )
  107. )
  108. )
  109. )
  110. );

Dans la vue :

  1. <h1>Demo Data Grid</h1>
  2.  
  3. <div id="mygrid" style=""></div>
  4.  
  5. <?php echo $grid->render();?>
  6.  
  7. <script type="text/javascript">
  8. function showDetails(event, action, cell){
  9. cell.row.buildExpandTip('Exemple/getDetails?id=' + cell.row.datas['id'].value);
  10. }
  11. </script>

Un peu plus de doc verra le jour au fur et à mesure du développement.