Released Version 3.0

Welcome to the new release (version 3.0) of the Grid 4 PHP Framework. There are many updates in this version that we hope you will like. The following are some of the key highlights.

  • Ready-made Application Templates
  • Laravel v12 Integration
  • Improved WordPress v6 Integration
  • UI and Design improvements
  • Free Version with Premium Features
  • Several Optimizations & Updates

Ready-made Applications: We’ve developed several ready-to-use applications using our PHP DataGrid Framework, which includes built-in features such as:

  • Authentication System
  • Role-based authorization
  • User management.

In the code, simplicity is maintained to make it easier to understand and customizable. Making these applications significantly enhanced the core library and added many improvements.

We have released five application templates so far, with more coming soon.

  1. Sales CRM
  2. Inventory Tracking System
  3. Employee Directory
  4. Donation Management
  5. Expense Tracker

Following is the screen of Sales CRM Demo:

Following is the screen of Employee Directory Demo:

Laravel v12 Integration: Grid 4 PHP Framework is tested with Laravel v12. Seamlessly combine the power of responsive PHP DataGrid with Laravel to build your next web application with ease and efficiency.

WordPress6 Integration: We’ve further enhanced the integration of our DataGrid solution with WordPress, now supporting Master-Detail Sub-Grids and file uploads. Read more here.

Bootstrap5 Integration: Grid 4 PHP Framework is ready to use with Bootstrap v5.3. Roll-out your next web-application with combining power of responsive PHP Data Grid and Bootstrap5 UI design.

Free Version with Premium Features:

In this release, we’ve revamped the packaging of our free version! It now includes all premium features, including sample application templates, allowing free users to experience the full power of our product. The only limitation? A restricted number of records per grid.

The free version is available for evaluation and non-commercial use, giving you a complete preview of what our framework can do before upgrading.

Other Updates & Optimizations:

  • Direct URL of add/edit/view dialogs
  • Enhanced URL based filtering scheme
  • Import module now updates data based on existing first column
  • Integrated select2 component for dropdowns if JS library included
  • Audit log data added for insert and update events

Next Actions:

Active License Subscription customers can get free upgrade using this link.

Laravel DataGrid Guide

Looking for a robust DataGrid solution for your Laravel application? Our product offers a comprehensive DataGrid interface with CRUD (Create, Read, Update, Delete) features, providing a seamless way to manage and display data without relying on Eloquent.

Following is the guide to integrate PHP Editable DataGrid with Laravel v12.

Step1: Folder placements in Laravel.

There are 2 main folders in Grid 4 PHP Framework package archive. You need to:

Copy the contents of lib/inc folder —> <Laravel>/app/Classes/Gridphp
Copy the contents of lib/js folder —> <Laravel>/public/assets/gridphp

The ‘app/Classes’ folder does not exist by default in Laravel. You may create it for 3rd party class libraries.
Create another folder inside it with name ‘Gridphp’ and move all contents of ‘lib/inc’ in it. Final result will look like this:

In similar way, copy the files from lib/js to laravel/public/assets/gridphp. Final result should look like following:

Step2: Setting Up Factory Class & Controller:

To use datagrid object in controller, we have setup a factory class in ‘laravel/app/Gridphp.php’. The purpose of this class is to:

  • Set the database configuration.
  • Autoload the library files
  • Provide a get() method to be used in controller.

<?php
namespace App;
// use one of these as dbtype: mysqli,oci8(for oracle),mssqlnative,postgres,sybase
define("PHPGRID_DBTYPE","mysqli");
define("PHPGRID_DBHOST",env("DB_HOST"));
define("PHPGRID_DBUSER",env("DB_USERNAME"));
define("PHPGRID_DBPASS",env("DB_PASSWORD"));
define("PHPGRID_DBNAME",env("DB_DATABASE"));
// Basepath for lib
define("PHPGRID_LIBPATH",dirname(__FILE__).DIRECTORY_SEPARATOR."Classes".DIRECTORY_SEPARATOR."Gridphp".DIRECTORY_SEPARATOR);
class Gridphp
{
static function get()
{
include_once(PHPGRID_LIBPATH."jqgrid_dist.php");
return new \jqgrid();
}
}

Now in controller, we used the namespace of our factory class and called the get() function to get the datagrid object. The rest code is same as in our demos. Finally, we passed the output of render() function to view with a variable name ‘grid’.

For demo purpose, we’ve modified ‘laravel/app/Http/Controllers/WelcomeController.php’

<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use App\Gridphp;
class WelcomeController extends Controller
{
/**
* Show the profile for a given user.
*
* @param int $id
* @return \Illuminate\View\View
*/
public function view()
{
$g = Gridphp::get();
$opt = array();
$opt["caption"] = "Customers";
$opt["height"] = "400";
$opt["hidefirst"] = true;
$g->set_options($opt);
$g->table = "customers";
$out = $g->render("list1");
return view('welcome', [
'grid' => $out
]);
}
}

