百度地图 ijintui以及七牛、百度编辑器、kindeditor

时间:2022-08-11 02:30:36

密码是明文存储的

sig错误是因为params没拼接上md5后的秘钥,测试时候可以在 Api\Controller\CommonController\_initialize 方法里注释掉效验的代码

代码使用的是thinkphp,将ThinkPHP\Conf\convention.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 加上下面的代码:

  1. switch(strtoupper($type)) {
  2. case 'FCKEDITOR':
  3. //.......
  4. break;
  5. case 'FCKMINI':
  6. //.......
  7. break;
  8. case 'EWEBEDITOR':
  9. //.......
  10. break;
  11. case 'NETEASE':
  12. //.......
  13. break;
  14. case 'UBB':
  15. //.......
  16. break;
  17. case 'KINDEDITOR':
  18. //.......
  19. break;
  20. case 'UEDITOR':
  21. $parseStr   =  "\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.config.js"></script>'."\n".'<script type="text/javascript" charset="utf-8" src="__ROOT__/Public/UEditor/ueditor.all.js"></script>'."\n".'<script type="text/plain" id="'.$id.'" name="'.$name.'" style="'.$style.'">'.$content.'</script>'."\n".'<script type="text/javascript">var ue_'.$id.' = UE.getEditor("'.$id.'");</script>'."\n";
  22. break;
  23. //.......
复制代码

3、在需要用到编辑器的模板head内加上:

  1. <taglib name="html" />
复制代码

在用到编辑器的地方加上:

  1. <html:editor id="info" name="info" type="UEDITOR" >{$info.info}</html:editor>
复制代码

4、在百度编辑器目录的ueditor.config.js文件内修改:

  1. // 服务器统一请求接口路径
  2. , serverUrl: URL + "../../index.php/Home/Index/ueditup"
复制代码

5、就是你需要的用TP自带上传类处理上传了,在Home模块的Index控制器里加上下面的方法:

  1. public function ueditup(){
  2. header("Content-Type: text/html; charset=utf-8");
  3. $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
  4. //dump($editconfig);
  5. $action = I('get.action');
  6. //echo $action;
  7. switch ($action) {
  8. case 'config':
  9. $result =  json_encode($editconfig);
  10. break;
  11. /* 上传图片 */
  12. case 'uploadimage':
  13. $result = $this->editup('img');
  14. break;
  15. /* 上传涂鸦 */
  16. case 'uploadscrawl':
  17. $result = $this->editup('img');
  18. break;
  19. case 'uploadvideo':
  20. $result = $this->editup('video');
  21. break;
  22. case 'uploadfile':
  23. $result = $this->editup('file');
  24. //$result = include("action_upload.php");
  25. break;
  26. /* 列出图片 */
  27. case 'listimage':
  28. $result = $this->editlist('listimg');
  29. break;
  30. /* 列出文件 */
  31. case 'listfile':
  32. $result = $this->editlist('listfile');
  33. break;
  34. /* 抓取远程文件 */
  35. case 'catchimage':
  36. //$result = include("action_crawler.php");
  37. break;
  38. default:
  39. $result = json_encode(array(
  40. 'state'=> '请求地址出错'
  41. ));
  42. break;
  43. }
  44. /* 输出结果 */
  45. if (isset($_GET["callback"])) {
  46. if (preg_match("/^[\w_]+$/", $_GET["callback"])) {
  47. echo htmlspecialchars($_GET["callback"]) . '(' . $result . ')';
  48. } else {
  49. echo json_encode(array(
  50. 'state'=> 'callback参数不合法'
  51. ));
  52. }
  53. } else {
  54. echo $result;
  55. }
  56. }
  57. public function editup($uptype){
  58. if($this->islogin==false){
  59. $_re_data['state'] = '请登陆';
  60. return json_encode($_re_data);
  61. }
  62. $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
  63. switch ($uptype) {
  64. case 'img':
  65. $upload = new \Think\Upload();// 实例化上传类
  66. $upload->rootPath  =     '.';
  67. $upload->maxSize   =     $editconfig['imageMaxSize'];
  68. $upload->exts      =     explode('.', trim(join('',$editconfig['imageAllowFiles']),'.'));
  69. $upload->savePath  =     $editconfig['imagePathFormat'];
  70. $upload->saveName  =     time().rand(100000,999999);
  71. $info   =   $upload->uploadOne($_FILES[$editconfig['imageFieldName']]);
  72. break;
  73. case 'file':
  74. $upload = new \Think\Upload();// 实例化上传类
  75. $upload->rootPath  =     '.';
  76. $upload->maxSize   =     $editconfig['fileMaxSize'];
  77. $upload->exts      =     explode('.', trim(join('',$editconfig['fileAllowFiles']),'.'));
  78. $upload->savePath  =     $editconfig['filePathFormat'];
  79. $upload->saveName  =     time().rand(100000,999999);
  80. $info   =   $upload->uploadOne($_FILES[$editconfig['fileFieldName']]);
  81. break;
  82. case 'video':
  83. $upload = new \Think\Upload();// 实例化上传类
  84. $upload->rootPath  =     '.';
  85. $upload->maxSize   =     $editconfig['videoMaxSize'];
  86. $upload->exts      =     explode('.', trim(join('',$editconfig['videoAllowFiles']),'.'));
  87. $upload->savePath  =     $editconfig['videoPathFormat'];
  88. $upload->saveName  =     time().rand(100000,999999);
  89. $info   =   $upload->uploadOne($_FILES[$editconfig['videoFieldName']]);
  90. break;
  91. default:
  92. return false;
  93. break;
  94. }
  95. if(!$info) {// 上传错误提示错误信息
  96. $_re_data['state'] = $upload->getError();
  97. $_re_data['url'] = '';
  98. $_re_data['title'] = '';
  99. $_re_data['original'] = '';
  100. $_re_data['type'] = '';
  101. $_re_data['size'] = '';
  102. }else{// 上传成功 获取上传文件信息
  103. $_re_data['state'] = 'SUCCESS';
  104. $_re_data['url'] = $info['savepath'].$info['savename'];
  105. $_re_data['title'] = $info['savename'];
  106. $_re_data['original'] = $info['name'];
  107. $_re_data['type'] = '.'.$info['ext'];
  108. $_re_data['size'] = $info['size'];
  109. }
  110. return json_encode($_re_data);
  111. }
  112. public function editlist($listtype){
  113. $editconfig = json_decode(preg_replace("/\/\*[\s\S]+?\*\//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
  114. switch ($listtype) {
  115. case 'listimg':
  116. $allowFiles = $editconfig['imageManagerAllowFiles'];
  117. $listSize = $editconfig['imageManagerListSize'];
  118. $path = $editconfig['imageManagerListPath'];
  119. break;
  120. case 'listfile':
  121. $allowFiles = $editconfig['fileManagerAllowFiles'];
  122. $listSize = $editconfig['fileManagerListSize'];
  123. $path = $editconfig['fileManagerListPath'];
  124. break;
  125. default:
  126. return false;
  127. break;
  128. }
  129. /* 获取参数 */
  130. $size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize;
  131. $start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0;
  132. $end = $start + $size;
  133. /* 获取文件列表 */
  134. $path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "":"/") . $path;
  135. $files = $this->getfiles($path, $allowFiles);
  136. if (!count($files)) {
  137. return json_encode(array(
  138. "state" => "no match file",
  139. "list" => array(),
  140. "start" => $start,
  141. "total" => count($files)
  142. ));
  143. }
  144. /* 获取指定范围的列表 */
  145. $len = count($files);
  146. for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){
  147. $list[] = $files[$i];
  148. }
  149. //倒序
  150. //for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){
  151. //    $list[] = $files[$i];
  152. //}
  153. /* 返回数据 */
  154. $result = json_encode(array(
  155. "state" => "SUCCESS",
  156. "list" => $list,
  157. "start" => $start,
  158. "total" => count($files)
  159. ));
  160. return $result;
  161. }
  162. /**
  163. * 遍历获取目录下的指定类型的文件
  164. * @param $path
  165. * @param array $files
  166. * @return array
  167. */
  168. public function getfiles($path, $allowFiles, &$files = array())
  169. {
  170. if (!is_dir($path)) return null;
  171. if(substr($path, strlen($path) - 1) != '/') $path .= '/';
  172. $handle = opendir($path);
  173. while (false !== ($file = readdir($handle))) {
  174. if ($file != '.' && $file != '..') {
  175. $path2 = $path . $file;
  176. if (is_dir($path2)) {
  177. $this->getfiles($path2, $allowFiles, $files);
  178. } else {
  179. if(in_array('.'.pathinfo($file, PATHINFO_EXTENSION), $allowFiles)){
  180. $files[] = array(
  181. 'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])),
  182. 'mtime'=> filemtime($path2)
  183. );
  184. }
  185. }
  186. }
  187. }
  188. return $files;
  189. }
复制代码

记得把 ueditconfig.json这个文件放到配置文件目录下也就是Home/Conf/这个目录下
这个文件的内容如下:

  1. /* 前后端通信相关的配置,注释只允许使用多行方式 */
  2. {
  3. /* 上传图片配置项 */
  4. "imageActionName": "uploadimage", /* 执行上传图片的action名称 */
  5. "imageFieldName": "upfile", /* 提交的图片表单名称 */
  6. "imageMaxSize": 2048000, /* 上传大小限制,单位B */
  7. "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 上传图片格式显示 */
  8. "imageCompressEnable": true, /* 是否压缩图片,默认是true */
  9. "imageCompressBorder": 1600, /* 图片压缩最长边限制 */
  10. "imageInsertAlign": "none", /* 插入的图片浮动方式 */
  11. "imageUrlPrefix": "", /* 图片访问路径前缀 */
  12. /* "imagePathFormat": "/Uploads/editor/image/{time}{rand:6}", */
  13. "imagePathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  14. /* 涂鸦图片上传配置项 */
  15. "scrawlActionName": "uploadscrawl", /* 执行上传涂鸦的action名称 */
  16. "scrawlFieldName": "upfile", /* 提交的图片表单名称 */
  17. "scrawlPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  18. "scrawlMaxSize": 2048000, /* 上传大小限制,单位B */
  19. "scrawlUrlPrefix": "", /* 图片访问路径前缀 */
  20. "scrawlInsertAlign": "none",
  21. /* 截图工具上传 */
  22. "snapscreenActionName": "uploadimage", /* 执行上传截图的action名称 */
  23. "snapscreenPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  24. "snapscreenUrlPrefix": "", /* 图片访问路径前缀 */
  25. "snapscreenInsertAlign": "none", /* 插入的图片浮动方式 */
  26. /* 抓取远程图片配置 */
  27. "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
  28. "catcherActionName": "catchimage", /* 执行抓取远程图片的action名称 */
  29. "catcherFieldName": "source", /* 提交的图片列表表单名称 */
  30. "catcherPathFormat": "/Uploads/editor/image/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  31. "catcherUrlPrefix": "", /* 图片访问路径前缀 */
  32. "catcherMaxSize": 2048000, /* 上传大小限制,单位B */
  33. "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 抓取图片格式显示 */
  34. /* 上传视频配置 */
  35. "videoActionName": "uploadvideo", /* 执行上传视频的action名称 */
  36. "videoFieldName": "upfile", /* 提交的视频表单名称 */
  37. "videoPathFormat": "/Uploads/editor/video/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  38. "videoUrlPrefix": "", /* 视频访问路径前缀 */
  39. "videoMaxSize": 102400000, /* 上传大小限制,单位B,默认100MB */
  40. "videoAllowFiles": [
  41. ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
  42. ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], /* 上传视频格式显示 */
  43. /* 上传文件配置 */
  44. "fileActionName": "uploadfile", /* controller里,执行上传视频的action名称 */
  45. "fileFieldName": "upfile", /* 提交的文件表单名称 */
  46. "filePathFormat": "/Uploads/editor/file/", /* 上传保存路径,可以自定义保存路径和文件名格式 */
  47. "fileUrlPrefix": "", /* 文件访问路径前缀 */
  48. "fileMaxSize": 51200000, /* 上传大小限制,单位B,默认50MB */
  49. "fileAllowFiles": [
  50. ".png", ".jpg", ".jpeg", ".gif", ".bmp",
  51. ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
  52. ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
  53. ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
  54. ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
  55. ], /* 上传文件格式显示 */
  56. /* 列出指定目录下的图片 */
  57. "imageManagerActionName": "listimage", /* 执行图片管理的action名称 */
  58. "imageManagerListPath": "/Uploads/editor/image/", /* 指定要列出图片的目录 */
  59. "imageManagerListSize": 1000, /* 每次列出文件数量 */
  60. "imageManagerUrlPrefix": "", /* 图片访问路径前缀 */
  61. "imageManagerInsertAlign": "none", /* 插入的图片浮动方式 */
  62. "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], /* 列出的文件类型 */
  63. /* 列出指定目录下的文件 */
  64. "fileManagerActionName": "listfile", /* 执行文件管理的action名称 */
  65. "fileManagerListPath": "/Uploads/editor/file/", /* 指定要列出文件的目录 */
  66. "fileManagerUrlPrefix": "", /* 文件访问路径前缀 */
  67. "fileManagerListSize": 1000, /* 每次列出文件数量 */
  68. "fileManagerAllowFiles": [
  69. ".png", ".jpg", ".jpeg", ".gif", ".bmp",
  70. ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
  71. ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
  72. ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
  73. ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
  74. ] /* 列出的文件类型 */
  75. }
复制代码

差不多就这样了,这点点东西花了我大半天来集成

如果出现错误 后端配置项没有正常加载,上传插件不能正常使用! 请配置如下:

"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