Thinkcmf 二次開發


一、   創建模板 demo

   1 Tpl下創建demo文件-----后台啟用新的模板 (網站信息--模板方案)

   2 在模板在tpl/demo目錄下創建Portal目錄,然后在Portal目錄下創建index.html

首頁基本分為以下部分head,header,content,footer,scripts這五大部分

<<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>{$site_seo_title} {$site_name}</title>

<meta name="keywords" content="{$site_seo_keywords}" />

<meta name="description" content="{$site_seo_description}">

<tc_include file="Public:head"/><!--head部分     加載公共CSSjs等 -->

</head>

<body>

<tc_include  file="Public:header"/><!--header部分     加載導航等 -->

<!-- content 開始 -->這是ThinkCMF首頁喲!!<!-- content 結束 -->

<tc_include file="Public:footer"/><!--footer部分     加載公共底部,友情鏈接等 -->

<tc_include file="Public:scripts"/><!--scripts部分     加載公共js等 -->

</body>  </html>

  3   引入公共文件

首先在模板目錄demo下創建公共文件目錄Public,這個目錄主要是用來存資源文件,公共文件等;接着在Public下創建第1步里的四個文件head.html,header.html,footer.

html,scripts.html

file只支持:1.  Public:文件名  模板Public目錄下的文件;

               2.  :文件名        模板根目錄下的文件;

 Head.html

    <tc_include file=":config"/>

    <meta name="author" content="滴滴好活">     <meta charset="UTF-8">

    <meta http-equiv="x-ua-compatible" content="IE=edge">

    <meta name="viewport" content="width=device-width,initial-scale=1">

        <!-- Set render engine for 360 browser -->

    <meta name="renderer" content="webkit">

        <!-- No Baidu Siteapp-->

    <meta http-equiv="Cache-Control" content="no-siteapp"/>

    <link href="__TMPL__Public/css/bootstrap.min.css" rel="stylesheet">

    <link rel="stylesheet" href="__TMPL__Public/css/bootstrap.css">

    <link rel="stylesheet" href="__TMPL__Public/css/app.css">

    <link rel="icon"  href="__TMPL__Public/img/logo.png">

    <style>

      @-webkit-keyframes animations{   0%{height: 100%;opacity: 0.3;padding-top:0;}/**透明度有淺到深,從加載到加載完**/

            100%{height: 40px;opacity: 0.8;}    }  </style>  

  Script.html

    <script src="__TMPL__Public/js/jquery-1.11.3.js"></script>

    <script src="__TMPL__Public/js/bootstrap.js"></script>

    <script src="__TMPL__Public/js/html5shiv.min.js"></script>

    <script src="__TMPL__Public/js/respond.min.js"></script>  

    <script src="__TMPL__Public/js/app.js"></script>  

    <script src="__TMPL__Public/js/bootlint.js"></script>  

    <!--[endif]-->

4  使用全局變量

{$site_name}                    /站點名稱

{$site_host}                    /站點域名

{$site_root}                    /安裝目錄

{$site_icp}                     /備案信息

{$site_admin_email}             /管理員郵箱

{$site_tongji}                  /頁面統計代碼

{$site_seo_title}               /SEO標題

{$site_seo_keywords}            /SEO關鍵字

{$site_seo_description}         /SEO描述

   5 加載模板資源

1.加載模板Public下的圖片

<img src="__TMPL__Public/images/prv/human-img-3.png"/>

__TMPL__ 這是一個模板常量,表示當前模板根目錄

2.加載模板Public下的css,js

<link href="__TMPL__Public/css/demo.css" rel="stylesheet" type="text/css" /><script type="text/javascript" src="__TMPL__Public/js/jquery.js" ></script>_

二、制作首頁內容

1 制作幻燈片

<php>

$home_slides=sp_getslide($top_slides);

$home_slides=empty($home_slides)?$default_home_slides:$home_slides;

$home_slides=($home_slides);

$result=array_pop($home_slides);

</php>