Step3: Setting View code:

  1. In view code, we included the JS/CSS files from the ‘js’ folder which we copied in Step 1.1
  2. And using blade template variable output, we pushed the grid output in our desired place in html.
  3. We have html meta tag for ‘csrf-token’, which is required by laravel for POST operations. Also added JavaScript code to pass CSRF-TOKEN in ajax request calls, as mentioned in Laravel docs.

For demo purpose, we slightly modified ‘laravel/resources/views/welcome.blade.php’

<!DOCTYPE html>
<html lang="{{ str_replace('_', '-', app()->getLocale()) }}">
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1">
<!-- CSRF Token for POST calls -->
<meta name="csrf-token" content="{{ csrf_token() }}">
<title>Laravel</title>
<!-- Fonts -->
<link rel="preconnect" href="https://fonts.bunny.net">
<link href="https://fonts.bunny.net/css?family=figtree:400,600&display=swap" rel="stylesheet" />
<!-- Styles -->
<style>
/* ! tailwindcss v3.4.1 | MIT License | https://tailwindcss.com */*,::after,::before{box-sizing:border-box;border-width:0;border-style:solid;border-color:#e5e7eb}::after,::before{--tw-content:''}:host,html{line-height:1.5;-webkit-text-size-adjust:100%;-moz-tab-size:4;tab-size:4;font-family:Figtree, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji;font-feature-settings:normal;font-variation-settings:normal;-webkit-tap-highlight-color:transparent}body{margin:0;line-height:inherit}hr{height:0;color:inherit;border-top-width:1px}abbr:where([title]){-webkit-text-decoration:underline dotted;text-decoration:underline dotted}h1,h2,h3,h4,h5,h6{font-size:inherit;font-weight:inherit}a{color:inherit;text-decoration:inherit}b,strong{font-weight:bolder}code,kbd,pre,samp{font-family:ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace;font-feature-settings:normal;font-variation-settings:normal;font-size:1em}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}table{text-indent:0;border-color:inherit;border-collapse:collapse}button,input,optgroup,select,textarea{font-family:inherit;font-feature-settings:inherit;font-variation-settings:inherit;font-size:100%;font-weight:inherit;line-height:inherit;color:inherit;margin:0;padding:0}button,select{text-transform:none}[type=button],[type=reset],[type=submit],button{-webkit-appearance:button;background-color:transparent;background-image:none}:-moz-focusring{outline:auto}:-moz-ui-invalid{box-shadow:none}progress{vertical-align:baseline}::-webkit-inner-spin-button,::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}::-webkit-search-decoration{-webkit-appearance:none}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}summary{display:list-item}blockquote,dd,dl,figure,h1,h2,h3,h4,h5,h6,hr,p,pre{margin:0}fieldset{margin:0;padding:0}legend{padding:0}menu,ol,ul{list-style:none;margin:0;padding:0}dialog{padding:0}textarea{resize:vertical}input::placeholder,textarea::placeholder{opacity:1;color:#9ca3af}[role=button],button{cursor:pointer}:disabled{cursor:default}audio,canvas,embed,iframe,img,object,svg,video{display:block;vertical-align:middle}img,video{max-width:100%;height:auto}[hidden]{display:none}*, ::before, ::after{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }::backdrop{--tw-border-spacing-x:0;--tw-border-spacing-y:0;--tw-translate-x:0;--tw-translate-y:0;--tw-rotate:0;--tw-skew-x:0;--tw-skew-y:0;--tw-scale-x:1;--tw-scale-y:1;--tw-pan-x: ;--tw-pan-y: ;--tw-pinch-zoom: ;--tw-scroll-snap-strictness:proximity;--tw-gradient-from-position: ;--tw-gradient-via-position: ;--tw-gradient-to-position: ;--tw-ordinal: ;--tw-slashed-zero: ;--tw-numeric-figure: ;--tw-numeric-spacing: ;--tw-numeric-fraction: ;--tw-ring-inset: ;--tw-ring-offset-width:0px;--tw-ring-offset-color:#fff;--tw-ring-color:rgb(59 130 246 / 0.5);--tw-ring-offset-shadow:0 0 #0000;--tw-ring-shadow:0 0 #0000;--tw-shadow:0 0 #0000;--tw-shadow-colored:0 0 #0000;--tw-blur: ;--tw-brightness: ;--tw-contrast: ;--tw-grayscale: ;--tw-hue-rotate: ;--tw-invert: ;--tw-saturate: ;--tw-sepia: ;--tw-drop-shadow: ;--tw-backdrop-blur: ;--tw-backdrop-brightness: ;--tw-backdrop-contrast: ;--tw-backdrop-grayscale: ;--tw-backdrop-hue-rotate: ;--tw-backdrop-invert: ;--tw-backdrop-opacity: ;--tw-backdrop-saturate: ;--tw-backdrop-sepia: }.absolute{position:absolute}.relative{position:relative}.-left-20{left:-5rem}.top-0{top:0px}.-bottom-16{bottom:-4rem}.-left-16{left:-4rem}.-mx-3{margin-left:-0.75rem;margin-right:-0.75rem}.mt-4{margin-top:1rem}.mt-6{margin-top:1.5rem}.flex{display:flex}.grid{display:grid}.hidden{display:none}.aspect-video{aspect-ratio:16 / 9}.size-12{width:3rem;height:3rem}.size-5{width:1.25rem;height:1.25rem}.size-6{width:1.5rem;height:1.5rem}.h-12{height:3rem}.h-40{height:10rem}.h-full{height:100%}.min-h-screen{min-height:100vh}.w-full{width:100%}.w-\[calc\(100\%\+8rem\)\]{width:calc(100% + 8rem)}.w-auto{width:auto}.max-w-\[877px\]{max-width:877px}.max-w-2xl{max-width:42rem}.flex-1{flex:1 1 0%}.shrink-0{flex-shrink:0}.grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.flex-col{flex-direction:column}.items-start{align-items:flex-start}.items-center{align-items:center}.items-stretch{align-items:stretch}.justify-end{justify-content:flex-end}.justify-center{justify-content:center}.gap-2{gap:0.5rem}.gap-4{gap:1rem}.gap-6{gap:1.5rem}.self-center{align-self:center}.overflow-hidden{overflow:hidden}.rounded-\[10px\]{border-radius:10px}.rounded-full{border-radius:9999px}.rounded-lg{border-radius:0.5rem}.rounded-md{border-radius:0.375rem}.rounded-sm{border-radius:0.125rem}.bg-\[\#FF2D20\]\/10{background-color:rgb(255 45 32 / 0.1)}.bg-white{--tw-bg-opacity:1;background-color:rgb(255 255 255 / var(--tw-bg-opacity))}.bg-gradient-to-b{background-image:linear-gradient(to bottom, var(--tw-gradient-stops))}.from-transparent{--tw-gradient-from:transparent var(--tw-gradient-from-position);--tw-gradient-to:rgb(0 0 0 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), var(--tw-gradient-to)}.via-white{--tw-gradient-to:rgb(255 255 255 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), #fff var(--tw-gradient-via-position), var(--tw-gradient-to)}.to-white{--tw-gradient-to:#fff var(--tw-gradient-to-position)}.stroke-\[\#FF2D20\]{stroke:#FF2D20}.object-cover{object-fit:cover}.object-top{object-position:top}.p-6{padding:1.5rem}.px-6{padding-left:1.5rem;padding-right:1.5rem}.py-10{padding-top:2.5rem;padding-bottom:2.5rem}.px-3{padding-left:0.75rem;padding-right:0.75rem}.py-16{padding-top:4rem;padding-bottom:4rem}.py-2{padding-top:0.5rem;padding-bottom:0.5rem}.pt-3{padding-top:0.75rem}.text-center{text-align:center}.font-sans{font-family:Figtree, ui-sans-serif, system-ui, sans-serif, Apple Color Emoji, Segoe UI Emoji, Segoe UI Symbol, Noto Color Emoji}.text-sm{font-size:0.875rem;line-height:1.25rem}.text-sm\/relaxed{font-size:0.875rem;line-height:1.625}.text-xl{font-size:1.25rem;line-height:1.75rem}.font-semibold{font-weight:600}.text-black{--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.underline{-webkit-text-decoration-line:underline;text-decoration-line:underline}.antialiased{-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.shadow-\[0px_14px_34px_0px_rgba\(0\2c 0\2c 0\2c 0\.08\)\]{--tw-shadow:0px 14px 34px 0px rgba(0,0,0,0.08);--tw-shadow-colored:0px 14px 34px 0px var(--tw-shadow-color);box-shadow:var(--tw-ring-offset-shadow, 0 0 #0000), var(--tw-ring-shadow, 0 0 #0000), var(--tw-shadow)}.ring-1{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.ring-transparent{--tw-ring-color:transparent}.ring-white\/\[0\.05\]{--tw-ring-color:rgb(255 255 255 / 0.05)}.drop-shadow-\[0px_4px_34px_rgba\(0\2c 0\2c 0\2c 0\.06\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px rgba(0,0,0,0.06));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.drop-shadow-\[0px_4px_34px_rgba\(0\2c 0\2c 0\2c 0\.25\)\]{--tw-drop-shadow:drop-shadow(0px 4px 34px rgba(0,0,0,0.25));filter:var(--tw-blur) var(--tw-brightness) var(--tw-contrast) var(--tw-grayscale) var(--tw-hue-rotate) var(--tw-invert) var(--tw-saturate) var(--tw-sepia) var(--tw-drop-shadow)}.transition{transition-property:color, background-color, border-color, fill, stroke, opacity, box-shadow, transform, filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter;transition-property:color, background-color, border-color, text-decoration-color, fill, stroke, opacity, box-shadow, transform, filter, backdrop-filter, -webkit-text-decoration-color, -webkit-backdrop-filter;transition-timing-function:cubic-bezier(0.4, 0, 0.2, 1);transition-duration:150ms}.duration-300{transition-duration:300ms}.selection\:bg-\[\#FF2D20\] *::selection{--tw-bg-opacity:1;background-color:rgb(255 45 32 / var(--tw-bg-opacity))}.selection\:text-white *::selection{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.selection\:bg-\[\#FF2D20\]::selection{--tw-bg-opacity:1;background-color:rgb(255 45 32 / var(--tw-bg-opacity))}.selection\:text-white::selection{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.hover\:text-black:hover{--tw-text-opacity:1;color:rgb(0 0 0 / var(--tw-text-opacity))}.hover\:text-black\/70:hover{color:rgb(0 0 0 / 0.7)}.hover\:ring-black\/20:hover{--tw-ring-color:rgb(0 0 0 / 0.2)}.focus\:outline-none:focus{outline:2px solid transparent;outline-offset:2px}.focus-visible\:ring-1:focus-visible{--tw-ring-offset-shadow:var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color);--tw-ring-shadow:var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color);box-shadow:var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow, 0 0 #0000)}.focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 45 32 / var(--tw-ring-opacity))}@media (min-width: 640px){.sm\:size-16{width:4rem;height:4rem}.sm\:size-6{width:1.5rem;height:1.5rem}.sm\:pt-5{padding-top:1.25rem}}@media (min-width: 768px){.md\:row-span-3{grid-row:span 3 / span 3}}@media (min-width: 1024px){.lg\:col-start-2{grid-column-start:2}.lg\:h-16{height:4rem}.lg\:max-w-7xl{max-width:80rem}.lg\:grid-cols-3{grid-template-columns:repeat(3, minmax(0, 1fr))}.lg\:grid-cols-2{grid-template-columns:repeat(2, minmax(0, 1fr))}.lg\:flex-col{flex-direction:column}.lg\:items-end{align-items:flex-end}.lg\:justify-center{justify-content:center}.lg\:gap-8{gap:2rem}.lg\:p-10{padding:2.5rem}.lg\:pb-10{padding-bottom:2.5rem}.lg\:pt-0{padding-top:0px}.lg\:text-\[\#FF2D20\]{--tw-text-opacity:1;color:rgb(255 45 32 / var(--tw-text-opacity))}}@media (prefers-color-scheme: dark){.dark\:block{display:block}.dark\:hidden{display:none}.dark\:bg-black{--tw-bg-opacity:1;background-color:rgb(0 0 0 / var(--tw-bg-opacity))}.dark\:bg-zinc-900{--tw-bg-opacity:1;background-color:rgb(24 24 27 / var(--tw-bg-opacity))}.dark\:via-zinc-900{--tw-gradient-to:rgb(24 24 27 / 0) var(--tw-gradient-to-position);--tw-gradient-stops:var(--tw-gradient-from), #18181b var(--tw-gradient-via-position), var(--tw-gradient-to)}.dark\:to-zinc-900{--tw-gradient-to:#18181b var(--tw-gradient-to-position)}.dark\:text-white\/50{color:rgb(255 255 255 / 0.5)}.dark\:text-white{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:text-white\/70{color:rgb(255 255 255 / 0.7)}.dark\:ring-zinc-800{--tw-ring-opacity:1;--tw-ring-color:rgb(39 39 42 / var(--tw-ring-opacity))}.dark\:hover\:text-white:hover{--tw-text-opacity:1;color:rgb(255 255 255 / var(--tw-text-opacity))}.dark\:hover\:text-white\/70:hover{color:rgb(255 255 255 / 0.7)}.dark\:hover\:text-white\/80:hover{color:rgb(255 255 255 / 0.8)}.dark\:hover\:ring-zinc-700:hover{--tw-ring-opacity:1;--tw-ring-color:rgb(63 63 70 / var(--tw-ring-opacity))}.dark\:focus-visible\:ring-\[\#FF2D20\]:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 45 32 / var(--tw-ring-opacity))}.dark\:focus-visible\:ring-white:focus-visible{--tw-ring-opacity:1;--tw-ring-color:rgb(255 255 255 / var(--tw-ring-opacity))}}
</style>
</head>
<body class="font-sans antialiased dark:bg-black dark:text-white/50">
<div className="bg-gray-50 text-black/50 dark:bg-black dark:text-white/50">
<img id="background" class="absolute -left-20 top-0 max-w-[877px]" src="https://laravel.com/assets/img/welcome/background.svg" />
<div class="relative min-h-screen flex flex-col items-center justify-center selection:bg-[#FF2D20] selection:text-white">
<div class="relative w-full max-w-2xl px-6 lg:max-w-7xl">
<header class="grid grid-cols-2 items-center gap-2 py-10 lg:grid-cols-3">
<div class="flex lg:justify-center lg:col-start-2">
<svg class="h-12 w-auto text-white lg:h-16 lg:text-[#FF2D20]" viewBox="0 0 62 65" fill="none" xmlns="http://www.w3.org/2000/svg"><path d="M61.8548 14.6253C61.8778 14.7102 61.8895 14.7978 61.8897 14.8858V28.5615C61.8898 28.737 61.8434 28.9095 61.7554 29.0614C61.6675 29.2132 61.5409 29.3392 61.3887 29.4265L49.9104 36.0351V49.1337C49.9104 49.4902 49.7209 49.8192 49.4118 49.9987L25.4519 63.7916C25.3971 63.8227 25.3372 63.8427 25.2774 63.8639C25.255 63.8714 25.2338 63.8851 25.2101 63.8913C25.0426 63.9354 24.8666 63.9354 24.6991 63.8913C24.6716 63.8838 24.6467 63.8689 24.6205 63.8589C24.5657 63.8389 24.5084 63.8215 24.456 63.7916L0.501061 49.9987C0.348882 49.9113 0.222437 49.7853 0.134469 49.6334C0.0465019 49.4816 0.000120578 49.3092 0 49.1337L0 8.10652C0 8.01678 0.0124642 7.92953 0.0348998 7.84477C0.0423783 7.8161 0.0598282 7.78993 0.0697995 7.76126C0.0884958 7.70891 0.105946 7.65531 0.133367 7.6067C0.152063 7.5743 0.179485 7.54812 0.20192 7.51821C0.230588 7.47832 0.256763 7.43719 0.290416 7.40229C0.319084 7.37362 0.356476 7.35243 0.388883 7.32751C0.425029 7.29759 0.457436 7.26518 0.498568 7.2415L12.4779 0.345059C12.6296 0.257786 12.8015 0.211853 12.9765 0.211853C13.1515 0.211853 13.3234 0.257786 13.475 0.345059L25.4531 7.2415H25.4556C25.4955 7.26643 25.5292 7.29759 25.5653 7.32626C25.5977 7.35119 25.6339 7.37362 25.6625 7.40104C25.6974 7.43719 25.7224 7.47832 25.7523 7.51821C25.7735 7.54812 25.8021 7.5743 25.8196 7.6067C25.8483 7.65656 25.8645 7.70891 25.8844 7.76126C25.8944 7.78993 25.9118 7.8161 25.9193 7.84602C25.9423 7.93096 25.954 8.01853 25.9542 8.10652V33.7317L35.9355 27.9844V14.8846C35.9355 14.7973 35.948 14.7088 35.9704 14.6253C35.9792 14.5954 35.9954 14.5692 36.0053 14.5405C36.0253 14.4882 36.0427 14.4346 36.0702 14.386C36.0888 14.3536 36.1163 14.3274 36.1375 14.2975C36.1674 14.2576 36.1923 14.2165 36.2272 14.1816C36.2559 14.1529 36.292 14.1317 36.3244 14.1068C36.3618 14.0769 36.3942 14.0445 36.4341 14.0208L48.4147 7.12434C48.5663 7.03694 48.7383 6.99094 48.9133 6.99094C49.0883 6.99094 49.2602 7.03694 49.4118 7.12434L61.3899 14.0208C61.4323 14.0457 61.4647 14.0769 61.5021 14.1055C61.5333 14.1305 61.5694 14.1529 61.5981 14.1803C61.633 14.2165 61.6579 14.2576 61.6878 14.2975C61.7103 14.3274 61.7377 14.3536 61.7551 14.386C61.7838 14.4346 61.8 14.4882 61.8199 14.5405C61.8312 14.5692 61.8474 14.5954 61.8548 14.6253ZM59.893 27.9844V16.6121L55.7013 19.0252L49.9104 22.3593V33.7317L59.8942 27.9844H59.893ZM47.9149 48.5566V37.1768L42.2187 40.4299L25.953 49.7133V61.2003L47.9149 48.5566ZM1.99677 9.83281V48.5566L23.9562 61.199V49.7145L12.4841 43.2219L12.4804 43.2194L12.4754 43.2169C12.4368 43.1945 12.4044 43.1621 12.3682 43.1347C12.3371 43.1097 12.3009 43.0898 12.2735 43.0624L12.271 43.0586C12.2386 43.0275 12.2162 42.9888 12.1887 42.9539C12.1638 42.9203 12.1339 42.8916 12.114 42.8567L12.1127 42.853C12.0903 42.8156 12.0766 42.7707 12.0604 42.7283C12.0442 42.6909 12.023 42.656 12.013 42.6161C12.0005 42.5688 11.998 42.5177 11.9931 42.4691C11.9881 42.4317 11.9781 42.3943 11.9781 42.3569V15.5801L6.18848 12.2446L1.99677 9.83281ZM12.9777 2.36177L2.99764 8.10652L12.9752 13.8513L22.9541 8.10527L12.9752 2.36177H12.9777ZM18.1678 38.2138L23.9574 34.8809V9.83281L19.7657 12.2459L13.9749 15.5801V40.6281L18.1678 38.2138ZM48.9133 9.14105L38.9344 14.8858L48.9133 20.6305L58.8909 14.8846L48.9133 9.14105ZM47.9149 22.3593L42.124 19.0252L37.9323 16.6121V27.9844L43.7219 31.3174L47.9149 33.7317V22.3593ZM24.9533 47.987L39.59 39.631L46.9065 35.4555L36.9352 29.7145L25.4544 36.3242L14.9907 42.3482L24.9533 47.987Z" fill="currentColor"/></svg>
</div>
<div class="flex lg:justify-center lg:col-start-2">
Laravel v{{ Illuminate\Foundation\Application::VERSION }} (PHP v{{ PHP_VERSION }})
</div>
</header>
<!-- DataGrid Rendered here -->
<div>{!! $grid !!}</div>
</div>
</div>
</div>
<!-- Included Static CSS/JS Files -->
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset('assets/gridphp/themes/base/jquery-ui.custom.css') }}"></link>
<link rel="stylesheet" type="text/css" media="screen" href="{{ asset('assets/gridphp/jqgrid/css/ui.jqgrid.bs.css') }}"></link>
<script src="{{ asset('assets/gridphp/jquery.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('assets/gridphp/jqgrid/js/i18n/grid.locale-en.js') }}" type="text/javascript"></script>
<script src="{{ asset('assets/gridphp/jqgrid/js/jquery.jqGrid.min.js') }}" type="text/javascript"></script>
<script src="{{ asset('assets/gridphp/themes/jquery-ui.custom.min.js') }}" type="text/javascript"></script>
<!-- CSRF Token for Ajax calls -->
<script type="text/javascript">
jQuery.ajaxSetup({headers: {'X-CSRF-TOKEN': jQuery('meta[name="csrf-token"]').attr('content')}});
</script>
</body>
</html>

