密码是明文存储的
sig错误是因为params没拼接上md5后的秘钥,测试时候可以在 ApiControllerCommonController\_initialize 方法里注释掉效验的代码
代码使用的是thinkphp,将ThinkPHPConfconvention.php
'URL_MODEL' => 2,
API接口:
提交方式为GET
http://api.map.baidu.com/direction/v1?mode=driving&origin=上地五街&destination=北京大学&origin_region=北京&destination_region=北京&output=json&ak=UlYjliwEjM637Wsr1GgZRsUSvPDvD20N
http://api.map.baidu.com/direction/v2/transit?origin=40.056878,116.30815&destination=31.222965,121.505821&ak=UlYjliwEjM637Wsr1GgZRsUSvPDvD20N
可去该网站http://coolaf.com/测试
Hpa7sMY1Wk8GpcBjnVsxW9DVsQeCaGGd ios ak key
1、分类数据库增加图片字段,分类功能增加编辑功能;对应第2个需求;2017年3月3日已完成
2、动态广告添加百度地图code; 对应第4个需求; 2017年3月2日已完成
3、添加地铁城市,包括地铁城市和图片;2017年3月3日已完成
4、增加城市地铁,各个线路;2017年3月3日已完成
查询线路:
http://api.map.baidu.com/direction/v1?mode=transit&origin=上地五街&destination=北京大学&origin_region=北京&destination_region=北京&output=json&ak=UlYjliwEjM637Wsr1GgZRsUSvPDvD20N
method为get
参数:
origin 起点名称或经纬度
destination 终点名称或经纬度
mode 包括:driving(驾车)、walking(步行)、transit(公交)、riding(骑行)}}
region 必填 北京 公交、步行导航时该参数必填。
origin_region 必填 北京 起始点所在城市,驾车导航时必填。
destination_region 必填 北京 终点所在城市,驾车导航时必填。
output 选填,默认为xml json 表示输出类型,可设置为xml或json,默认为xml。
http://api.map.baidu.com/line?region=北京&name=13地铁线&output=html&src=北京题加教育科技有限公司
region 城市名或县名 必选
name 线路名称 必选
output 表示输出类型,web上必须指定为html才能展现地图产品结果。 必选 手机客户端忽略此参数
zoom 展现地图的级别,默认为视觉最优级别。 可选
src appName。 必选 此参数不传值,不保证服务。
高德支持查询所有线路:
http://lbs.amap.com/api/subway-api/reference/
上传七牛,参考:
http://www.thinkphp.cn/code/1533.html
http://www.thinkphp.cn/topic/46397.html
添加模块之后需要添加权限,添加如下的SQL语句:
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("Student", "学生控制器", 1, 100, 1, 2);
插入的id为38
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("index", "学生列表", 1, 100, 38, 3);
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("add", "学生列表添加", 1, 100, 38, 3);
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("do_add", "学生列表请求添加", 1, 100, 38, 3);
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("edit", "学生列表编辑", 1, 100, 38, 3);
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("do_edit", "学生列表编辑请求", 1, 100, 38, 3);
INSERT INTO think_node (name, title, status, sort, pid, level) VALUES ("dodelete", "学生列表编辑请求", 1, 100, 38, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 38, 2);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 39, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 40, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 41, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 42, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 43, 3);
INSERT INTO think_access (role_id, node_id, level) VALUES (3, 44, 3);
thinkphp导出excel:
http://www.thinkphp.cn/code/403.html
百度编辑器添加,参考这篇文章
http://www.thinkphp.cn/topic/32633.html
1、把百度编辑器放到项目的Public目录下 命名为:UEditor
2、在ThinkPHP/Library/Think/Template/Taglib 目录下编辑 Html.class.php 加上下面的代码:
- switch(strtoupper($type)) {
- case 'FCKEDITOR':
- //.......
- break;
- case 'FCKMINI':
- //.......
- break;
- case 'EWEBEDITOR':
- //.......
- break;
- case 'NETEASE':
- //.......
- break;
- case 'UBB':
- //.......
- break;
- case 'KINDEDITOR':
- //.......
- break;
- case 'UEDITOR':
- $parseStr = " ".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.config.js"></script>'." ".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.all.js"></script>'." ".'<script type="text/plain" id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</script>'." ".'<script type="text/javascript">var ue_'.$id.' = UE.getEditor("'.$id.'");</script>'." ";
- break;
- //.......
3、在需要用到编辑器的模板head内加上:
- <taglib name="html" />
在用到编辑器的地方加上:
- <html:editor id="info" name="info" type="UEDITOR" >{$info.info}</html:editor>
4、在百度编辑器目录的ueditor.config.js文件内修改:
- // 服务器统一请求接口路径
- , serverUrl: URL + "../../index.php/Home/Index/ueditup"
5、就是你需要的用TP自带上传类处理上传了,在Home模块的Index控制器里加上下面的方法:
- public function ueditup(){
- header("Content-Type: text/html; charset=utf-8");
- $editconfig = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
- //dump($editconfig);
- $action = I('get.action');
- //echo $action;
- switch ($action) {
- case 'config':
- $result = json_encode($editconfig);
- break;
-
- /* 上传图片 */
- case 'uploadimage':
- $result = $this->editup('img');
- break;
- /* 上传涂鸦 */
- case 'uploadscrawl':
- $result = $this->editup('img');
- break;
- case 'uploadvideo':
- $result = $this->editup('video');
- break;
- case 'uploadfile':
- $result = $this->editup('file');
- //$result = include("action_upload.php");
- break;
-
- /* 列出图片 */
- case 'listimage':
- $result = $this->editlist('listimg');
- break;
- /* 列出文件 */
- case 'listfile':
- $result = $this->editlist('listfile');
- break;
-
- /* 抓取远程文件 */
- case 'catchimage':
- //$result = include("action_crawler.php");
- break;
-
- default:
- $result = json_encode(array(
- 'state'=> '请求地址出错'
- ));
- break;
- }
-
- /* 输出结果 */
- if (isset($_GET["callback"])) {
- if (preg_match("/^[w_]+$/", $_GET["callback"])) {
- echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
- } else {
- echo json_encode(array(
- 'state'=> 'callback参数不合法'
- ));
- }
- } else {
- echo $result;
- }
- }
-
-
- public function editup($uptype){
- if($this->islogin==false){
- $_re_data['state'] = '请登陆';
- return json_encode($_re_data);
- }
- $editconfig = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
- switch ($uptype) {
- case 'img':
- $upload = new ThinkUpload();// 实例化上传类
- $upload->rootPath = '.';
- $upload->maxSize = $editconfig['imageMaxSize'];
- $upload->exts = explode('.', trim(join('',$editconfig['imageAllowFiles']),'.'));
- $upload->savePath = $editconfig['imagePathFormat'];
- $upload->saveName = time().rand(100000,999999);
- $info = $upload->uploadOne($_FILES[$editconfig['imageFieldName']]);
- break;
- case 'file':
- $upload = new ThinkUpload();// 实例化上传类
- $upload->rootPath = '.';
- $upload->maxSize = $editconfig['fileMaxSize'];
- $upload->exts = explode('.', trim(join('',$editconfig['fileAllowFiles']),'.'));
- $upload->savePath = $editconfig['filePathFormat'];
- $upload->saveName = time().rand(100000,999999);
- $info = $upload->uploadOne($_FILES[$editconfig['fileFieldName']]);
- break;
- case 'video':
- $upload = new ThinkUpload();// 实例化上传类
- $upload->rootPath = '.';
- $upload->maxSize = $editconfig['videoMaxSize'];
- $upload->exts = explode('.', trim(join('',$editconfig['videoAllowFiles']),'.'));
- $upload->savePath = $editconfig['videoPathFormat'];
- $upload->saveName = time().rand(100000,999999);
- $info = $upload->uploadOne($_FILES[$editconfig['videoFieldName']]);
- break;
- default:
- return false;
- break;
- }
-
- if(!$info) {// 上传错误提示错误信息
- $_re_data['state'] = $upload->getError();
- $_re_data['url'] = '';
- $_re_data['title'] = '';
- $_re_data['original'] = '';
- $_re_data['type'] = '';
- $_re_data['size'] = '';
- }else{// 上传成功 获取上传文件信息
- $_re_data['state'] = 'SUCCESS';
- $_re_data['url'] = $info['savepath'].$info['savename'];
- $_re_data['title'] = $info['savename'];
- $_re_data['original'] = $info['name'];
- $_re_data['type'] = '.'.$info['ext'];
- $_re_data['size'] = $info['size'];
- }
-
- return json_encode($_re_data);
-
- }
-
- public function editlist($listtype){
- $editconfig = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
- switch ($listtype) {
- case 'listimg':
- $allowFiles = $editconfig['imageManagerAllowFiles'];
- $listSize = $editconfig['imageManagerListSize'];
- $path = $editconfig['imageManagerListPath'];
- break;
- case 'listfile':
- $allowFiles = $editconfig['fileManagerAllowFiles'];
- $listSize = $editconfig['fileManagerListSize'];
- $path = $editconfig['fileManagerListPath'];
- break;
- default:
- return false;
- break;
- }
- /* 获取参数 */
- $size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize;
- $start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0;
- $end = $start + $size;
-
- /* 获取文件列表 */
- $path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "":"/") . $path;
-
- $files = $this->getfiles($path, $allowFiles);
-
- if (!count($files)) {
- return json_encode(array(
- "state" => "no match file",
- "list" => array(),
- "start" => $start,
- "total" => count($files)
- ));
- }
-
- /* 获取指定范围的列表 */
- $len = count($files);
- for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){
- $list[] = $files[$i];
- }
- //倒序
- //for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){
- // $list[] = $files[$i];
- //}
-
- /* 返回数据 */
- $result = json_encode(array(
- "state" => "SUCCESS",
- "list" => $list,
- "start" => $start,
- "total" => count($files)
- ));
-
- return $result;
-
- }
- /**
- * 遍历获取目录下的指定类型的文件
- * @param $path
- * @param array $files
- * @return array
- */
- public function getfiles($path, $allowFiles, &$files = array())
- {
- if (!is_dir($path)) return null;
-
- if(substr($path, strlen($path) - 1) != '/') $path .= '/';
- $handle = opendir($path);
-
- while (false !== ($file = readdir($handle))) {
- if ($file != '.' && $file != '..') {
- $path2 = $path . $file;
- if (is_dir($path2)) {
- $this->getfiles($path2, $allowFiles, $files);
- } else {
- if(in_array('.'.pathinfo($file, PATHINFO_EXTENSION), $allowFiles)){
-
- $files[] = array(
- 'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])),
- 'mtime'=> filemtime($path2)
- );
- }
- }
- }
- }
- return $files;
- }
记得把 ueditconfig.json这个文件放到配置文件目录下也就是Home/Conf/这个目录下
这个文件的内容如下:
- /* 前后端通信相关的配置,注释只允许使用多行方式 */
- {
- /* 上传图片配置项 */
- "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
- "imageFieldName": "upfile", /* 提交的图片表单名称 */
- "imageMaxSize": 2048000, /* 上传大小限制,单位B */
- "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
- "imageCompressEnable": true, /* 是否压缩图片,默认是true */
- "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
- "imageInsertAlign": "none", /* 插入的图片浮动方式 */
- "imageUrlPrefix": "", /* 图片访问路径前缀 */
- /* "imagePathFormat": "/Uploads/editor/image/{time}{rand:6}", */
- "imagePathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
-
- /* 涂鸦图片上传配置项 */
- "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
- "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
- "scrawlPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
- "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
- "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
- "scrawlInsertAlign": "none",
-
- /* 截图工具上传 */
- "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
- "snapscreenPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
- "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
- "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
-
- /* 抓取远程图片配置 */
- "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
- "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
- "catcherFieldName": "source", /* 提交的图片列表表单名称 */
- "catcherPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
- "catcherUrlPrefix": "", /* 图片访问路径前缀 */
- "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
- "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
-
- /* 上传视频配置 */
- "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
- "videoFieldName": "upfile", /* 提交的视频表单名称 */
- "videoPathFormat": "/Uploads/editor/video/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
- "videoUrlPrefix": "", /* 视频访问路径前缀 */
- "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
- "videoAllowFiles": [
- ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
- ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
-
- /* 上传文件配置 */
- "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
- "fileFieldName": "upfile", /* 提交的文件表单名称 */
- "filePathFormat": "/Uploads/editor/file/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
- "fileUrlPrefix": "", /* 文件访问路径前缀 */
- "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
- "fileAllowFiles": [
- ".png", ".jpg", ".jpeg", ".gif", ".bmp",
- ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
- ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
- ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
- ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
- ], /* 上传文件格式显示 */
-
- /* 列出指定目录下的图片 */
- "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
- "imageManagerListPath": "/Uploads/editor/image/", /* 指定要列出图片的目录 */
- "imageManagerListSize": 1000, /* 每次列出文件数量 */
- "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
- "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
- "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
-
- /* 列出指定目录下的文件 */
- "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
- "fileManagerListPath": "/Uploads/editor/file/", /* 指定要列出文件的目录 */
- "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
- "fileManagerListSize": 1000, /* 每次列出文件数量 */
- "fileManagerAllowFiles": [
- ".png", ".jpg", ".jpeg", ".gif", ".bmp",
- ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
- ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
- ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
- ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
- ] /* 列出的文件类型 */
-
- }
差不多就这样了,这点点东西花了我大半天来集成
如果出现错误 后端配置项没有正常加载,上传插件不能正常使用! 请配置如下:
"imageUrlPrefix": "http://localhost:8080/xxxx", /* 图片访问路径前缀 */
kindeditor编辑器
http://www.thinkphp.cn/topic/34153.html
已经完成的功能 2017年3月10日:
已经完成功能:
1、分类数据库增加图片字段,分类功能增加编辑功能;
2、动态广告添加百度地图code;
3、添加城市管理模型,可以添加、修改、删除城市,并上传城市图片.图片上传直接上传到七牛,;
4、添加地铁模型,在此模型中可以选择对应的城市并增删改地铁名称、图片、描述.图片上传直接上传到七牛,;
5、增加了订阅分类模型,管理员自定义需要订阅的分类;
6、增加了订阅文章模型,分类对应订阅分类,在此模型中增加了kindeditor编辑器,配置了图片上传功能,使得图片上传直接上传到七牛,减少服务器的存储,直接图片的加载速度.
配置文件:vim /etc/apache2/sites-available/default