php 我写的垃圾工具函数 data_fromat

<

pre class="lang:php decode:true">
/**
* data_fromat格式化数据
*@param $origin 原始数组 默认字段
*@param array $field_default 需要提取作为第一级的字段的键 (这个数组第一个参数应该是id这种唯一值)
*
*@return 格式化后的数组 店铺-{信息,日期数据}的格式
*@author janing
*/
function data_fromat($origin,$field_default="",){
if(!$field_default||!$origin){return ;}

$temporary=array();
foreach ($origin as $shopIndex => $shopValue) {
$shop_id=$shopValue[$field_default[0]];
if(!isset($temporary[$shop_id])){
$temporary[$shop_id]=array();
foreach ($field_default as $field_index => $field) {
//公共字段插入
$temporary[$shop_id][$field]=$shopValue[$field];
}
//新建每日数据字段
$temporary[$shop_id]['dataPre']=array();
}
//其余字段插入 dataPre
$dataPreChild=array();
foreach ($shopValue as $field_index => $field) {
if(in_array($field_index,$field_default) ){continue;}
$dataPreChild[$field_index]=$field;
}
array_push($temporary[$shop_id]['dataPre'],$dataPreChild);
}

//对象转数组
$temporary_arr=array();
foreach ($temporary as $key => $value) {
array_push($temporary_arr,$value);
}
//var_dump($temporary_arr);exit;
return $temporary_arr;
}

tp 3.2 模板 通过include传值 来高亮导航

1.页面文件引入导航模板





2.导航模板








thinkphp 5 踩坑记录【持续更新217.03.25】

这是一个TP3.2的中度开发者的学习记录

TP5 安装过程

暂时只提供 官网下载 完整版的安装方法,并尽量调整到3.2的开发习惯,tp5需要在php5.4以上且非php6的环境运行。

  • 下载thinkphp_5.0.5_full.zip文件,并解压到WWW目录,重命名为tp5 。
    此时目录结构如下:
    tp5
    ├─application 应用目录
    ├─public WEB目录(对外访问目录)
    ├─thinkphp 框架系统目录
    ├─extend 扩展类库目录
    ├─runtime 应用的运行时目录(可写,可定制)
    ├─vendor 第三方类库目录(Composer依赖库)
    ├─build.php 自动生成定义文件(参考)
    ├─composer.json composer 定义文件
    ├─LICENSE.txt 授权说明文件
    ├─README.md README 文件
    └─think 命令行入口文件

  • 找到 tp5/public/index.php 复制到根目录tp5/
    此时目录应该如此:
    tp5
    ├─application 应用目录
    ├─public WEB目录(对外访问目录)
    ├─thinkphp 框架系统目录
    ├─extend 扩展类库目录
    ├─runtime 应用的运行时目录(可写,可定制)
    ├─vendor 第三方类库目录(Composer依赖库)
    ├─build.php 自动生成定义文件(参考)
    ├─composer.json composer 定义文件
    ├─LICENSE.txt 授权说明文件
    ├─README.md README 文件
    ├─index.php 入口文件
    └─think 命令行入口文件

  • 修改tp5/index.php如下:

    // 定义应用目录
define('APP_PATH', __DIR__ . '/application/');
// 加载框架引导文件
require __DIR__ . '/thinkphp/start.php';
  • 修改thinkphp/library/think/View.php如下:
    //原来这样
    //'__STATIC__' => $root . '/static', 
    //‘__CSS__'    => $root . '/static/css',
    //'__JS__'     => $root . '/static/js',
    //改成这样
    '__STATIC__' => $root . '/public/static',
    '__CSS__'    => $root . '/public/static/css',
    '__JS__'     => $root . '/public/static/js',

此时应该可以访问:
localhost/tp5
此链接等效于(与3.2类似)
localhost/tp5/index.php/Index/index

增加模块

模块增加暂时只知道用cmd的方法,如有新办法再补充,一般都是一开始cmd然后后面无限复制粘贴的了。
* 使用cmd 运行php环境,暂时只知道phpstudy的办法。

* 进入文件目录

    cd WWW/tp5
  • 执行创建模块指令(创建admin模块)
    php think build --module admin

增加控制器

控制器不再需要 [控制器名]Controller.class.php的名字格式,直接使用[控制器名].php并且在tp5/application/[模块]/controller下。
例子:Index模块下新建User控制器
index
├─contorller 控制器目录
│ ├─Index.php index控制器
│ ├─User.php User控制器
...

新建:User.php (注意大写接全部小写!!!)

READ ME :浏览器访问控制器时
+ 会把任何驼峰语法全部转换成Aaaaa 的格式,所以文件尽量以第一个大写接全部小写来命名。
+ 会把 _ 后面一个单词理解为大写 例如:abc_d 就会访问abcD.php这个控制器。