Step4: Setting Routes

The Last step in this tutorial is to set the routes to our controller. We will use both GET and POST routes as our grid uses both methods.

<?php
use Illuminate\Support\Facades\Route;
// Route::get('/', function () {
// return view('welcome');
// });
use App\Http\Controllers\WelcomeController;
Route::get('/', [WelcomeController::class, 'view']);
Route::post('/', [WelcomeController::class, 'view']);
view raw web.php hosted with ❤ by GitHub

Note: The DataGrid does not rely on Eloquent ORM model of Laravel. It uses its own backend libraries.

Result: The Editable DataGrid for Laravel!

Next Actions:

Using Grid 4 PHP Framework in WordPress

As popularity of WordPress is growing really fast, we’ve published a new simplified tutorial on how to integrate Grid 4 PHP Framework with WordPress Sites. WordPress misses a comprehensive Editable Table, DataGrid and a CRUD solution, so we’ve integrated it to solve the problem.

It allows using all features of our Data Grid inside WordPress and much simpler than previous implementations. Steps required to integrate are following:

Updated 10-Dec-2024: New revised tutorial supports:

  • Nested Sub-Grids for Master-Detail views supported now.
  • File uploading Support

Updated 30-July-2024: New revised tutorial supports:

  • PHP 8.3 and WordPress 6.4.3
  • DataGrid custom event handlers as well.

