💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
[TOC] #1.1 sp_文章及模板 ## sp_content_page() > X1.0新增 ```php sp_content_page($content,$pagetpl') ``` 功能: 对文本内容进行分页处理,返回当前页的内容,和分页html。 参数: `$content`:要处理的文本内容;里面含有百度编辑器的分页标记; `$pagetpl`:分页模板;默认值{first}{prev}{list}{next}{last} 返回: 类型数组 ```php array( "content"=>"",//当前页内容 "page"=>""产生的分页html ); ``` ## sp_getcontent_imgs() 示例: ```php <?php $content='html格式内容'; $imgs=sp_getcontent_imgs($content); //获取内容中图片信息 print_r($imginfo); ?> ``` 返回字段说明: `title`:图片的title属性 `alt`:图片的alt属性 `src`:图片的资源路径 ## sp_get_theme_path() > X1.1新增 ```php sp_get_theme_path() ``` 功能: 获取当前模板的地址 参数: 无 返回: 类型string 当前模板的地址,如当前模板是`simplebootx`,则返回`/tpl/simplebootx/` #1.2 sp_菜单 ## sp_get_menu() 模板中用法: ```html <php> $effected_id="menu-header"; $filetpl="<a href='\$href' target='\$target'>\$label</a>"; $foldertpl="<a class='dropdown-toggle' href='\$href' target='\$target'>\$label</a>"; $ul_class="dropdown-menu" ;/*内部ul标签的class属性值*/ $li_class="" ;/*内部li标签的class属性值*/ $style="nav";/*最外层ul标签的class属性值*/ $showlevel=6;/*显示的层级*/ $dropdown='dropdown';/*含有子目录的li标签的class属性值*/ </php> {:sp_get_menu("main",$effected_id,$filetpl,$foldertpl,$ul_class,$li_class,$style,$showlevel,$dropdown)} ``` ```html <!--生成的代码如下:--> <ul class="nav"> <li class="active" id="menu-item-1"><a href="/" target="">首页</a></li> <li class="" id="menu-item-11"><a href="" target="">产品与服务</a></li> <li class="dropdown" id="menu-item-12"> <a class="dropdown-toggle" href="" target="">企业新闻</a> <ul class="dropdown-menu"> <li class="" id="menu-item-11"> <a href="" target="">产品与服务</a> </li> </ul> </li> </ul> ``` ## sp_get_relative_url() > X1.0新增 ```php sp_get_relative_url($url) ``` 功能: 获取域名后的地址,如 http://dakaifa.net/news.html ,转化后为/news.html 参数: `$url`:要转化的url 返回: 类型string; 域名后的地址,如 http://dakaifa.net/news.html,转化后为/news.html #1.3 sp_文件图片缓存 ## sp_asset_relative_url() > V1.1.1新增 ```php <?php $file='/data/upload/1.png';//文件路径 $path=sp_get_asset_upload_path($file);//转化 echo $path;//输出数据库保存的文件路径(都是相对于data/upload文件夹的),结果为1.png ``` ## sp_clear_cache() ```php <?php sp_clear_cache();//无返回值 ?> ``` ## sp_file_write() > V1.1.1新增 ```php <?php $file='./data/upload/1.png'; $content=""; $path=sp_file_write($file,$content);// echo $path;//输出 ?> ``` ## sp_get_asset_upload_path 暂无 #1.4 sp_评论 ## sp_get_comments() > X1.2新增 ```php sp_get_comments($tag,$where); ``` 功能: 获取评论; 参数: `$tag`:查询标签,默认:field:\*;limit:0,5;order:createtime desc; `$where`:查询where数组,按照thinkphp where array格式; 返回: 数组,评论 ## Comments() > V1.1.1新增 模板中使用 ```php {:Comments("posts",$object_id)} <!-- 评论文章表里的某个ID为$object_id的文章--> ``` #1.5 sp_用户密码 ## sp_check_user_action() > X1.1新增 ```php sp_check_user_action($object,$count_limit,$ip_limit,$expire) ``` **功能: ** 检查用户对某个url,内容的可访问性,用于记录如是否赞过,是否访问过等等;开发者可以自由控制,对于没有必要做的检查可以不做,以减少服务器压力 **参数说明:** `$object`: 访问对象的id,格式:不带前缀的表名+id;如posts1表示xx_posts表里id为1的记录;如果object为空,表示只检查对某个url访问的合法性 `$count_limit`: 访问次数限制,如1,表示只能访问一次 `$ip_limit`: ip限制,false为不限制,true为限制 `$expire`: 距离上次访问的最小时间单位s,0表示不限制,大于0表示最后访问$expire秒后才可以访问 返回: `true`可访问,`false`不可访问 ##sp_get_current_admin_id() > X1.4.0新增 ```php sp_get_current_admin_id() ``` 功能: 获取当前登录管理员id,同get_current_admin_id() 参数: 无 返回: 类型int ## sp_get_current_user() ```php sp_get_current_user() ``` 功能: 获取当前登录的用户,包括users表里详细信息; 参数: 无 返回: 数组,用户包括users表里详细信息 ## sp_get_current_userid() ```php sp_get_current_userid() ``` 功能: 获取当前登录的用户id 参数: 无 返回: int,当前登录的用户id,如果未登录返回0 ## sp_get_users() > X1.2新增 ```php sp_get_users($tag,$where) ``` 功能: 获取符合条件的用户; 参数: `$tag`:查询标签,默认:field:\*;limit:0,8;order:create_time desc; `$where`:查询where数组,按照thinkphp where array格式; 返回: 数组,符合条件的用户 ## sp_is_user_login() X1.0新增 sp_is_user_login() 功能: 判断用户是否已经登录 参数: 无 返回: 类型布尔 true/false ## sp_password() ```php <?php $pw='simplewind'; $afpw=sp_password($pw);//加密字符串 echo $afpw;//输出加密后的字符串 ?> ``` ##sp_update_current_user() > X1.0新增 ```php sp_update_current_user($user) ``` 功能: 更新session里当前登录用户的信息 参数: `$user`:当前登录用户的最新信息 返回: 无 #1.6 sp_用户收藏 ## sp_get_favorite_key() > X1.0新增 ```php sp_get_favorite_key($table,$object_id) ``` 功能: 用于生成收藏内容用的安全key,收藏时必用 参数: `$table`:收藏内容所在表,不带表前缀 `$object_id`:收藏内容的id 返回: 类型string,收藏内容用的安全key #1.7 sp_幻灯管理 ## sp_getslide() 示例: ```php <?php> $slides=sp_getslide('top_slide'); //top_slide是你在后台创建的幻灯片标识 print_r($slides); //打印出获取的结果 ?> ``` 模板中用法: ```html <php> $slides=sp_getslide('top_slide'); print_r($slides); </php> <foreach name="slides" item="vo"> <!--{$vo.slide_id}幻灯片id--> <!--{$vo.slide_cid}幻灯片分类id,对应于slide_cat表里的cid--> <!--{$vo.slide_name}幻灯片名称--> <!--{$vo.slide_pic}幻灯片图片路径相对于upload文件夹/data/upload/--> <!--{$vo.slide_url}幻灯片链接地址--> <!--{$vo.slide_des}幻灯片描述--> <!--{$vo.slide_content}幻灯片内容--> <a href="{$vo.slide_url}" target="_blank" title="{$vo.slide_content}"> <img src="/data/upload/{$vo.slide_pic}"/> </a> </foreach> ``` #1.8 sp_广告管理 ## sp_getad() 示例: ```php <?php $ad_name='top_ad'; $ad_content=sp_getad('top_ad'); //获取广告内容 echo $ad_content; ``` 模板中用法: ```html <div> {:sp_getad('top_ad')} <!--top_ad是后台设置的广告名称--> </div> ``` #1.9 sp_友情链接管理 ## sp_getlinks() 示例: ```php <?php $links=sp_getlinks(); /*获取友情链接*/ print_r($links); /*打印出获取的结果*/ ``` 模板中用法: ```html <php> $links=sp_getlinks(); </php> <foreach name="links" item="vo"> {$vo.link_name} <!--链接名称--> {$vo.link_url} <!--链接地址--> {$vo.link_target} <!--打开方式--> {$vo.link_description} <!--描述--> /*常见用法*/ <a href="{$vo.link_url}" target="{$vo.link_target}"> {$vo.link_name} </a> </foreach> ``` #1.10 sp_钩子插件 ## hook() > X1.4.0新增 ```php hook($hook,$param) ``` 功能: 在模板里添加钩子 参数: `$hook`:钩子名称 `$param`:传入参数,默认为空数组 返回: 无 模板使用: ```php {:hook('footer')} {:hook('sider',array('text'=>'hello ThinkCMF')} ``` ## sp_get_plugin_config() > X1.4.0新增 ```php sp_get_plugin_config($name) ``` 功能: 获取插件的配置 参数: `$name`:插件名 返回: 类型数组,发送状态和信息 ## sp_plugin_url() > X1.4.0新增 ```php sp_plugin_url($url,$param,$domain) ``` 功能: 生成访问插件的url 参数: `$url`: url 格式:插件名://控制器名/方法 `$param`:额外参数,默认为空数组 `$domain`:是否添加域名,默认false 返回: 类型url 模板使用: ```php {:sp_plugin_url('Demo://Index/index',array('id'=>2),true)} {:sp_plugin_url('Demo://List/index',array('id'=>2))} ``` #1.11 sp_邮件 ## sp_send_email() > X1.0新增 ```php sp_send_email($address,$subject,$message) ``` 功能: 发送邮件 参数: `$address`:收件人地址 `$subject`:邮件主题 `$message`:邮件内容 返回: 类型数组,发送状态和信息 ```php array( "error"=>"1",//有错误 "message"=>""错误信息 ); array( "error"=>"0",//成功发送,无错误 ); ``` #1.12 sp_系统安全加密验证码 ## leuu()/UU() UU和leuu是ThinkCMF X1.2增加有url美化方法,两个用法完全一样,UU就是leuu的别名; 用法和U方法一样;对于需要美化的url要用到这个方法; leuu方法的定义规则如下(方括号内参数根据实际应用决定): ```php leuu('地址表达式',['参数'],['伪静态后缀'],['显示域名']) ``` 地址表达式的格式定义如下: ```php [应用/控制器/操作#锚点@域名]?参数1=值1&参数2=值2... leuu('portal/list/index',array('id'=>1)) ``` leuu方法要配置后台设置的url规则才能完成url的美化;如果没有相应规则,则和U方法生成的url一样; url的美化规则写法: 进入ThinkCMF后台 后台 设置->网站信息->URL美化 原始网址规则:应用名(小写)/控制器名/操作名?参数 如:portal/list/index?id=1 显示网址:英文字母加数字,不带后缀; 列出常用的优化方案: ``` portal/list/index?id=1 news http://demo.thinkcmf.com/news.html portal/list/index?id=2 discovery http://demo.thinkcmf.com/discovery.html portal/page/index?id=2 contacts http://demo.thinkcmf.com/contacts.html portal/page/index?id=14 about http://demo.thinkcmf.com/about.html portal/article/index article/:id\d http://demo.thinkcmf.com/article/1.html portal/list/index list/:id\d http://demo.thinkcmf.com/list/1.html ``` ![](image/57a977b1af477.png) ## sp_get_cmf_settings() > X1.2新增 ```php sp_get_cmf_settings($key); ``` 功能: 获取cmf的设置;如果key为空则返回所有设置,如果key不为空,则返回相应key的设置 参数: `$key`:默认为空,设置的key 返回: 如果key为空则返回所有设置,如果key不为空,则返回相应key的设置 ## sp_auth_check() > X1.5.0新增 ```php sp_auth_check($uid,$name=null,$relation='or') ``` 功能: 检查权限 参数: `$uid`: 当前登录用户或者管理员的id `$name`:需要验证的规则列表,支持逗号分隔的权限规则或索引数组,默认为当前url `$relation`:如果为 'or' 表示满足任一条规则即通过验证;如果为 'and'则表示需满足所有规则才能通过验证 返回: 类型boolean 通过验证返回true;失败返回false 使用: ```php sp_auth_check(2); sp_auth_check(2,'admin/ad/index'); sp_auth_check(2,array('admin/ad/index')); sp_auth_check(2,'admin/ad/index,admin/ad/add','and'); ``` ## sp_authcode() > V1.1.1新增 ```php <?php $string='1324123i412qewrwerqwe'; $string=sp_authcode($string);//解密字符串 echo $string;//输出解密后的字符串 ?> ``` ## sp_authencode() > V1.1.1新增 ```php <?php $string='666666'; $string=sp_authencode($string);//加密字符串 echo $string;//输出加密后的字符串 ?> ``` ## sp_get_host() > X1.0新增 ```php sp_get_host() ``` 功能: 返回带协议的域名 参数: 无 返回: 类型string 带协议的域名,如 http://www.baidu.com ## sp_check_verify_code() > X1.6.0新增 ```php sp_check_verify_code() ``` 功能: 验证码检查,验证完后销毁验证码增加安全性 参数: 无 返回: 类型boolean true|false; 使用: ```php <?php if(!sp_check_verify_code()){ echo '验证码不正确'; } ``` > 注:表单提交时验证码name为verify;支持POST和GET方法 ## sp_verifycode_img() 示例: ```php <?php $img=sp_verifycode_img();//不传入参数,全部使用默认值 echo $img; $img=sp_verifycode_img('code_len=4&font_size=20&width=238','title="点击获取"'); //传入参数 echo $img; ?> ``` ```html {:sp_verifycode_img()} 参数1: $style ='code_len=4&font_size=15&width=100&height=35&charset=1234567890'; code_len 字符长度 font_size 字体大小 width 生成图片宽度 heigh 生成图片高度 charset 要显示的字符集 ``` > 注:此函数仅生成img标签,应该配合在表单加入name=verify的input标签 #1.13 sp_面包屑函数 ## sp_get_path_list >面包屑-列表页及文章页路径 ``` //面包屑-列表页及文章页路径 function sp_get_path_list($cid, $title=""){ $term = sp_get_term($cid); $html="<ul class=\"breadcrumb\" style=\"background:none;\"> <li>你所在的位置:<a href=\"__ROOT__\">首页</a> </li>"; $parent = sp_get_term($term['parent']); if($parent){ $url=UU('portal/list/index',array(id=>$term['parent'])); $html.="<li><a href=\"$url\">${parent['name']}</a> </li>"; } if(empty($title)){ $html.="<li class=\"active\">${term['name']}</li></ul>"; }else{ $url=UU('portal/list/index',array(id=>$cid)); $html.="<li><a href=\"$url\">${term['name']}</a></li>"; $html.="<li class=\"active\">$title</li></ul>"; } echo $html; } ``` **用法:** 1、列表页中{:sp_get_path_list($cat_id)} 2、文章页中{:sp_get_path_list($term['term_id'], $post_title)} **模板快速使用方法:** 在模板中输入 `tcpos` 会智能提示 1、在列表页中输入 `tcpos_list` 2、在内容页中输入 `tcpos_tcpos_article` ![](image/57c91ab399bc1.png) ## sp_get_path_page >面包屑-列表页及文章页路径 ``` //面包屑-单页面路径 function sp_get_path_page($id){ $page=sp_sql_page($id); $html="<ul class=\"breadcrumb\" style=\"background:none;\"> <li>你所在的位置:<a href=\"__ROOT__\">首页</a></li>"; if($page){ $title = $page['post_title']; $html.="<li class=\"active\">$title</li>"; } $html.="</ul>"; echo $html; } ``` **用法:** 在单页面中 {:sp_get_path_page($id)} **模板快速使用方法:** 在单页中输入 `tcpost_page`,如图所示: ![](image/57c91b6ab8d2a.png) **实现结果如图所示:** ![](image/57c91b9c397f0.png) #1.11 sp_其他 ## sp_set_dynamic_config() > V1.1.1新增 ```php <?php $data=array("URL_HTML_SUFFIX"=>".html"); $result=sp_set_dynamic_config($data); ?> ``` ## sp_random_string() ```php <?php $random=sp_random_string();//不指定位数,默认为6位 echo $random; //或者 $random=sp_random_string(8);//指定返回8位随机字符串 echo $random; ?> ``` ## sp_is_mobile() > 1.4.0新增 ```php sp_is_mobile() ``` 功能: 判断是不是手机 参数: 无 返回: 类型boolean true/false ## sp_param_lable() ```php <?php $result=sp_param_lable('id:2;cat:home'); print_r($result); ?> ``` ## sp_is_sae() > X1.5.0新增 ```php sp_is_sae() ``` 功能: 判断是否为SAE 参数: 无 返回: 类型boolean true|false 使用: ```php $is_sae=sp_is_sae(); ``` # 2.1 sp_门户 ## sp_get_child_terms() ```php sp_get_child_terms($term_id) ``` 功能: 返回指定分类下的子分类 参数: `$term_id`:分类id 返回: 类型数组,指定分类下的子分类 示例: ```php <?php $term_id=1; $terms=sp_get_child_terms($term_id ); //获取子分类信息 print_r($terms); //打印出子分类信息 ?> ``` 返回数组item说明: `term_id`:分类id `name`:分类名称 `taxonomy`:分类的类型,用字符串表示,article表示文章 `description`:分类描述 `parent`:分类父级id,terms表中的term_id `seo_title` `seo_keywords` `seo_description` `list_tpl`:分类列表页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为list `one_tpl`: 分类单文章页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为article 模板中用法: ```php <php> $term_id=1; $terms=sp_get_child_terms($term_id ); //获取子分类信息 </php> <foreach name="terms" item="vo"> {$vo.name}<!--打印出分类名称 --> </foreach> ``` ## sp_get_child_terms_num() ```php sp_get_child_terms_num($term_id,$num) ``` 功能: 返回指定分类下的子分类 参数: `$term_id`:分类id `$num`:分类的数量 返回: 类型数组,指定分类下的子分类的数量。这个较前一个多了一个数量! 示例: ```php <?php $term_id=1; $num = 10; $terms=sp_get_child_terms($term_id,$num ); //获取子分类信息 print_r($terms); //打印出子分类信息 ?> ``` 返回数组item说明: `term_id`:分类id `name`:分类名称 `taxonomy`:分类的类型,用字符串表示,article表示文章 `description`:分类描述 `parent`:分类父级id,terms表中的term_id `seo_title` `seo_keywords` `seo_description` `list_tpl`:分类列表页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为list `one_tpl`: 分类单文章页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为article 模板中用法: ```php <php> $term_id=1; $terms=sp_get_child_terms($term_id ); //获取子分类信息 </php> <foreach name="terms" item="vo"> {$vo.name}<!--打印出分类名称 --> </foreach> ``` ## sp_get_term() ```php sp_get_term($term_id) ``` 功能: 返回指定分类 参数: `$term_id`:分类id 返回: 类型数组,符合条件的分类 示例: ```php <?php $term_id=1; $term=sp_get_term($term_id ); //获取分类信息 print_r($term); //打印出分类信息 ?> ``` 返回数组说明: `term_id`:分类id `name`:分类名称 `taxonomy`:分类的类型,用字符串表示,article表示文章 `description`: 分类描述 `parent`:分类父级id,terms表中的term_id `seo_title` `seo_keywords` `seo_description` `list_tpl`:分类列表页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为list `one_tpl`:分类单文章页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为article ## sp_get_terms() ```php sp_get_terms($tag) ``` 功能: 返回符合条件的所有分类 参数: `$tag`:查询标签,以字符串方式传入,例:"ids:1,2;field:term_id,name,description,seo_title;limit:0,8;order:path asc,listorder desc;where:term_id>0;" ``` ids:调用指定id的一个或多个数据,如 1,2,3 field:调用terms表里的指定字段,如(term_id,name...) 默认全部,用*代表全部 limit:数据条数,默认值为10,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始) order:排序方式,如:path desc,listorder asc; where:查询条件,字符串形式,和sql语句一样 ``` 返回: 类型数组,符合条件的所有分类 示例: ```html <php> $tag='ids:1,2;field:post_date,post_content;limit:10;order:post_date DESC;'; /* $tag规则:ids分类id,以逗号隔开;field需要取出的内容,默认取出所有信息;order排序方式,可根据任何取出的字段排序,默认为按发布时间排序。 $tag这是一个格式化的字符串,这种方式最大的好处就是方便日后扩展,它格式如《field+冒号+field支持的值,以英文逗号隔开+分号》 */ /*关于此函数的field: .它的可选值是: term_id 分类id name 分类名称 taxonomy 分类的类型,用字符串表示,article表示文章 description 分类描述 parent 分类父级id,terms表中的term_id path 用于无限级分类的path,如0-1-29 seo_title seo_keywords seo_description list_tpl 分类列表页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为list one_tpl 分类单文章页的模板,对应于模板目录下Portal/文件名+.html,文件名默认为article listorder 分类排序 status 分类状态0已回收,1正常 */ $terms=sp_get_terms($tag); </php> <foreach name="terms" item="vo"> {$vo.name }<br> {$vo.taxonomy }<br> {$vo.seo_title }<br> {$vo.seo_keywords }<br> {$vo.seo_description}<br> </foreach> ``` ## sp_sql_page() ```php sp_sql_page($id) ``` 功能: 获取指定id的页面 参数: `$id`:页面的id 返回: 类型数组,符合条件的页面 示例: ```php <?php $ID=1000; // $page=sp_sql_page($ID); print_r($page); ``` ## sp_sql_post() 示例: ```php <?php $tid=1000; //文章tid $posts=sp_sql_post($tid,'field:post_title,post_content;'); print_r($posts); //field 的可选参数已在sp_sql_posts()中说明 //smeta 处理方法已在sp_sql_posts()中说明 ?> ``` ## sp_sql_posts() ```php sp_sql_posts($tag,$where) ``` 功能: 查询文章列表,不做分页 参数: `$tag`:查询语句(见$tag规则) `$where`:查询条件,(暂只支持数组),格式和thinkphp where方法一样; 返回: array 文章列表 示例: ```php <?php $tag='cid:6;field:post_title,post_content;order:listorder asc'; $posts=sp_sql_posts($tag); print_r($posts); $smeta=json_decode($vo['smeta'],true); //smeta处理方法,将其转化为数组 ?> ``` `$tag`规则: cid 分类id; field 需要取出的内容,默认取出所有信息;order排序方式,可根据任何取出的字段排序,默认为按发布时间排序。 ``` field可选参数: term_id 文章分类id post_author 文章作者id,后台管理员,对应于表users里的ID; post_keywords post_date 文章发布日期 格式2014-01-01 00:00:00 post_content 文章内容 post_title 文章标题 post_excerpt 文章摘要 post_modified 文章更新日期 格式2014-01-01 00:00:00 smeta 文章扩展属性,以json格式保存,如属性thumb文章缩略图 user_nicename 管理员昵称 user_email 管理员邮箱 ``` 模板中用法: ```html <php> $posts=sp_sql_posts('cid:6;field:post_title,post_content;order:listorder asc'); </php> <foreach name="posts" item="vo"> /* 遍历数组 */ {$vo.term_id }<br> {$vo.post_author }<br> {$vo.post_keywords }<br> {$vo.post_date }<br> {$vo.post_content }<br> {$vo.post_title }<br> {$vo.post_excerpt }<br> {$vo.post_modified}<br> {$vo.user_nicename }<br> {$vo.user_email }<br> <php> $smeta=json_decode($vo['smeta'],true);/* 把smeta转化成数组 */ </php> <img src="{:sp_get_asset_upload_path($smeta['thumb'])}"/> </foreach> ``` ## sp_sql_posts_bycatid() > X1.2新增 ```php sp_sql_posts_bycatid($cid,$tag,$where) ``` 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),调用方式同sp_sql_posts 参数: `$cid`:分类id `$tag`:查询标签,以字符串方式传入,例:"order:post_date desc,listorder desc;"field:调用post指定字段,如(id,post_title...) 默认全部 ;limit:数据条数,默认值为10,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始);order:推荐方式(post_date) (desc/asc/rand()) `$where`:按照thinkphp where array格式 返回: 类型数组,符合条件的文章列表 ## sp_sql_posts_paged() ```php sp_sql_posts_paged($tag,$pagesize,$pagetpl) ``` 功能: 文章分页查询方法 参数: `$tag`:查询标签,以字符串方式传入,例:"field:post_title,post_content;limit:0,8;order:post_date desc,listorder desc;where:id>0;" ``` field:调用post指定字段,如(id,post_title...) 默认全部 limit:数据条数,默认值为10,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始) order:排序方式,如:post_date desc where:查询条件,字符串形式,和sql语句一样 $pagesize:每页显示文章数 $pagetpl:分页模板,例:"{first}{prev}{liststart}{list}{listend}{next}{last}" ``` 返回: 类型数组,带分页数据的文章列表 示例: ```php <? php $tag='cid:6;field:post_title,post_content;order:listorder asc'; $content=sp_sql_posts_paged($tag); $posts=$content['posts']; $pager=$content['page']; ?> ``` $tag规则: cid 分类id; field 需要取出的内容,默认取出所有信息;order排序方式,可根据任何取出的字段排序,默认为按发布时间排序。 field可选参数: term_id 文章分类id post_author 文章作者id,后台管理员,对应于表users里的ID; post_keywords post_date 文章发布日期 格式2014-01-01 00:00:00 post_content 文章内容 post_title 文章标题 post_excerpt 文章摘要 post_modified 文章更新日期 格式2014-01-01 00:00:00 smeta 文章扩展属性,以json格式保存,如属性thumb文章缩略图 user_nicename 管理员昵称 user_email 管理员邮箱 模板中用法: ```html <php> $content=sp_sql_posts_paged('cid:6;field:post_title,post_content;order:listorder asc'); </php> <foreach name="content['posts']" item="vo"> /* 遍历数组 */ {$vo.term_id }<br> {$vo.post_author }<br> {$vo.post_keywords }<br> {$vo.post_date }<br> {$vo.post_content }<br> {$vo.post_title }<br> {$vo.post_excerpt }<br> {$vo.post_modified}<br> {$vo.user_nicename }<br> {$vo.user_email }<br> <php> $smeta=json_decode($vo['smeta'],true);/* 把smeta转化成数组 */ </php> <img src="/data/upload/{$smeta.thumb}"/> </foreach> <div>{$content.page}</div><!--分页--> ``` ##sp_sql_posts_paged_bycatid() > X1.2新增 ```php sp_sql_posts_paged_bycatid($cid,$tag,$pagesize,$pagetpl) ``` 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),已经分页,调用方式同sp_sql_posts_paged 参数: ``` `$cid`:分类id `$tag`:查询标签,以字符串方式传入,例:"field:post_title,post_content;limit:0,8;order:post_date desc,listorder desc;where:id>0;" field:调用post指定字段,如(id,post_title...) 默认全部 limit:数据条数,默认值为10,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始) order:排序方式,如:post_date desc where:查询条件,字符串形式,和sql语句一样 $pagesize:每页显示文章数 $pagetpl:分页模板,例:"{first}{prev}{liststart}{list}{listend}{next}{last}" ``` 返回: 类型数组,符合条件的文章列表,及分页html ```php array( 'content'=>'',//符合条件的文章列表 'page'=>''//分页html ) ``` 模板使用方法: ```html <div class="main-title"> <php> $result=sp_sql_posts_paged_bycatid($cat_id,"",20); </php> </div> <volist name="result['posts']" id="vo"> <php> $smeta=json_decode($vo['smeta'], true); </php> <div class="list-boxes"> <h2><a href="{:leuu('article/index',array('id'=>$vo['tid']))}">{$vo.post_title}</a></h2> <p>{$vo.post_excerpt}</p> <div> <div class="pull-left"> <div class="list-actions"> <a href="javascript:;"><i class="fa fa-eye"></i><span>{$vo.post_hits}</span></a> <a href="{:U('article/do_like',array('id'=>$vo['object_id']))}" class="J_count_btn"><i class="fa fa-thumbs-up"></i><span class="count">{$vo.post_like}</span></a> <a href="{:U('user/favorite/do_favorite',array('id'=>$vo['object_id']))}" class="J_favorite_btn" data-title="{$vo.post_title}" data-url="{:U('portal/article/index',array('id'=>$vo['tid']))}" data-key="{:sp_get_favorite_key('posts',$vo['object_id'])}"> <i class="fa fa-star-o"></i> </a> </div> </div> <a class="btn btn-warning pull-right" href="{:leuu('article/index',array('id'=>$vo['tid']))}">查看更多</a> </div> </div> </volist> <div class="pagination"> <ul> {$result['page']} </ul> </div> ``` ##sp_sql_posts_paged_bykeyword() > X1.2新增 ```php sp_sql_posts_paged_bykeyword($keyword,$tag,$pagesize=20,$pagetpl) ``` 功能: 根据分类文章分类ID 获取该分类下所有文章(包含子分类中文章),已经分页,调用方式同sp_sql_posts_paged 参数: `$keyword`:查询关键字; `$tag`:查询标签,以字符串方式传入,例:"field:post_title,post_content;limit:0,8;order:post_date desc,listorder desc;where:id>0;" ``` field:调用post指定字段,如(id,post_title...) 默认全部 limit:数据条数,默认值为10,可以指定从第几条开始,如3,8(表示共调用8条,从第3条开始) order:排序方式,如:post_date desc where:查询条件,字符串形式,和sql语句一样 $pagesize:每页显示文章数 $pagetpl:分页模板,例:"{first}{prev}{liststart}{list}{listend}{next}{last}" ``` 返回: 类型数组,符合条件的文章列表,文章总数及分页html ```php array( 'posts=>'',//符合条件的文章列表 'page'=>'',//分页html 'count'=>'',//符合条件的文章总数 ) ``` 模板使用方法: ```html <div class="main-title"> <php> $result=sp_sql_posts_paged_bykeyword($keyword,"",20); </php> <h3>'{$keyword}' 搜索结果 </h3> <p>{$result['count']}条结果</p> </div> <volist name="result['posts']" id="vo"> <php> $smeta=json_decode($vo['smeta'], true); </php> <div class="list-boxes"> <h2><a href="{:leuu('article/index',array('id'=>$vo['tid']))}">{$vo.post_title}</a></h2> <p>{$vo.post_excerpt}</p> <div> <div class="pull-left"> <div class="list-actions"> <a href="javascript:;"><i class="fa fa-eye"></i><span>{$vo.post_hits}</span></a> <a href="{:U('article/do_like',array('id'=>$vo['object_id']))}" class="J_count_btn"><i class="fa fa-thumbs-up"></i><span class="count">{$vo.post_like}</span></a> <a href="{:U('user/favorite/do_favorite',array('id'=>$vo['object_id']))}" class="J_favorite_btn" data-title="{$vo.post_title}" data-url="{:U('portal/article/index',array('id'=>$vo['tid']))}" data-key="{:sp_get_favorite_key('posts',$vo['object_id'])}"> <i class="fa fa-star-o"></i> </a> </div> </div> <a class="btn btn-warning pull-right" href="{:leuu('article/index',array('id'=>$vo['tid']))}">查看更多</a> </div> </div> </volist> <div class="pagination"> <ul> {$result['page']} </ul> </div> ``` ## sp_make_tree() 说明:生成无限级树算法。 ``` /** * 生成无限级树算法 * @author Baiyu 2014-04-01 * @param array $arr 输入数组 * @param number $pid 根级的pid * @param string $column_name 列名,id|pid父id的名字|children子数组的键名 * @return array $ret */ function sp_make_tree($arr, $pid = 0, $column_name = 'id|pid|children') { list($idname, $pidname, $cldname) = explode('|', $column_name); $ret = array(); foreach ($arr as $k => $v) { if ($v [$pidname] == $pid) { $tmp = $arr [$k]; unset($arr [$k]); $tmp [$cldname] = sp_make_tree($arr, $v [$idname], $column_name); $ret [] = $tmp; } } return $ret; } ``` 函数的使用方法: ``` $output_array = sp_make_tree($original_array); ``` 或者: ``` $output_array = sp_make_tree($original_array,0,'id|pid|children'); ``` 相关处理前的数组与处理后的数组: 如图是数据库的源数据: ![](https://box.kancloud.cn/1e91a2b0789d647be1c5fdcfa862ceac_246x168.png) ``` //从数据库中取出的分类数据 $original_array=array( array( 'id' => 1, 'pid' => 0, 'name' => '新闻分类' ), array( 'id' => 2, 'pid' => 0, 'name' => '最新公告' ), array( 'id' => 3, 'pid' => 1, 'name' => '国内新闻' ), array( 'id' => 4, 'pid' => 1, 'name' => '国际新闻' ), array( 'id' => 5, 'pid' => 0, 'name' => '图片分类' ), array( 'id' => 6, 'pid' => 5, 'name' => '新闻图片' ), array( 'id' => 7, 'pid' => 5, 'name' => '其它图片' ), ), ``` ``` //整理后的分类数据 $output_array = array( array( 'id' => 1, 'pid' => 0, 'name' => '新闻分类', 'children' => array( array( 'id' => 3, 'pid' => 1, 'name' => '国内新闻' ), array( 'id' => 4, 'pid' => 1, 'name' => '国际新闻' ), ), ), array( 'id' => 2, 'pid' => 0, 'name' => '最新公告', ), array( 'id' => 5, 'pid' => 0, 'name' => '图片分类', 'children' => array( array( 'id' => 6, 'pid' => 5, 'name' => '新闻图片' ), array( 'id' => 7, 'pid' => 5, 'name' => '其它图片' ), ), ), ); ```