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


    密码是明文存储的

    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 加上下面的代码:

    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   =  " ".'<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>'." ";
    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("//*[sS]+?*//", "", 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.     }


    58.     public function editup($uptype){
    59.         if($this->islogin==false){
    60.             $_re_data['state'] = '请登陆';
    61.             return json_encode($_re_data);
    62.         }
    63.         $editconfig = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
    64.         switch ($uptype) {
    65.             case 'img':
    66.                 $upload = new ThinkUpload();// 实例化上传类
    67.                 $upload->rootPath  =     '.';
    68.                 $upload->maxSize   =     $editconfig['imageMaxSize'];
    69.                 $upload->exts      =     explode('.', trim(join('',$editconfig['imageAllowFiles']),'.'));
    70.                 $upload->savePath  =     $editconfig['imagePathFormat'];
    71.                 $upload->saveName  =     time().rand(100000,999999);
    72.                 $info   =   $upload->uploadOne($_FILES[$editconfig['imageFieldName']]);
    73.                 break;
    74.             case 'file':
    75.                 $upload = new ThinkUpload();// 实例化上传类
    76.                 $upload->rootPath  =     '.';
    77.                 $upload->maxSize   =     $editconfig['fileMaxSize'];
    78.                 $upload->exts      =     explode('.', trim(join('',$editconfig['fileAllowFiles']),'.'));
    79.                 $upload->savePath  =     $editconfig['filePathFormat'];
    80.                 $upload->saveName  =     time().rand(100000,999999);
    81.                 $info   =   $upload->uploadOne($_FILES[$editconfig['fileFieldName']]);
    82.                 break;
    83.             case 'video':
    84.                 $upload = new ThinkUpload();// 实例化上传类
    85.                 $upload->rootPath  =     '.';
    86.                 $upload->maxSize   =     $editconfig['videoMaxSize'];
    87.                 $upload->exts      =     explode('.', trim(join('',$editconfig['videoAllowFiles']),'.'));
    88.                 $upload->savePath  =     $editconfig['videoPathFormat'];
    89.                 $upload->saveName  =     time().rand(100000,999999);
    90.                 $info   =   $upload->uploadOne($_FILES[$editconfig['videoFieldName']]);
    91.                 break;
    92.             default:
    93.                 return false;
    94.                 break;
    95.         }

    96.         if(!$info) {// 上传错误提示错误信息
    97.             $_re_data['state'] = $upload->getError();
    98.             $_re_data['url'] = '';
    99.             $_re_data['title'] = '';
    100.             $_re_data['original'] = '';
    101.             $_re_data['type'] = '';
    102.             $_re_data['size'] = '';
    103.         }else{// 上传成功 获取上传文件信息
    104.             $_re_data['state'] = 'SUCCESS';
    105.             $_re_data['url'] = $info['savepath'].$info['savename'];
    106.             $_re_data['title'] = $info['savename'];
    107.             $_re_data['original'] = $info['name'];
    108.             $_re_data['type'] = '.'.$info['ext'];
    109.             $_re_data['size'] = $info['size'];
    110.         }

    111.         return json_encode($_re_data);

    112.     }

    113.     public function editlist($listtype){
    114.         $editconfig = json_decode(preg_replace("//*[sS]+?*//", "", file_get_contents(COMMON_PATH."Conf/ueditconfig.json")), true);
    115.         switch ($listtype) {
    116.             case 'listimg':
    117.                 $allowFiles = $editconfig['imageManagerAllowFiles'];
    118.                 $listSize = $editconfig['imageManagerListSize'];
    119.                 $path = $editconfig['imageManagerListPath'];
    120.                 break;
    121.             
    122.             case 'listfile':
    123.                 $allowFiles = $editconfig['fileManagerAllowFiles'];
    124.                 $listSize = $editconfig['fileManagerListSize'];
    125.                 $path = $editconfig['fileManagerListPath'];
    126.                 break;
    127.             
    128.             default:
    129.                 return false;
    130.                 break;
    131.         }
    132.         /* 获取参数 */
    133.         $size = isset($_GET['size']) ? htmlspecialchars($_GET['size']) : $listSize;
    134.         $start = isset($_GET['start']) ? htmlspecialchars($_GET['start']) : 0;
    135.         $end = $start + $size;

    136.         /* 获取文件列表 */
    137.         $path = $_SERVER['DOCUMENT_ROOT'] . (substr($path, 0, 1) == "/" ? "":"/") . $path;

    138.         $files = $this->getfiles($path, $allowFiles);

    139.         if (!count($files)) {
    140.             return json_encode(array(
    141.                 "state" => "no match file",
    142.                 "list" => array(),
    143.                 "start" => $start,
    144.                 "total" => count($files)
    145.             ));
    146.         }

    147.         /* 获取指定范围的列表 */
    148.         $len = count($files);
    149.         for ($i = min($end, $len) - 1, $list = array(); $i < $len && $i >= 0 && $i >= $start; $i--){
    150.             $list[] = $files[$i];
    151.         }
    152.         //倒序
    153.         //for ($i = $end, $list = array(); $i < $len && $i < $end; $i++){
    154.         //    $list[] = $files[$i];
    155.         //}

    156.         /* 返回数据 */
    157.         $result = json_encode(array(
    158.             "state" => "SUCCESS",
    159.             "list" => $list,
    160.             "start" => $start,
    161.             "total" => count($files)
    162.         ));

    163.         return $result;

    164.     }
    165.     /**
    166.      * 遍历获取目录下的指定类型的文件
    167.      * @param $path
    168.      * @param array $files
    169.      * @return array
    170.      */
    171.     public function getfiles($path, $allowFiles, &$files = array())
    172.     {
    173.         if (!is_dir($path)) return null;

    174.         if(substr($path, strlen($path) - 1) != '/') $path .= '/';
    175.         $handle = opendir($path);

    176.         while (false !== ($file = readdir($handle))) {
    177.             if ($file != '.' && $file != '..') {
    178.                 $path2 = $path . $file;
    179.                 if (is_dir($path2)) {
    180.                     $this->getfiles($path2, $allowFiles, $files);
    181.                 } else {
    182.                     if(in_array('.'.pathinfo($file, PATHINFO_EXTENSION), $allowFiles)){

    183.                         $files[] = array(
    184.                             'url'=> substr($path2, strlen($_SERVER['DOCUMENT_ROOT'])),
    185.                             'mtime'=> filemtime($path2)
    186.                         );
    187.                     }
    188.                 }
    189.             }
    190.         }
    191.         return $files;
    192.     }
    复制代码

    记得把 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

  • 相关阅读:
    CF | Alyona and Mex
    ACM | HDU|6227_Rabbit
    计蒜客 | 拓扑排序 | 虎威山上的分配
    ACM Secrete Master Plan
    map————两个数组的交集(2)
    set 集合————两个数组的交集
    哈希表、数组————有效的字母异位词
    贪心算法,双指针————分发饼干
    堆————数据流的第k个大的元素
    容器————priority_queue
  • 原文地址:https://www.cnblogs.com/zl0372/p/baidu_map2.html
Copyright © 2020-2023  润新知