Step1: Download Free version or Buy package from our website (if not already done) and move “lib” folder from package in your WordPress root directory, and rename “lib” folder as “phpgrid”

and inside this folder the contents should be:

Step2: Install WordPress plugin “Code Snippets” from wordpress.org/plugins/code-snippets/ OR download from Github Repository and install manually.

Step3: Goto admin panel and click Add Snippet as in image. Add any title you like and in code section, copy paste this Sample Snippet Grid Code in code section shown below:

Step4: In this code, we have created a shortcode here same as class name: [phpgrid_users] and we will now place it on page where we want to show our Datagrid.

Result: Now Save the page and open / preview it, you will get the Datagrid.

WordPress featuring Sub-Grids:

Adding Grid in WordPress Admin Area:

Following steps will be required to make shortcode available in admin area – plugin development.

Step1: Add admin_init & admin_footer hook along with others.

Step2: Select ‘Run Snippet everywhere’ after snippet code block.

Step3: Call do_shortcode() function where you want to show datagrid.

Result:

You can create more snippets by copying code from package demos and assign new unique class name for each grid which can be placed on your page/post of WordPress.

Let us know your feedback. If you have any questions, contact our support center.

Next Actions:

Active License Subscription customers can get free upgrade using this link.

Released Version 2.9

Welcome to the new release (version 2.9) of the Grid 4 PHP Framework. There are many updates in this version that we hope you will like, Following are some of the key highlights.

  • PHP 8.3 support
  • CodeIgniter v4 Integration
  • Using with Laravel v11
  • WordPress v6 Integration
  • Bootstrap v5 Integration
  • Drag-and-Drop Row Sorting, Effortlessly
  • Capture Digital Signatures with DataGrid
  • Badges and Dropdown rows
  • Rating plugin
  • New Html Input Types support: e.g. color, number, date
  • Export to MS-Word
  • UI and Design improvements
  • Security updates