<div class="carousel slide" id="ad4" data-ride="carousel" data-interval="3000">

    <div class="carousel-inner">

        <div class="item active">

            <a href="{$result.slide_url}"><img src="{$result['slide_pic']}" alt=""></a>

        </div>

    <foreach name="home_slides" item="vo">

        <div class="item">

            <a href="{$vo.slide_url}"><img src="{$vo['slide_pic']}" alt=""></a>

        </div>

    </foreach>

</div>

配置默認幻燈片 config.html 

$default_home_slides=array(

array(

"slide_name"=>"ThinkCMFX1.6.0發布啦!",

"slide_pic"=>$tmpl."Public/images/demo/1.jpg",   "slide_url"=>"", ),

array(aaaa

"slide_name"=>"ThinkCMFX1.6.0發布啦!",

"slide_pic"=>$tmpl."Public/images/demo/2.jpg",   "slide_url"=>"",   )  )

2 制作文章內頁--分頁文章顯示

<php>

$posts=sp_sql_posts('cid:6;field:post_title,post_content;order:listorder asc');

Print($posts);  //可以打印出結果 field 查詢范圍  cid 文章管理中心的id order排序 

</php>

<foreach name="posts" item="vo">  /* 遍歷數組 */

    {$vo.term_id }<br>    文章分類id

    {$vo.post_author }<br>  文章作者id,后台管理員,對應於表users里的ID;

    {$vo.post_keywords }<br>

    {$vo.post_date }<br>  文章發布日期 格式2014-01-01 00:00:00

    {$vo.post_content }<br>   文章內容

    {$vo.post_title }<br>   文章標題

    {$vo.post_excerpt }<br>  文章摘要

    {$vo.post_modified}<br>   文章更新日期

    {$vo.user_nicename }<br>   管理員名稱

{$vo.user_email }<br>   管理員郵箱

{$vo.post_source}<br>      文章來源

    <php>

    $smeta=json_decode($vo['smeta'],true);/* smeta轉化成數組 */

    </php>

    <img src="{:sp_get_asset_upload_path($smeta['thumb'])}"/>

</foreach>

<php>      $photo=$Portal_index['Cat']['Photo']; $contentPh=sp_sql_posts_paged("cid:$photo;field:post_title,term_id,smeta;order:post_date desc;",'4');  </php>

<foreach name="contentPh['posts']" item="vo"> 

  <php>  $smeta=json_decode($vo['smeta'],true);/* smeta轉化成數組 */  </php>

  <div class="col-md-3 col-xs-12"> <div class="drop">

<a href="{:leuu('article/index',array('id'=>$vo['id']))}" target="_blank">

    <img src="{:sp_get_asset_upload_path($smeta['thumb'])}" alt="" class="img-responsive">  </a><a href="{:leuu('article/index',array('id'=>$vo['id']))}">

  <p class="drop-u" target="_black">{$vo.post_title}</p> </a>  </div>   </div>  </foreach>

  1. Config.html 

// 首頁配置

