Files
crm-ms1/smartadmroot/smartui-datatable.php
2026-05-27 11:44:10 -04:00

325 lines
10 KiB
PHP

<?php
use \SmartUI\UI;
use \SmartUI\Util as SmartUtil;
use \Common\HTMLIndent;
//initilize the page
require_once 'init.web.php';
/*---------------- PHP Custom Scripts ---------
YOU CAN SET CONFIGURATION VARIABLES HERE BEFORE IT GOES TO NAV, RIBBON, ETC.
E.G. $page_title = "Custom Title" */
$page_title = "Datatable PHP Class";
/* ---------------- END PHP Custom Scripts ------------- */
//include header
//you can add your custom css in $page_css array.
//Note: all css files are inside css/ folder
$page_css[] = "your_style.css";
include("inc/header.php");
//include left panel (navigation)
//follow the tree in inc/config.ui.php
$page_nav["smartui"]["sub"]["datatable"]["active"] = true;
include("inc/nav.php");
?>
<!-- ==========================CONTENT STARTS HERE ========================== -->
<!-- MAIN PANEL -->
<div id="main" role="main">
<?php
//configure ribbon (breadcrumbs) array("name"=>"url"), leave url empty if no url
//$breadcrumbs["New Crumb"] => "http://url.com"
$breadcrumbs["Smart UI"] = "";
include("inc/ribbon.php");
?>
<!-- MAIN CONTENT -->
<div id="content">
<section id="widget-grid" class="">
<div class="row">
<article class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<?php
$data = json_decode(file_get_contents(APP_URL."/data/data.json"));
$dt = $_ui->create_datatable($data, array("in_widget" => true));
$dt->options("checkboxes", true);
$dt->options("row_details", '
<div class="alert alert-warning fade in">
<i class="fa-fw fa fa-warning"></i>
<strong>Warning</strong> The ID for {{Name}} is #{{ID}}.
</div>'
);
$dt->cell = array(
"Company" => array(
//you can even pass a closure for the URL property
"url" => function($row, $value) {
if ($value == "Pharetra Nam Industries")
return "http://facebook.com";
else
return "http://maps.google.com/maps?z=12&t=m&q=".$row->City."+".$row->Zip;
},
"icon" => "fa-external-link txt-color-red",
"callback" => function($row, $html_value) { // if you want to get the configured HTML cell, use this key
$some_number = rand(1, 15);
$color = $some_number > 10 ? 'red' : 'greenLight';
return $html_value.' <span class="badge bg-color-'.$color.'">'.$some_number.'</span>';
}
),
//pass closure function and return a dynamic content
"Name" => function($row, $value) {
switch ($value) {
case "Tanek":
return '<span class="label label-info">'.$value.'</span>';
break;
case "Alana":
return $value.' <span class="badge bg-color-greenLight">5</span>';
break;
case "Donna":
return $value.' <span class="label label-success">active</span>';
break;
default:
return $value;
}
},
"Phone" => '{{Phone}} <span class="label label-success">active</span>'
);
//$dt->options('static', true);
// set a cell using jQuery setup
$dt->cell("Zip", function($row, $value) {
return '<i class="fa fa-map-marker fa-md"></i> '.$value;
}, function($dt) { // callback
//$dt->cell("Zip", "");
});
// change the column name
$dt->col("ID", "ID #");
// set hidden columns
$dt->hidden(array("ID", "Date")); // or $dt->col("ID", false)->col("Date", false) -- same as renaming but with "false" as value
// hide a column
//$dt->hide("City", true);
// configure rows
// available properties for row
// class, attr, hidden, detail, checkbox
$dt->row(2, ""); // empty a row
$dt->row(3, "danger"); // set class property or $dt->row(5, array("class" => 'txt-color-red'))
// reset all row settings
//$dt->row(null);
// get number of rows
$rows = $dt->rows();
for ($i = 4;$i <= 20; $i++) {
$dt->row($i, function($row) {
if (strpos($row->Name, 'e') !== false) {
return array("detail" => false, "checkbox" => false, "class" => "success");
} else if (strpos($row->Name, 'n') !== false) {
return array("detail" => false, "content" => '');
}
});
}
// set table's id
$dt->id = "test-table-id";
$dt->sort('Name', 'desc');
//configure the widget of this table by getting the widget property
//learn more about SmartUI:Widget class at widgets-php.php
$widget = $dt->widget;
$widget->header("icon", 'fa fa-exclamation')->options("editbutton", false);
//->body("class", ''); // you want padding? remove the widget's class
$widget->id = "widget-id";
$cities_htm = '';
$arr_cities = array("Fogo", "Machelen", "Norman", "Kapolei");
foreach ($arr_cities as $city) {
$cities_htm .= '
<li>
<a href="#">
<div class="checkbox">
<label>
<input type="checkbox" value="'.$city.'" class="checkbox style-0" data-status-filter="'.$city.'" value="'.$city.'">
<span>'.$city.'</span>
</label>
</div>
</a>
</li>';
}
// add a filter dropdown
$widget->header("toolbar", array('
<div class="btn-group">
<button class="btn btn-primary dropdown-toggle" data-toggle="dropdown">
Filter Cities <span class="caret"></span>
</button>
<ul class="dropdown-menu">
'.$cities_htm.'
</ul>
</div>'
));
// print it!
$html = $dt->print_html(true); // return html
// configure JS
// setup additional datatable js properties
$dt->js("properties", array(
'fnCreatedRow' => 'function( nRow, aData, iDataIndex ) {
var cell = $("td:eq(7)", nRow);
var city = aData[7];
if ( city == "Abbotsford" || city == "Baranello" ) {
cell.html(city + \' <span class="label label-info">great city</span>\');
}
}',
'sDom' => "\"<'dt-toolbar'<'col-xs-6'f><'col-xs-6 hidden-xs'B>r>\"+
\"t\"+
\"<'dt-toolbar-footer'<'col-xs-6'i><'col-xs-6'p>>\"",
'buttons' => "[
{ extend: 'copy', className: 'btn btn-default' },
{ extend: 'csv', className: 'btn btn-default' },
{ extend: 'excel', className: 'btn btn-default' },
{ extend: 'pdf', className: 'btn btn-default' },
{ extend: 'print', className: 'btn btn-default' },
]",
'autoWidth' => 'true'
));
$dt->js("custom",
'function getTypeFilters() {
var aSearchTypes = [];
$("input[data-status-filter]").each(function(index, value) {
if ($(this).prop("checked")) {
var city = $(this).val();
aSearchTypes.push(city);
}
})
return aSearchTypes;
}
$("input[data-status-filter]").on("click", function() {
var filters = getTypeFilters();
'.$dt->js("oTable").'.fnFilter(filters.join("|"), 7, true, false);
})'
);
// print JS content
$js = $dt->print_js(true);
$run_time = $_ui->run_time(false);
echo $html;
?>
</article>
<article class="col-xs-12 col-sm-12 col-md-12 col-lg-12">
<?php
$options = array(
"editbutton" => false,
"colorbutton" => false,
"collapsed" => true
);
// print html output
$hb = new HTMLIndent();
$html_snippet = SmartUtil::clean_html_string($hb->indent($html), false);
$contents = array(
"body" => '<pre class="prettyprint linenums">'.$html_snippet.'</pre>',
"header" => array(
"icon" => 'fa fa-code',
"title" => '<h2>HTML Output (Run Time: '.$run_time.')</h2>'
)
);
$_ui->create_widget($options, $contents)->color('pink')->print_html();
// print js
$js_snippet = SmartUtil::clean_html_string($js);
$js_contents = array(
"body" => '<pre class="prettyprint linenums">'.$js_snippet.'</pre>',
"header" => array(
"icon" => 'fa fa-code',
"title" => '<h2>JS Output</h2>'
)
);
$_ui->create_widget($options, $js_contents)->color('green')->print_html();
?>
</article>
</div>
<div class="row">
<div class="col-sm-12">
<div class="well">
<?php
$md = file_get_contents("docs/smartui/datatable.md");
$parsedown = new Parsedown();
$doc = $parsedown->parse($md);
echo str_replace('<pre', '<pre class="prettyprint linenums"', $doc);
?>
</div>
</div>
</div>
</section>
</div>
<!-- END MAIN CONTENT -->
</div>
<!-- END MAIN PANEL -->
<!-- ==========================CONTENT ENDS HERE ========================== -->
<?php
//include required scripts
include("inc/scripts.php");
?>
<!-- PAGE RELATED PLUGIN(S)
<script src="..."></script>-->
<script src="https://google-code-prettify.googlecode.com/svn/loader/run_prettify.js"></script>
<script src="<?php echo ASSETS_URL; ?>/js/plugin/datatables/jquery.dataTables.min.js"></script>
<script src="<?php echo ASSETS_URL; ?>/js/plugin/datatables/dataTables.colVis.min.js"></script>
<script src="<?php echo ASSETS_URL; ?>/js/plugin/datatables/dataTables.bootstrap.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.5.1/js/dataTables.buttons.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.flash.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/jszip/3.1.3/jszip.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/pdfmake.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdnjs.cloudflare.com/ajax/libs/pdfmake/0.1.32/vfs_fonts.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.html5.min.js"></script>
<script type="text/javascript" language="javascript" src="https://cdn.datatables.net/buttons/1.5.1/js/buttons.print.min.js"></script>
<script>
<?php
echo $js;
?>
</script>
<script>
$(document).ready(function() {
// PAGE RELATED SCRIPTS
})
</script>
<?php
//include footer
include("inc/footer.php");
?>