//输出的文件类型为excel  
    header("Content-type:application/vnd.ms-excel");  
    //提示下载  
    header("Content-Disposition:attachement;filename=Report_".date("Ymd").".xls");  
  
    //报表数据  
    $ReportArr = array(    array(1,2,3,4,5),  
                        array('A','B','C','D','E'),  
                        array('up','down','left','right','center'),  
                        array('欢','迎','光','临','我','的','百','度','空','间')  
                    );  
    $ReportContent = '';  
    $num1 = count($ReportArr);  
    for($i=0;$i<$num1;$i++){  
        $num2 = count($ReportArr[$i]);  
        for($j=0;$j<$num2;$j++){  
            //ecxel都是一格一格的,用\t将每一行的数据连接起来  
            $ReportContent .= '"'.$ReportArr[$i][$j].'"'."\t";  
        }  
        //最后连接\n 表示换行  
        $ReportContent .= "\n";  
    }  
    //用的utf-8 最后转换一个编码为gb  
    $ReportContent = mb_convert_encoding($ReportContent,"gb2312","utf-8");  
    //输出即提示下载  
    echo $ReportContent;

第二种参考(选自微擎投票:自己参考用的)
//生成excel表格

protected function exportexcel($data=array(),$title=array(),$filename='report'){
    header("Content-type:application/octet-stream");
    header("Accept-Ranges:bytes");
    header("Content-type:application/vnd.ms-excel");  
    header("Content-Disposition:attachment;filename=".$filename.".xls");
    header("Pragma: no-cache");
    header("Expires: 0");
    //导出xls 开始
    if (!empty($title)){
        foreach ($title as $k => $v) {
            $title[$k]=iconv("UTF-8", "GB2312",$v);
        }
        $title= implode("\t", $title);
        echo "$title\n";
    }
    if (!empty($data)){
        foreach($data as $key=>$val){
            foreach ($val as $ck => $cv) {
                $data[$key][$ck]=iconv("UTF-8", "GB2312", $cv);
            }
            $data[$key]=implode("\t", $data[$key]);
            
        }
        echo implode("\n",$data);
    }
}

public function doWebCreatemenu_test()

{
    global $_W, $_GPC;
   
    $account = WeAccount::create();
    $actoken = $account->getAccessToken();
    $url = "https://api.weixin.qq.com/cgi-bin/menu/delete?access_token={$actoken}";//exit;
    $ch = curl_init();
    curl_setopt($ch,CURLOPT_URL,$url);
    curl_setopt($ch,CURLOPT_RETURNTRANSFER,1);
    curl_setopt($ch,CURLOPT_POST,1);

// $data = '{
// "button":[
// {
// "type":"click",
// "name":"今日歌曲",
// "key":"V1001_TODAY_MUSIC"
// },
// {
// "name":"菜单",
// "sub_button":[
// {
// "type":"view",
// "name":"搜索",
// "url":"http://www.soso.com/"
// },
// {
// "type":"view",
// "name":"视频",
// "url":"http://v.qq.com/"
// },
// {
// "type":"click",
// "name":"赞一下我们",
// "key":"V1001_GOOD"
// }]
// }]
// }';
// curl_setopt($ch,CURLOPT_POSTFIELDS,$data);
// curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,false);
// curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,false);

    $output = curl_exec($ch);
    if($output == false){
        echo curl_error($ch);
    }else{
        echo $output;
    }
    curl_close($ch);
}

新建的模块都在addons下
所有的模板文件都在你的模块下的template下(不管是手机端还是web端):

1、web端直接放在templatexia
2、手机端的要放在mobile文件夹下(即要新建这个文件夹)
3、还有个image目录(新建),是存放所有的css、js、图片啊(所有单独用到的资源文件都放到这个位置);

在你的模块目录下新建inc

inc下新建俩目录:mobile和web
(site.php 中大量的 doWebXxx, doMobileXxx 方法, 拆分成一个个文件放置到 web 和 mobile 文件夹中)
php文件起名字:你定义的.inc.php