CodeIgniter 4 Integration: We’ve made a quick walk-through how to integrate the smart PHP DataGrid with CodeIgniter framework.

Row Drag-and-Drop Sorting: To manage and organize your data in an intuitive and user-friendly manner.

WordPress6 Integration: We’ve published a new simplified tutorial on how to integrate Grid 4 PHP Framework with WordPress Sites.

Bootstrap5 Integration: Grid 4 PHP Framework is ready to use with Bootstrap5. Roll-out your next web-application with combining power of responsive PHP Data Grid and Bootstrap5 UI design.

Capturing Digital Signature: You can now take Digital Signatures using DataGrid and save it in the database.

Star Rating Plugin: Add a rating star plugin to be used as a column formatter.

Fixes:

  • Database layer library update
  • Toolbar button position, Autoheight update
  • Excel export library update
  • Better MS SQL Server FreeTDS support
  • Informix database fixes
  • Many reported bug fixes and updates.

This version will work on PHP v7 and onwards. For older PHP versions, v2.8.2 was the last stable release.

Next Actions:

PHP DataGrid for CodeIgniter

We’ve made a quick walk-through how to integrate the smart PHP DataGrid with CodeIgniter framework. For this, we have used:

  • Grid 4 PHP Framework 2.9
  • Latest version of CodeIgniter (v4+)
  • PHP 8 (can work on lower supported versions as well)

