2017年5月

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》
可以点击选中此表单所有的选项

如何防止表单重复提交
1、在点击submit按钮后将按钮的disabled=true,就可以防止重复点击提交按钮。也就是在JS代码中的myform.submit()前面加上一句: myform(‘submit’).disabled=true;选中这个submit的input,把它的disabled=true即可

2、给定标识符,在js中判断标识符来防止表单重复提交

但是前两种都不能防止页面刷新时或者提交后点击后退按钮造成的重复提交,这时候就得用session了(token验证);
在服务器端生成一个唯一的随机Token值(令牌),同时在当前用户的Session域中保存这个Token。然后将Token发送到客户端的Form表单中,在Form表单中使用隐藏域来存储这个Token,表单提交的时候连同这个Token一起提交到服务器端,然后在服务器端判断客户端提交上来的Token与服务器端生成的Token是否一致,如果不一致,那就是重复提交了,此时服务器端就可以不处理重复提交的表单。如果相同则处理表单提交,处理完后清除当前用户的Session域中存储的标识号。
其实在tp和laravel框架中可以很方便的使用,具体看官方文档

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 进行对远程仓库的更新了。