为什么要自动生成搜索表单?
一个常用的cms后台,最常见的就是列表表单搜索了,要是每一个页面都要单独去写一个搜索表单是非常费劲繁琐的重复工作。这里设计一款只通过配置简单的数组项,就能自动生成搜索表单(多字段,多类型)的插件。
基础类设计
<?php
/**
* 简单搜索插件
* 整个页面基于bootstrap样式设计
*/
namespace Vendor\Mylib;
class Search{
// 存放实例
private static $instance = null;
/**
* 因为是单例类,所以构造方法被私有化,禁止被继承
*/
private function __construct()
{
// 反正不能被继承了
}
static public function instance()
{
if (!self::$instance) {
self::$instance=new self;
}
return self::$instance;
}
/**
* 初始化
* @param [type] $config [description]
* @return [type] [description]
*/
public function init($config){
foreach ($config as $key => $row) {
$row['field']=$key;
if (!$row['type']) {
$row['type']="text";
}
$value=I("get.$key");
$fun="form_".$row['type'];
$plugs=$plugs.'
<div class="col-md-3 col-xs-12 col-sm-3">
<div class="input-group my-btn-group">
<span class="input-group-addon" id="sizing-addon3">'.$row["title"].'</span>
'.$this->$fun($row,$value).'
</div>
</div>
';
}
return $plugs;
}
/**
* 文本框
* @param [type] $field [description]
* @param string $value [description]
* @return [type] [description]
*/
private function form_text($field,$value=''){
return '
<input type="text" class="form-control " id="'.$field['field'].'" name="'.$field['field'].'" placeholder="'.$field['title'].'" value="'.$value.'">';
}
/**
* 日期选择器
* @param [type] $field [description]
* @param string $value [description]
* @return [type] [description]
*/
private function form_date($field,$value=''){
$value=date('Y-m-d',strtotime($value));
//如果没有导入jquery,请导入jquery,否则会失效,这里不导入jquery
return '
<input type="text" class="form-control " id="'.$field['field'].'" name="'.$field['field'].'" placeholder="'.$field['title'].'" value="'.$value.'">
<script>
$("#'.$field['field'].'").datetimepicker({
format:"Y-m-d",
formatDate:"Y-m-d",
timepicker:false
});
</script>
';
}
/**
* 日期时间选择器
* @param [type] $field [description]
* @param string $value [description]
* @return [type] [description]
*/
private function form_datetimes($field,$value=''){
$value=date('Y-m-d H:i:s',strtotime($value));
//如果没有导入jquery,请导入jquery,否则会失效,这里不导入jquery
return '
<input type="text" class="form-control " id="'.$field['field'].'" name="'.$field['field'].'" placeholder="'.$field['title'].'" value="'.$value.'">
<script>
$("#'.$field['field'].'").datetimepicker({
format:"Y-m-d H:i:s",
formatDate:"Y-m-d H:i:s",
});
</script>
';
}
// 是否,bool下拉选择
private function form_bool($field,$value=''){
$obj='<select class="form-control " name="'.$field['field'].'">';
if ($type=='search') {
$obj=$obj.'<option value="" >请选择</option>';
}
if ($value=='1') {
$is_1='selected = "selected"';
} elseif($value==="0"){
$is_0='selected = "selected"';
}
$obj=$obj.'<option value="1" '.$is_1.' >是</option>';
$obj=$obj.'<option value="0" '.$is_0.' >否</option>';
$obj=$obj.'</select>';
return $obj;
}
/**
* 外键 先不做
* @param [type] $field [description]
* @param string $value [description]
*/
private function form_foreign_select($field,$value=''){
}
}
?>
一个简单的封装方法:
/**
* 构造search方法
* @return [type] [description]
*/
function search($config){
$db=\Vendor\Mylib\Search::instance();
return $db->init($config);
}
简单的使用
$search_config=array(
"usesrname"=>array(
"title"=>"用户名",
),
"type"=>array(
"title"=>"用户类型",
"type"=>"list",
"list"=>array(
"0"=>"朋友",
"1"=>"亲人",
"2"=>"同学",
"3"=>"发小",
),
),
"ip"=>array(
"title"=>"登录IP",
),
);
$this->searchForm=search($search_config);
模板
<link rel="stylesheet" type="text/css" href="jquery.datetimepicker.css"/>
<div class="row frow">
<form action="" method="GET" name="form" class="myforms" id="to_search">
{$searchForm}
<div class="col-md-3 col-xs-12 col-sm-3">
<div class="btn-group">
<a type="submit" class="btn btn-info" id="get_search">条件查询</a>
<a type="button" href="" class="btn btn-primary" id="get_search">所有数据</a>
</div>
</div>
</form>
</div>
<script src="jquery.datetimepicker.full.js"></script>
<script type="text/javascript">
function isNull( str ){
if ( str == "" ) return true;
var regu = "^[ ]+$";
var re = new RegExp(regu);
return re.test(str);
}
$("#get_search").click(function(){
surl=$("#to_search").serializeArray();
url="/";
for (var i = 0; i < surl.length; i++) {
if (!isNull(surl[i]['value'])) {
// urlencode("辖区动态")
url=url+surl[i]['name']+"/"+surl[i]['value']+"/";
}
}
url = url.substr(0, url.length - 1);
window.location.href=encodeURI(encodeURI("/{$PUB_NODE}"+url));
});
</script>
网友评论