In this code we used MySQL, however you can use PHP DataGrid combination with almost all famous Database engines including Oracle, Microsoft SQL Server, DB2, Postgres, SQLite, Firebird, etc.

Steps:

Steps to integrate are very simple.

  1. Download CodeIgniter archive from Github repository and extract it in your public_html / htdocs / similar web public folder of your web server. Make sure it is showing the CI startup page.
  2. Download the Grid4PHP archive from our website. You can either use free OR paid version, Comparison is available here. Free version provides basic essential functions for evaluation purpose.
  3. Extract the Grid4PHP archive and move the ‘lib’ folder from archive to the ‘public’ folder of CodeIgniter.
  4. Replace the code of CI’s Controller app\Controller\Home.php with this sample controller code.
  5. In View, include the JS and CSS files and echo variable passed from controller. CI’s View welcome_message can be replaced with this sample view code.
  6. In Controller, make sure you set the database configuration (Line 9-14) and a table to fetch data (Line 45), according to your requirement. Refer lines in sample controller code.

Troubleshooting:

  • Getting “Whoops! We seem to have hit a snag. Please try again later”. If you see this message after setting up, please check the log file of CodeIgniter in “writable/logs” folder. It will tell the exact reason behind it.
  • Make sure you have “intl” and “curl” php extensions installed. They are required by CodeIgniter 4.
  • You can always open a support ticket for us.