NOTE:namespace 是由 app[模块 (注意小写)]\controller 组成的,并且Class [控制器名]与文件名是同步的

继承think\Controller 类

use think\Controller;
如果继承了think\Controller类的话,可以直接调用think\View及think\Request类的方法

    public function index()
    {
        // 获取包含域名的完整URL地址
        $this->assign('domain',$this->request->url(true));
        return $this->fetch('index');
    }

连接数据库

先跳出3.2的数据库思维,tp5提供更多对多数据库操作的支持。

### 方法1:在admin中新建 database.php 文件:

  • 新建admin/database.php 并 配置数据库
NOTE:前缀只有在Db::name('user')这种使用情况下有效。
      'mysql',
      // 服务器地址
      'hostname'    => 'localhost',
      // 数据库名
      'database'    => 'datadeal',
      // 数据库用户名
      'username'    => 'root',
      // 数据库密码
      'password'    => 'root',
      // 数据库编码默认采用utf8
      'charset'     => 'utf8',
      // 数据库表前缀//前缀只有在Db::name('user')这种情况下有效
      'prefix'      => '',
      // 数据库调试模式
      'debug'       => false,
  ];
 ?>
 
  • 控制器进行数据库操作
    ##### NOTE:一定要调用think\Db类。
        namespace app\admin\controller;
        use Resportsale;
        use think\Db;

        class Datatransfer
        {
                public function test()
                {
                    $shoplist=Db::query('select * from tao_orders_oneday_test where id=?',[1]);
                    var_dump($shoplist);
                }
        }

方法2:在配置文件中定义(多用于多数据库操作):

  • 修改配置文件(admin/config.php)如下:
[
    // 数据库类型
    'type'        => 'mysql',
    // 服务器地址
    // 'hostname'    => 'rm-vy1g8bdkp31vzn2aj.mysql.rds.aliyuncs.com:3306',
    'hostname'    => 'localhost:3306',
    // 数据库名
    // 'database'    => 'public_data',
    'database'    => 'jiexiu',
    // 数据库用户名
    // 'username'    => 'jusr9mw7rezy',
    'username'    => 'root',
    // 数据库密码
    // 'password'    => 'jsb869_MINI',
    'password'    => 'Janing351367',
    // 数据库编码默认采用utf8
    'charset'     => 'utf8',
    // 数据库表前缀
    'prefix'      => 't_',
    // 数据库调试模式
    'debug'       => false,
  ]
];
?>
  • 控制器进行数据库操作
        public function test()
    {
      $shoplist=Db::connect("db_typeA")->query('select * from t_user where id=?',[1]);
      var_dump($shoplist);
    }

thinkphp3.2 批量上传文件

js

if(window.FileReader) {

            var FileController = u.file.upload;                    // 接收上传文件的后台地址
            // FormData 对象
            var form = new FormData();

            form.append("author", "hooyes");                        // 可以增加表单数据
            form.append("beginTime", data.beginTime);

            for(var i = 0 , len=data.file.length; i <len;i++){
                var fileObj = document.getElementById("file").files[i]; // 获取文件对象
                form.append("file"+i, fileObj);                           // 文件对象
            }
            // XMLHttpRequest 对象
            var xhr = new XMLHttpRequest();
            xhr.open("post", FileController, true);
            xhr.onreadystatechange = function () {
                if(xhr.readyState==4){
                    var ret =JSON.parse(this.response);
                        if(ret.code==1){
                            alert("成功")
                        }
                }
            };
            xhr.send(form);
    }
    else {
            alert("该浏览器不支持,请换Chrome内核浏览器");
    }

 

controller

 $upload = new \Think\Upload (); // 实例化上传类
            $upload->maxSize = 0; // 设置附件上传大小
            $upload->exts = array (
                    'csv'
            ); // 设置附件上传类型
            $upload->rootPath = './Public/uploadFile//'; // 设置附件上传根目录
            $upload->savePath = ''; // 设置附件上传(子)目录
            $now = $_SERVER['REQUEST_TIME'];
                        $upload->saveName = array('uniqid',$now);//防重名的保存规则
                        $info = $upload->upload (); // 上传文件

 

thinkphp禁止、允许访问模块

// 设置禁止访问的模块列表
'MODULE_DENY_LIST' =>  array('Common','Runtime','Api'),

同样也可设置可以访问的模块和默认模块,代码如下:

'MODULE_ALLOW_LIST'    =>    array('Home','Admin','User'),
'DEFAULT_MODULE'       =>    'Home',

如果项目比较简单,还可以设置单模块,代码如下:

// 关闭多模块访问
'MULTI_MODULE' =&gt; false,
'DEFAULT_MODULE' =&gt; 'Home',