thinkphp3.2.3

入口文件:

define('APP_DEBUG',true); #开发是建议大家设为调试模式
define('THINK_PATH', dirname(__FILE__).'/ThinkPHP/'); #设置你的框架目录地址
define('APP_NAME','home');#设置你的项目名称
define('APP_PATH', dirname($_SERVER['SCRIPT_FILENAME']).'/'.APP_NAME.'/');#设置你的项目地址
require_once   THINK_PATH.'ThinkPHP.php';  #加载框架核心文件
 



 项目目录介绍:
   home
      --Common  你的函数库
      ---Conf   你的配置文件
     --- Lang    你的语言包文件 通常我们使用数组方式来实现国际化
     ---Lib     你项目逻辑实现文件目录 在该目录下面,包含你的控制器,你的模型,你的第三方 当然你也可以将第三方的放置在ThinkPHP 框架中 我们通常这么做
      ------Action 你的控制器
      ------Model   你的模型
      ------widget 你的组件
     Runtime   Thinkphp为你项目编译的文件在这里
      ---Tpl  你模板在这里
  Public      你的公告资料目录
     ---css
     ---js
     ---images
  Uploads    你的上传文件目录
  ThinkPHP    框架目录


 做个简单的新闻发布:
  
 创建你的数据库:
   create database cms;
   

 选择你的数据库
    use cms;
  创建你的表
    create table think_news(
      id  int primary key auto_increment, #id
      title varchar(120) not null, #标题
      content text not null,   #内容
      sendtime datetime not null,  #发送时间
      author   varchar(30) not  null, #作者
      fromto   varchar(30) not null,   #来自
      hits     int   not null default 0  #点击量
   )engine=myisam charset=utf8;

  插入测试数据
   mysql> insert into think_news values(null,'my one news','hello word',now(),'admin','admin',default),(null,'my 2 news','hello words  dddddddddddd0',now(),'admin','admin',default);

  

链接数据库:
      
    配置你的数据库:

      //数据库配置信息
    'DB_TYPE'   => 'mysql', // 数据库类型
    'DB_HOST'   => 'localhost', // 服务器地址
    'DB_NAME'   => 'cms', // 数据库名
    'DB_USER'   => 'root', // 用户名
    'DB_PWD'    => 'test123', // 密码
    'DB_PORT'   => 3306, // 端口
    'DB_PREFIX' => 'think_', // 数据库表前缀,目的:区分多个数据库的表

     //模板相关配置
    'TMPL_PARSE_STRING'  =>array(
        '__PUBLIC__' => '/Public', // 更改默认的__PUBLIC__ 替换规则
        '__JS__' => '/Public/js', // 增加新的JS类库路径替换规则
        '__CSS__' => '/Public/css', // 增加新的JS类库路径替换规则
        '__IMAGES__' => '/Public/images', // 增加新的JS类库路径替换规则
        '__UPLOAD__' => '/Uploads', // 增加新的上传路径替换规则
    ),

  编写你的模型: 
     编写模型的文件命名规则:
          表名Model.php   首字母大写,驼峰命名法 

     class NewsModel extends  Model {
             // 定义你的字段
             protected  $fields=array('id','title','content','sendtime','author','fromto','hits');
    }


  编写你的控制器:
     class IndexAction extends Action {
    public function  index(){
         //链接数据库
         $News=D('News'); //实例化模型类 NewsModel
         $id=$this->_param('id'); //获取你的参数
         $data=$News->where('id='.$id)->find();  //查询返回数据
          $this->assign('newsbody',$data); //装载变量
          $this->display('default:Index:index'); //发送到default/Index/index.html 中
       }
    

} 

 访问你的url 路由:
      http://127.0.0.1/index.php/Index/index/id/2
   
 编写你的视图:
Tpl/deault/Index/index.html

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <css href="__CSS__/main.css" />
</head>
<body>
     <div class="content">
         <h2><p class="title">{$newsbody.title}</p></h2>
          <p class="title">
                   作者:<span>{$newsbody.author}</span>
               发表时间:<span>{$newsbody.sendtime}</span>
                   来源:<span >{$newsbody.fromto}</span>
                 点击量:<span>{$newsbody.hits}</span></p>
         <hr style="border: 1px solid #000000;">
         <div class="body">
            {$newsbody.content}
         </div>
    </div>
</body>
</html>


名词解释:
  ORM: O-object(对象)  R-Relation(关系) M-Model(模型) - 简单理解为: 提供了一套对象与关系型数据库连接的一种映射中间件。我们在操作对象的属性也即是在操作数据库表中的字段列。它的主要目的在对数据库操作的一种持久化。使程序员最大限度的离开sql语句,通过对象模型来操纵你的数据库。ORM对性能的影响是极其有限的.

其他名词参见手册
------------------------------------------------------------------------------------------------------------------------------
紧接着上一天,来实现curd.
   
  <?php
// 本类由系统自动生成,仅供测试用途
class IndexAction extends Action {
    public function  index(){
      $this->display('default:Index:index'); #导航首页
    }

   public function  newsList(){  
        $Model=M('News');
        $newsList=$Model->field('id,title')->select();
        $this->assign('newsList',$newsList);
        $this->display('default:Index:list');  #显示所有新闻的标题

    }

    public function show(){
        //链接数据库
        $News=D('News'); //实例化模型类 NewsModel
        $id=$this->_param('id');
        $data=$News->where('id='.$id)->find();
        $this->assign('newsbody',$data);
        $this->display('default:Index:show');   #依据id 显示具体的新闻内容
    }

     public function  addNews(){
         $this->display('default:Index:addNews');  #添加新闻模板
     }

    
}

Tpl/default/Index/index.html  导航模板

  <div class="content">
     <a href="{:U('Index/newsList')}">显示新闻</a>  <!--  {:U('Index/newsList')} 在模板中使用U方法实现你的url   -->
     <a href="">发布新闻</a>
     <a href="">管理新闻</a>
</div>


Tpl/default/Index/list.html  新闻列表模板
  
  <ul>
     <volist name="newsList" id="vo">
         <li><a href="{:U('Index/show',array('id'=>$vo[id]))}" id="{$vo.id}">{$vo.title}</a></li>
     </volist>
   </ul>


Tpl/deautl/Index/show.html   (上面有案例)  新闻显示模板

Tpl/default/Index/addNews.html   添加新闻模板 带编辑器和时间插件
<!DOCTYPE html>
<html>
<head>
    <title></title>
     <css href="__CSS__/main.css" />
     <css href="__PLUGS__/kindeditor/themes/default/default.css"/>
</head>
<body>
  <form action="{:U('AddNews/index')}" method="post" name="from1">  #数据提交到添加新闻类的index方法中
        <p><lable>标题:</lable><input type="text" name="title"   size="20" /></p>
         <p><lable>作者:</lable><input type="text" name='author' size="20" /></p>
         <p><lable>时间:</lable><input class="Wdate" type="text" name='sendtime'  onClick="WdatePicker({dateFmt:'yyyy/MM/dd/ HH:mm:ss'})" /></p>
         <p><lable>来源:</lable><input type="text" name='fromto' size="20" /></p>
         <p>
             <textarea name="content" style="width:600px;height:300px;visibility:hidden;">请发布你的内容:</textarea>
        </p>
       <p><input type="submit" name="sub" value="提交" /></p>
 </form>

 <js href="__PLUGS__/My97DatePicker/WdatePicker.js" />
 <js href="__PLUGS__/kindeditor/kindeditor-min.js" />
 <js href="__PLUGS__/kindeditor/lang/zh_CN.js" />
  <script>
       var editor;
       KindEditor.ready(function(K){
           editor = K.create('textarea[name="content"]', {
               allowFileManager : true
           });
       });
   </script>
</body>
</html>


--------------------

class AddNewsAction  extends  Action{
      public function _before_index(){ #在index之前执行该方法
       //在提交之前先自动验证
          if($this->isPost()){
               header("content-type: text/html; charset=utf8");
              $News=D("News");
              $validate = array(
                  array('title','require','标题必须必须填写!',1),
                  array('author','require','作者必须填写!',1),
                  array('fromto','require','来源必须现!',1),
              );
              $News->setProperty("_validate",$validate);
              $result=$News->create();
               if($result){
                     // 获取数据
                    $newsData['title']=$this->_post('title');
                    $newsData['content']=$this->_post('content');
                    $newsData['sendtime']=$this->_post('sendtime');
                    $newsData['author']=$this->_post('author');
                    $newsData['fromto']=$this->_post('fromto');
                    $newsId=$News->add($newsData);
                      if( ! $newsId){
                        $this->error("插入失败",__APP__.'Index/addNews',3);  #3秒后跳转
                     }else{
                         $this->success("添加新闻成功", __APP__.'/Index/index',3);
                     }
                   }else{
                    exit($News->getError());
                 }
               }
          }
       public  function  index(){}


class NewsModel extends  Model {
     protected  $fields=array('id','title','content','sendtime','author','fromto','hits');
   //自动填充
    protected $_auto = array (
       array('hits','createDefault',3,'callback'), // 对u_time字段在更新的时候写入当前时间戳
    );
   //实现函数createTime
    public function createDefault(){
        return 'default';
    }

}





空模块操作
  class EmptyAction  extends  Action{
    public function index(){
       $this->error('你访问的模块:'.MODULE_NAME.'不存在');
    }
}

空操作: 模块下面没有Action,系统自动执行下面的方法
public  function _empty(){
   $this->error('你访问的操作不存在');
}

比如访问如下url
http://127.0.0.1/index.php/Index/show/id/1

/**
  * 优化系统自带的系统提示错误
  */

<!DOCTYPE html>
<head>
    <meta charset=utf-8" />
    <title>页面提示</title>
    <script type="text/javascript">
        function refresh(){
            location.href = "{$jumpUrl}";
        }
        setTimeout("refresh()",{$waitSecond}000);
    </script>
    <style type="text/css">
        *{margin:0px;padding:0px;font-size:12px;font-family:Arial,Verdana;}
        #wrapper{width:450px;height:200px;background:#F5F5F5;border:1px solid #D2D2D2;position:absolute;top:40%;left:50%;margin-
top:-100px;margin-left:-225px;}
        p.msg-title{width:100%;height:30px;line-height:30px;text-align:center;color:#EE7A38;margin-top:40px;font:14px
Arial,Verdana;font-weight:bold;}
        p.message{width:100%;height:40px;line-height:40px;text-align:center;color:blue;margin-top:5px;margin-bottom:5px;}
        p.error{width:100%;height:40px;line-height:40px;text-align:center;color:red;margin-top:5px;margin-bottom:5px;}
        p.notice{width:100%;height:25px;line-height:25px;text-align:center;}
    </style>
</head>
<body>
<div id="wrapper">
    <p class="msg-title">{$msgTitle}</p>
    <present name="message">
        <p class="message">{$message}</p>
    </present>
    <present name="error">
        <p class="error">{$error}</p>
    </present>
    <present name="closeWin">
        <p class="notice">系统将在 <span style="color:blue;font-weight:bold">{$waitSecond}</span> 秒后自动关闭,如果不想等待,
            直接点击 <a href="{$jumpUrl}">这里</a> 关闭</p>
    </present>
    <notpresent name="closeWin">
        <p class="notice">系统将在 <span style="color:blue;font-weight:bold">{$waitSecond}</span> 秒后自动跳转,如果不想等待,
            直接点击 <a href="{$jumpUrl}">这里</a> 关闭</p>
    </notpresent>
</div>

你可能感兴趣的:(数据库,cms,函数,thinkphp,发布)