Next Actions:

SQL Server Integration Just Got Better with PHP Data Grid

Hello,

We’ve just added improved support to use our PHP Data Grid with MS SQL Server. The demo browser that comes with the product can now be tested with SQL Server database along with MySQL database.

To install demos with PHP and MS SQL Server, Download the package from our download page and then install the database from the MS SQL Server database script.

To connect MS SQL Server, you must have SQL Server Native driver for PHP installed on your environment. Next you can use one of the following connection settings to be set in config.php. For example:

// Using PDO
define("PHPGRID_DBTYPE","pdo");
define("PHPGRID_DBHOST","sqlsrv:Server=den1.mssql5.gear.host");
define("PHPGRID_DBUSER","testdb63");
define("PHPGRID_DBPASS","testpass");
define("PHPGRID_DBNAME","testdb63");

// Using PHP Native SQL Server Driver
define("PHPGRID_DBTYPE","mssqlnative");
define("PHPGRID_DBHOST","den1.mssql5.gear.host");
define("PHPGRID_DBUSER","testdb63");
define("PHPGRID_DBPASS","testpass");
define("PHPGRID_DBNAME","testdb63");

// Using OBDC Driver
define("PHPGRID_DBTYPE","odbc_mssql");
define("PHPGRID_DBHOST","Driver={SQL Server};Server=den1.mssql5.gear.host;Database=testdb63;");
define("PHPGRID_DBUSER","testdb63");
define("PHPGRID_DBPASS","testpass");
define("PHPGRID_DBNAME",null);

