Esempio n. 1
0
 /**
 * @access public
 *
 * @static
 *
 * @description Gerar table dinâmicamente.
 * Conforme os parametros do SQL
 *
 *
 * @param arary $dataProvider Serar carregado os dados recupedados conforme
 * os parametros montado no sql
 *
 * @param array $columns Colunas a ser exibidas na table
 *
 * @param arary $actionColumns Ações para update, delete, view.
 * A url base é carregada conforme a view
 *
 *
 * @example
 * <code>
 *  columns =>[
 *      @string nome,
 *      @array  nivel =>[
 *              @string 'header'=>'Kanda',
 *              @object 'container' => function( @object $model, @int $key){
 *               @model Valores do dataProvaider
 *               @key   Valor do id da dataProvaider_@primary_key
 *              }
 *      ]
 *  ];
 * </code>
 *
 
 *
 * @description Os valores da $dataProvider deve ser no padrão do ActiveRecord
 *
 * @example
 *
 * <code>
 * array_merge(
  ['data'=> Kanda::find_by_sql("SELECT nome FROM kanda ")],
  Kanda::attributeLabels(),['primary_key'=>Kanda::$primary_key, ]
  );
 *
 * </code>
 *
 * @example
 *
 * <code>
 *   echo GridView::widget([
 *      'dataProvider' => $dataProvider,
  'columns' => [
  'nivel' => [
  'header'=>'KandaFramework',
  'container'=> function($model,$key){
  return $key;
  }
  ],
  'nome',
  ],
  'actionColumns'=>['update','delete'],
 *  ]);
 * </code>
 */
 public static function widget($param)
 {
     $tbody = '';
     $thead = Html::tr();
     $table = '';
     foreach ($param['columns'] as $columns) {
         if (is_array($columns)) {
             $thead .= Html::th($columns['header']);
         } else {
             if (isset($param['dataProvider'][$columns])) {
                 $thead .= Html::th($param['dataProvider'][$columns]);
             } else {
                 $thead .= Html::th(ucfirst($columns));
             }
         }
     }
     $thead .= Html::th('Açao');
     $thead .= Html::endtr();
     $i = 0;
     $page = 0;
     /**
      * Paginação
      */
     if (isset($_GET['pg']) && !empty($_GET['pg'])) {
         $page = $_GET['pg'] - 1;
     }
     $dataProvider = $param['dataProvider']['data'];
     if (!$param['dataTable'] && isset($param['dataTable'])) {
         $dataProvider = array_chunk($param['dataProvider']['data'], $param['result']);
         $count = count($dataProvider);
         $dataProvider = $dataProvider[$page];
     }
     /**
      * Montando a table
      */
     foreach ($dataProvider as $column) {
         $primary_key = $column->{$param}['dataProvider']['primary_key'];
         $tbody .= Html::tr(['id' => 'dataProvider_' . $primary_key]);
         foreach ($param['columns'] as $columns) {
             if (is_array($columns)) {
                 $tbody .= Html::td($columns['container']($param['dataProvider']['data'][$i], $primary_key));
             } else {
                 if (isset($column->{$columns})) {
                     $tbody .= Html::td($column->{$columns});
                 } else {
                     $tbody .= Html::td('-');
                 }
             }
         }
         $tbody .= Html::td(self::createActionColumns($param['actionColumns'], $param['dataProvider']['primary_key'], $primary_key));
         $tbody .= Html::endtr();
         ++$i;
     }
     if (!$param['dataTable'] && isset($param['dataTable'])) {
         $li = '';
         for ($j = 1; $j < $count + 1; ++$j) {
             $li .= Html::li(Html::a($j, "?pg={$j}"));
         }
         $classPaginate = isset($param['classPaginate']) ? $param['classPaginate'] : '';
         $tfoot = Html::tr() . Html::td(Bootstrap::pagination($li)) . Html::endtr();
     }
     return Html::table($thead, $tbody, $tfoot, ['class' => "table {$param['classTable']} "]);
 }