<?php 
/** 
 * @author GD Lab <[email protected]> 
 */ 
 
use gdgrid\gd\bundle\Grid as BundleGrid; 
use gdgrid\gd\Grid; 
use gdgrid\gd\GridData; 
use gdgrid\gd\GridDataProvider; 
use gdgrid\gd\GridForm; 
use gdgrid\gd\GridTable; 
use Illuminate\Http\Request; 
 
$provider = new User; 
 
# The "isStoreOutdated" method checks if the current dataProvider`s instance is outdated in the BundleGrid`s cache: 
 
$items = BundleGrid::capture()->isStoreOutdated('someStoreKey') 
 
    ? $provider->filter(Request::capture()->all())->get()->all() : []; 
 
?> 
 
<!DOCTYPE html> 
<html lang="en"> 
<head> 
    <meta charset="UTF-8"> 
    <title>App Grid</title> 
 
    <script src="https://code.jquery.com/jquery-3.3.1.min.js" 
            integrity="sha256-FgpCb/KJQlLNfOu91ta32o/NMZxltwRo8QtmkMRdAu8=" crossorigin="anonymous"></script> 
 
    <!-- Latest compiled and minified CSS --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" 
          integrity="sha384-BVYiiSIFeK1dGmJRAkycuHAHRg32OmUcww7on3RYdg4Va+PmSTsz/K68vbdEjh4u" crossorigin="anonymous"> 
 
    <!-- Optional theme --> 
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap-theme.min.css" 
          integrity="sha384-rHyoN1iRsVXV4nD0JutlnGaslCJuC7uwjduW9SVrLvRYooPp2bWYgmgJQIXwl/Sp" crossorigin="anonymous"> 
 
    <!-- Latest compiled and minified JavaScript --> 
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js" 
            integrity="sha384-Tc5IQib027qvyjSMfHjOMaLkfuWVxZxUPnCJA7l2mCWNIpG9mGCD8wGNIcPD7Txa" 
            crossorigin="anonymous"></script> 
 
</head> 
<body> 
<div class="container"> 
    <h1>The Avengers</h1> 
 
    <?php 
 
    $t = microtime(true); 
 
    $dataProvider = new GridDataProvider($provider); 
 
    $dataProvider->setDataProvider((new GridData) 
        ->setPdo(DB::capsule()->getConnection()->getPdo()) 
        ->setTable('users') 
        ->setLocale('en')); 
 
    $dataProvider->fetchData(); 
 
    $dataProvider->mergeData([ 
        'safeFields'   => [ 
            'id', 
        ], 
        'inputOptions' => [ 
            'gender' => ['Female', 'Male'] 
        ] 
    ]); 
 
    $table = (new GridTable($dataProvider))->loadColumns(); 
 
    if (sizeof($items)) $table->setProviderItems($items); 
 
    # Use of the Bundle Grid simplifies all initializations produced above in a single line: 
    //    $table = BundleGrid::capture() # method "capture" for create/access the BundleGrid`s singleton. 
    //          ->store('someStoreKey') # method "store" (optional) for serialization/access the current GridBundle instance. 
    //          ->setProvider($provider) 
    //          ->fetchData(DB::capsule()->getConnection()->getPdo(), 'users') 
    //          ->mergeData([ 
    //              'inputOptions' => [ 
    //                  'gender' => ['FEMALE', 'MALE'] 
    //              ] 
    //          ])->table(); 
 
    # Serialize changes in the current BundleGrid`s instance 
    # (The methods "store/restore" brings ability for further access the dataProvider`s instance from cache): 
    //    if (BundleGrid::capture()->isStoreOutdated('someStoreKey')) BundleGrid::capture()->restore('someStoreKey', 3600); 
 
    $table->plugin()->setConfig('bulk-actions', ['view' => false, 'set_query' => false]); 
 
    $table->plugin()->hook('filter', function(GridForm $plugin, Grid $grid) 
    { 
        $plugin->loadInputs()->setValues(Request::capture()->all()); 
    }); 
 
    # Can Disable the Embedded Plugins: 
    //    $table->disableEmbedPlugins(); 
 
    # Pagination disabled. To enable it, you must specify quantity of records 
    # in the "totalCount" configuration parameter: 
    //    $table->plugin()->setConfig('pagination', ['totalCount' => ???]); 
 
    $table->disableEmbedPlugin('pagination'); 
 
    # Can Format the values in the data table cells: 
    //    $table->setFormatAll(['truncate' => 5]); 
    //    $table->formatter()->mergeFormats([['strtoupper', []]]); 
    //    $table->setFormat([ 
    //        [['name', 'email'], ['trim', 'strip_tags']], 
    //        ['character', ['strip_html']], 
    //    ]); 
 
    $table->setCell('image', function($data) 
    { 
        return $data->image ? '<img src="' . $data->image . '" />' : null; 
    }); 
 
    echo $table->render(); 
 
    ?> 
 
    <div> 
        <a class="btn btn-success" href="/create">Add Hero</a> 
    </div> 
 
    <br><br> 
 
    <?php 
    echo '<small>Table generation time: <b>' . (microtime(true)-$t) . '</b> sec</small><br>'; 
    echo '<small>Page generation time: <b>' . (microtime(true)-APP_START) . '</b> sec</small>'; 
    ?> 
 
</div> 
</body> 
</html> 
 
 |