$Portal_index= array(

'Article'=>array(),

 'Page'=>array(),

 'Cat'=>array(

    'Photo'=>5,     //合作伙伴

  'Newscenter'=>8,     //新聞中心

  'Advantage'=>2,       //產品優勢

  'Industry'=>7 ,        //行業動態

  'Question'=>9   //疑難解答 ),   );

$top_slides='top_slides';   //幻燈片設置

$default_home_slides=array(    array(

"slide_name"=>"廣告1",

"slide_pic"=>"banner-bg.png",

"slide_url"=>"",),);

 

三、創建登錄頁面 <a href="{:u('user/login/index')}">

1 框架 User/login.html

<!DOCTYPE html>

<html>

<head>

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

<title>{$site_seo_title} {$site_name}</title>

<meta name="keywords" content="{$site_seo_keywords}" />

<meta name="description" content="{$site_seo_description}">

<tc_include file="Public:head"/><!--head部分     加載公共CSSjs等 -->

</head>

<body>

<tc_include file="Public:header" /><!--header部分     加載導航等 -->

{content}

<tc_include file="public:footer"/><!--footer部分     加載公共底部,友情鏈接等 -->

<tc_include file="Public:scripts"/><!--scripts部分     加載公共js等 -->

</body>

</html>

 

2 內容

<form class="J_ajaxForms" action="{:U('user/login/dologin')}" method="post">

<label for="input_username">賬號</label>

<input type="text" id="input_username" name="username" placeholder="請輸入用戶名或者郵箱" class="span3">

<label for="input_password">密碼</label>

<input type="password" id="input_password" name="password" placeholder="請輸入密碼" class="span3">

 

<label for="input_verify">驗證碼</label>

<input type="text" id="input_verify" name="verify"  placeholder="請輸入驗證碼" class="span3"> {:sp_verifycode_img('length=4&font_size=15&width=100&height=35&charset=1234567890')}

<label for="input_repassword"></label>

<label class="checkbox persistent"><input type="checkbox" name="terms" value="1">我同意<a href="#">網站內容服務條款</a></label>

<button class="btn btn-primary J_ajax_submit_btn" type="submit">確定</button>

</form>

3 控制器

namespace User\Controller;

use Common\Controller\HomeBaseController;

class LoginController extends HomeBaseController {

function index(){

    if(sp_is_user_login()){ //已經登錄時直接跳到首頁

       redirect(__ROOT__."/");   }else{

        $this->display(":login");    } }

function active(){   $this->check_login(); $this->display(":active"); }

function doactive(){ $this->check_login(); $this->_send_to_active();

$this->success('激活郵件發送成功,激活請重新登錄!',U("user/index/logout")); }

function forgot_password(){ $this->display(":forgot_password"); }

    function doforgot_password(){   if(IS_POST){ if(!sp_check_verify_code()){

$this->error("驗證碼錯誤!"); }else{  $users_model=M("Users");

$rules = array(

//array(驗證字段,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間)

array('email', 'require', '郵箱不能為空!', 1 ),

array('email','email','郵箱格式不正確!',1), // 驗證email字段格式是否正確 );

if($users_model->validate($rules)->create()===false){ $this->error($users_model->getError());

}else{   $email=I("post.email");

     $find_user=$users_model->where(array("user_email"=>$email))->find();

       if($find_user){ $this->_send_to_resetpass($find_user);

    $this->success("密碼重置郵件發送成功!",__ROOT__."/"); }else {

$this->error("賬號不存在!"); } } } } }

    //登錄驗證

    function dologin(){ if(!sp_check_verify_code()){   $this->error("驗證碼錯誤!");   }

      $users_model=M("Users");

     $rules = array( //array(驗證字段,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間)

           array('username', 'require', '用戶名或者郵箱不能為空!', 1 ),

     array('password','require','密碼不能為空!',1),    );

     if($users_model->validate($rules)->create()===false){ $this->error($users_model->getError());  }

     extract($_POST);

     if(strpos($username,"@")>0){//郵箱登陸 $where['user_email']=$username;

     }else{   $where['user_login']=$username;    }

     $users_model=M('Users');    $result = $users_model->where($where)->find();

     $ucenter_syn=C("UCENTER_ENABLED");  $ucenter_old_user_login=false;     $ucenter_login_ok=false;

     if($ucenter_syn){  setcookie("thinkcmf_auth","");   include UC_CLIENT_ROOT."client.php";

     list($uc_uid, $username, $password, $email)=uc_user_login($username, $password);

     if($uc_uid>0){ if(!$result){

     $data=array( 'user_login' => $username, 'user_email' => $email,

     'user_pass' => sp_password($password), 'last_login_ip' => get_client_ip(),

     'create_time' => time(), 'last_login_time' => time(), 'user_status' => '1',);

     $id= $users_model->add($data); $data['id']=$id; $result=$data; }

     }else{   switch ($uc_uid){  case "-1"://用戶不存在,或者被刪除

     if($result){//本應用已經有這個用戶

if($result['user_pass'] == sp_password($password)){//本應用已經有這個用戶,且密碼正確,同步用戶

     $uc_uid2=uc_user_register($username, $password, $result['user_email']);

     if($uc_uid2<0){  $uc_register_errors=array(

     "-1"=>"用戶名不合法", "-2"=>"包含不允許注冊的詞語",

     "-3"=>"用戶名已經存在", "-4"=>"Email格式有誤",

         "-5"=>"Email不允許注冊", "-6"=>"Email已經被注冊", );

     $this->error("同步用戶失敗--".$uc_register_errors[$uc_uid2]); }

     $uc_uid=$uc_uid2; }else{ $this->error("密碼錯誤!"); } } break;

     case -2://密碼錯

     if($result){//本應用已經有這個用戶

     if($result['user_pass'] == sp_password($password)){//本應用已經有這個用戶,且密碼正確,同步用戶

     $uc_user_edit_status=uc_user_edit($username,"",$password,"",1);

     if($uc_user_edit_status<=0){   $this->error("登陸錯誤!");   }

     list($uc_uid2)=uc_get_user($username);  $uc_uid=$uc_uid2;

     $ucenter_old_user_login=true;

     }else{ $this->error("密碼錯誤!"); }

     }else{   $this->error("密碼錯誤!"); }break; } }

     $ucenter_login_ok=true; echo uc_user_synlogin($uc_uid);   }   //exit();

     if($result != null)  { if($result['user_pass'] == sp_password($password)|| $ucenter_login_ok){

       $_SESSION["user"]=$result; //寫入此次登錄信息

         $data = array( 'last_login_time' => date("Y-m-d H:i:s"), 'last_login_ip' => get_client_ip(), );

     $users_model->where("id=".$result["id"])->save($data);

     $redirect=empty($_SESSION['login_http_referer'])?__ROOT__."/":$_SESSION['login_http_referer'];

     $_SESSION['login_http_referer']="";   $ucenter_old_user_login_msg="";

     if($ucenter_old_user_login){  //$ucenter_old_user_login_msg="老用戶請在跳轉后,再次登陸";} $this->success("登錄驗證成功!", $redirect);

     }else{ $this->error("密碼錯誤!"); }

   }else{   $this->error("用戶名不存在!");  }   }

。。。。。。

 

四、創建注冊頁面   <a href="{:U('user/register/index')}">

1 框架同登錄頁

2   注冊頁面  User/register.html

<form class="form-horizontal J_ajaxForm" action="{:U('user/register/doregister')}" method="post">

<label class="control-label" for="input_username">賬號</label>

<input type="text" id="input_username" name="username" placeholder="請輸入賬號" class="span3">

<label class="control-label" for="input_email">郵箱</label>

<input type="text" id="input_email" name="email" placeholder="請輸入郵箱" class="span3">

<label class="control-label" for="input_password">密碼</label>

<input type="password" id="input_password" name="password" placeholder="請輸入密碼" class="span3">

<label class="control-label" for="input_repassword">重復密碼</label>

<input type="password" id="input_repassword" name="repassword" placeholder="請輸入重復密碼" class="span3">

<label class="control-label" for="input_verify">驗證碼</label>

<input type="text" id="input_verify" name="verify" placeholder="請輸入驗證碼" class="span3"> {:sp_verifycode_img('length=4&font_size=15&width=100&height=35&charset=1234567890')}

<label class="control-label" for="input_repassword"></label>

<label class="checkbox persistent"><input type="checkbox" name="terms" value="1">我同意<a href="#">網站內容服務條款</a></label>

<button class="btn btn-primary J_ajax_submit_btn" type="submit" data-wait="1500">確定注冊</button>

</form>

 

 

五、 聯系我們

1 listercontroller.class.php

class ListController extends HomeBaseController {

public function index() {   $term=sp_get_term($_GET['id']); //文章內頁

if(empty($term)){ header('HTTP/1.1 404 Not Found');   header('Status:404 Not Found');

   if(sp_template_file_exists(MODULE_NAME."/404")){   $this->display(":404");  }

       return ; }

var_dump($term);   $tplname=$term["list_tpl"];

    $tplname=sp_get_apphome_tpl($tplname, "list"); $this->assign($term);

    $this->assign('cat_id', intval($_GET['id'])); $this->display(":$tplname");  }

 

$term=sp_get_term($_GET['id']);打印結果

array(15) { ["term_id"]=> string(1) "4"      ["name"]=> string(12) "聯系我們"

["slug"]=> string(0) ""    ["taxonomy"]=> string(7) "article"   ["description"]=> string(0) ""       

["parent"]=> string(1) "0"   ["count"]=> string(1) "0"      ["path"]=> string(3) "0-4"   

    ["seo_title"]=> string(0) ""       ["seo_keywords"]=> string(0) "" 

     ["seo_description"]=> string(0) "" ["list_tpl"]=> string(5) "index"   

   ["one_tpl"]=> string(7) "article"   ["listorder"]=> string(1) "0"    ["status"]=> string(1) "1" }

     2   關於我們

<php $contentAb=sp_sql_posts_paged("cid:$Portal_about;field:post_title,post_content,post_excerpt;order:post_date desc;";   </php>

 <foreach name="contentAb['posts']" item="vo"> 

     <div class="jianjie"><p>{$vo[post_title]}</p>

        <span>{$vo.post_excerpt }</span>    <span>{$vo.post_content }</span>

     </div>

</foreach> 

六、創建個人中心

1   登陸后驗證  LoginController.class.php---function dologin()

$users_model=M("Users");

$rules = array(   //array(驗證字段,驗證規則,錯誤提示,驗證條件,附加規則,驗證時間)

    array('username', 'require', '用戶名或者郵箱不能為空!', 1 ),

    array('password','require','密碼不能為空!',1),);

 if($users_model->validate($rules)->create()===false){

    $this->error($users_model->getError());   }

    extract($_POST);

if(strpos($username,"@")>0){//郵箱登陸   $where['user_email']=$username;

   }else{   $where['user_login']=$username;    }

If  (strpos($username,"@")>0){//郵箱登陸   $where['user_email']=$username;

   }else{    $where['user_login']=$username; }

 

2    登錄后顯示登陸信息 header.html   script.html  

<div id="main-menu-user">  

<div  class='userout user' >  <!--還未登陸-->

    <ul class="nav navbar-nav  navbar-right">

       <li><a href="{:u('user/register/index')}" data-toggle="dropdown">注冊</a> </li></ul>

<ul class="nav navbar-nav  navbar-right">

   <li><a href="{:u('user/login/index')}"  data-toggle="dropdown">登陸</a></li></ul>

    <ul class="nav navbar-nav  navbar-right" style="margin-top:10px">

       <li > <img src="__TMPL__/Public/img/headicon.png" class="headicon"/> </li> </ul>

</div>

<div class="userlogin user" ><!--已經登陸-->

  <ul class="nav navbar-nav  navbar-right">

       <li><a href="{:u('user/index/logout')}" data-toggle="dropdown">退出</a></li></ul>

  <ul class="nav navbar-nav  navbar-right"><li> 

 <a href="{:u('user/center/index')}" data-toggle="dropdown" class="user-nicename"></a>

     </li></ul>

  <ul class="nav navbar-nav  navbar-right" style="margin-top:10px">

     <li ><img src="" class="headicon"/> </li></ul>

</div> </div>

<script>

$(function () { /*控制導航欄顯示登陸還是個人中心*/

$.post("{:U('user/index/is_login')}",{},function(data){

 if(data.status==1){

   if(data.user.avatar){  $("#main-menu-user ul li .headicong").attr("src",data.user.

      avatar.indexOf("http")==0?data.user.avatar:"__UPLOAD__avatar/"+data.user.avatar); }

   $("#main-menu-user ul li .user-nicename").text(data.user.user_nicename!=""?data.use

      r.user_nicename:data.user.user_login);

   $("#main-menu-user .userlogin").show();   $("#main-menu-user .userout").hide(); }

if(data.status==0){  $("#main-menu-user .userout").show();

    $("#main-menu-user .userlogin").hide(); }   });   });    </script>

同時與之對應的傳值IndexController.class.php--function is_login()

function is_login(){   if(sp_is_user_login()){

    $this->ajaxReturn(array("status"=>1,"user"=>sp_get_current_user()));

 }else{   $this->ajaxReturn(array("status"=>0,"info"=>"此用戶未登錄!"));   }   }

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM