[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' => '其它图片'
),
),
),
);
```