引用了bootstrap的css样式:面板啊、表单啊
全局变量用之前要先定义:global $a,$b;
$_W全局变量(很多参数,可获取当前公众号的id等信息)
$_GPC(相当于$_POST)
src="{php echo tomedia('相对路径')}"//例如存放的相对路径的图片就可以自动识别出完整的路径
如果你的css全局样式或者其他的控件没起效果,那么当前的$_W一定要global,否则没效果
在模板文件下的receive.php里可以记录日志,WeUtility::logging('suibian',$this->message['content']);
在form表单里无论写submit还是button进一步操作都会刷新页面回到公众号管理页面,用a链接就哦了
给版本改名字的时候在site.php的class类里面也要跟着改一下
引入图片的路径可以用$_W['siteroot'],然后后面跟具体路径
带搜索的下拉框的插件在微擎里自带的有,在web/resource/components/select2/select2.min.css,但是和require.js冲突, 这时只需单独引用require.js,然后在需要引入select2.js的HTML文件里

require(['/web/resource/components/select2/select2.min.js'],function(){
                $("#select_can_search").select2();
        });即可,如果是在同一目录,直接写js文件,如果在不同目录,可以从根目录'/'下找;

直接处理的类型是process.php(符合规则列表里的触发字才会走这个文件),订阅的消息类型是receiver.php(用户发送的任何文字都经过此模块,只是不能进行return返回处理,但是可以记录日志),记录日志方法:WeUtility::logging('trace', $postStr);第一个参数是起个名字,第二个参数是要保存的内容比如:WeUtility::logging('debug', $this->message[‘content’]);这样就把用户发送的所有信息都保存起来了

《微擎开发写在process.php里,作为事件推送-》扫描带参数二维码事件-》各个参数带返回值》
$(document).ready(function(){

    $(document).mousemove(function (e) {
        $('#img').css('left',e.pageX + 30+'px');
        $('#img').css('top',e.pageY + 'px');
    });
});//获取当前鼠标位置

//=========================分页=============================================================================
微擎的pagination分页搜索带参数的问题,共5个参数,总数、当前页数、数据、url(一般都为空)、ajax(是否是ajax)、ajaxname;带参数的情况下只能用ajax实现,
$pagination = pagination($total,$page,$rows,'',array('before' => 5, 'after' => 4, 'ajaxcallback' => 'true', 'callbackfuncname' => 'test'));
在HTML端
function test(a,b,c){
//a代表url,b代表鼠标移入的当前页码数,c代表this

    $.ajax({
        url:"{php echo $this->createWebUrl('tongji',array())}",
        data:$('#search').serialize()+'&page='+b,
        type:'POST',
        dataType:'HTML',
        success:function(returndata){
            document.documentElement.innerHTML=returndata;

        },
        error:function(){
            alert('数据返回出错,无伤大雅,请继续');
        }
    });
}

分页2:
js获取当前按钮(上一页、下一页等)的url,然后连上搜索参数即可
//菜单跳转(自定义)
$a = $this->createMobileUrl('enter');

    $a = substr($a,2);
    $b = 'http://' . $_SERVER['HTTP_HOST'] . '/'. $a;

use think\Request;
Request::instance()->module().'/'.Request::instance()->controller().'/'.Request::instance()->action();
获取当前的模块、控制器、方法(admin/User/edit);
《form》


《/from》
可以点击选中此表单所有的选项

ssh-keygen -t rsa -C “您的邮箱地址”
有些时候,需要在你生成的.ssh目录下,新建个config文件,然后里面写入user xxx

解决方法

首先,生成一个公钥密钥对:ssh-keygen -t rsa -C “youemail@example.com” -f ~/.ssh/id_rsa 此命令可创建 SSH 公钥密钥对,”youemail@example.com”为你自己的邮箱地址,”id_rsa”为公钥密钥名,可修改。 创建后的公钥密钥对存放在本地目录C:\Users[UserName].ssh\文件夹中,可以查看

将公钥部署上github,将(1)中生成的id_rsa.pub文件用文本编辑器打开,复制其中内容。在对应的github项目的“setting”中的“SSH and GPG keys”选择“new SSH key“,将公钥内容粘贴上去,新建一个SSH key。

在 git bash 命令行在添加私钥。查看私钥列表的命令为:ssh-add -l,如果输出以上命令出现Could not open a connection to your authentication agent.,则再输入ssh-agent bash,即可进入SSH bash。添加私钥的命令:ssh-add ~/.ssh/id_rsa,此时再查看私钥列表,若已经成功添加,则可以正常地使用 git push 进行对远程仓库的更新了。