Troubleshooting:

Best way to troubleshoot database connection is to make an independent php file with just php-sqlserver connection code as shown in php manual. When it works, just put the verified configuration in config.php file of php data grid.

What Next:

Drag-and-Drop Row Sorting, Effortlessly

Hello,

We are thrilled to share an exciting new feature of ‘Row Drag-and-Drop Sorting’ to manage and organize your data in an intuitive and user-friendly manner. With this feature, you can now effortlessly rearrange data rows within your tables by simply dragging and dropping them into the desired position.

The todo-list demo is mobile friendly and drag drop feature can be used on mobile devices as well.

See Screencast below.

Mobile View:

The working demo can be checked online and inside full version package in demos/apps/todos.

Live Demohttps://www.gridphp.com/demo/demos/apps/todos.php

This feature is a part of our upcoming version 2.9.0 and active subscription customers can request free upgrade or renew your expired subscription using this link.

What Next:

Capture Digital Signatures with DataGrid

Hello,

You can now take Digital Signatures using DataGrid and save it in database along with other data. Bulk editing feature can also be used when updating Digital Signature. See screencast below.

The working demo can be checked online and inside full version package in demos/integration/signature.

Live Demo: https://www.gridphp.com/demo/demos/integrations/signature.php

Next Actions:

Active License Subscription customers can get free upgrade using this link.

Released Version 2.8

Welcome to the August 2021 release (version 2.8). There are many updates in this version that we hope you will like. It contains PHP 8 compatibility, UI Design Optimizations, Performance Optimizations, Security updates and Bug fixes. It also contains some new demos for better usability of data grid in your application. Highlights mentioned below.

Data Grid in Accordion Control

Now you can have multiple data grids inside accordion control. It’s best suited for multiple step process and to organize multiple modules on a single page.

Custom HTML Listing Layout

This feature allow you to display each record with customized layout with html code and fields placeholders.

Improved Database Table Editor

This tool enables you to quickly perform DML operations on a database defined in the code configuration.

RSS Reader using DataGrid

This demo loads the RSS feed into an array to be used as a data-source of data grid.

Data Import Progress Bar

Progress bar was a demanding feature when we importing large dataset.

Open Street Maps Integration

Like Google maps, you can also use Open Street maps and use the parameters of lat/lng from database using field placeholders.

Improved Tree Grid

Updates:

  • PHP 8.0 compatibility, updated related libraries
  • UI and Design improvements
  • Security updates: sanitizations added
  • Custom HTML layout on Datagrid List View
  • Demo to persist grid setting in database
  • Demo to integrate open street maps integration
  • Import feature now show progress-bar & column match probability setting while import mapping
  • Global search when multiple words typed will now narrow down searches
  • Optimized Tree grid Demo (parent selection via lookup dropdown)
  • Lookup option in dropdown (show lookup by just FK table, FK-id, FK-label)
  • Added demo for Read-only grid, Plain Html UI grid, Responsive grid with horizontal scroll

This also contains over 70 reported bug fixes and updates.

Integration with Code Igniter 4.0 and Laravel 8.0 is also in testing phase and will be released soon as a separate update.

Next Actions:

Active License Subscription customers can get free upgrade using this link.

PHP 8 Support

PHP 8 has been released some time ago and had some breaking changes. We’ve been hard at work behind the scenes to provide support for all our libraries so that upgrading to PHP 8 with Grid 4 PHP Framework is easy.

The licensed version update is available now and free version packaging is in progress which will be published soon.

Active License Subscription customers can get update using this link.