[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
```

## 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`

## 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`,如圖所示:

**實現結果如圖所示:**

#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');
```
相關處理前的數組與處理后的數組:
如圖是數據庫的源數據:

```
//從數據庫中取出的分類數據
$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' => '其它圖片'
),
),
),
);
```