美文网首页
自动生成搜索表单项的单例类

自动生成搜索表单项的单例类

作者: AISpider | 来源:发表于2019-03-14 22:26 被阅读0次
为什么要自动生成搜索表单?

一个常用的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>

相关文章

  • 自动生成搜索表单项的单例类

    为什么要自动生成搜索表单? 一个常用的cms后台,最常见的就是列表表单搜索了,要是每一个页面都要单独去写一个搜索表...

  • 2018-07-09学习小结 - 包及访问权限6

    学习 18.5 构造方法私有化——单例设计模式(Singleton) 范例 18-9 自动生成的构造方法的类 包含...

  • 单例模式

    前言 单例模式(singleton)下的类最多只能生成一个实例。单例模式有很多实际用途,比如很多工厂类,生成多个实...

  • 好未来

    1.设计并实现单例模式 原理: ①单例类只能有一个实例 ②这个实例只能由单例类来生成 ③必须给所有其他对象提供这个...

  • Python单例模式

    单例类 单例类采用重载new方法,返回一个类对象 实例化的类对象由new方法生成 new方法在 init方法调用前...

  • Hibernate 自动生成表要注意事项

    自动生成默认的数据表 以类名、字段名为表的表名和列名来自动生成数据表。 自定义的方式生成数据表 这种方式可以自定义...

  • SpringData(1)

    Demo 利用create 生成表时,不设置l属性ength 生成表中的长度为255 单例:1 构造方法私有 主键...

  • 设计模式

    1.设计并实现单例模式 要求:①单例类只能有一个实例②这个实例只能由单例类来生成③必须给所有其他对象提供这个实例目...

  • 单例模式

    单例模式是封装的一种形式,依靠单例模式调用被封装的属性和方法,因为使用单例模式的类无法生成实例(只能引用单例模式所...

  • 哥哥带你看Kotlin有多爽

    容器的操作符 线程调度 一个关键字实现单例 自动生成getter 和setter 方法以及类的简洁声明 在Andr...

网友评论

      本文标题:自动生成搜索表单项的单例类

      本文链接:https://www.haomeiwen.com/subject/womhmqtx.html