(有点菜,高见请跟帖指教,谢谢:) .. )PHP生成静态新闻

(有点菜,高见请跟帖指教,谢谢:) .. )PHP生成静态新闻

刚在群里发了这个,大家都说看不懂,哈哈,俺要是看了这个也看不太懂,因为有些是封装的
时间不多,这里就简单注释下看不懂的地方,希望大家给个意见,你们的意见就是对我辛苦劳动的认可,
高手不吝赐教!!!


这个函数其实是一个类中的方法
站点采用单一入口
url 就形如    http://*******/?play=news&key=addArt

这里的key=addArt就是指向类news的方法addrArt()

OK,现在说说下面的这个:

function addArt(){
            
                global $DB;     //数据库对象,在入口处已经有个方法定义了,所以global就OK了
               
                if($_POST["submit"]){   //判断是否在后台提交 了发布按钮
                    

                                       // 以下是取得表单内容,这里不多说了,ptime可以用database' NOW()函数更方便点,省事不少
                                          
                        $sortID    = $_POST["sortID"];
                        $tid       = mktime();
                        $title     = $_POST["title"];
                        $author    = $_POST["author"];
                        $is_show   = $_POST["is_show"];
                        $ptime     = date("Y-m-d H:i:s");
                        $is_hot    = "0";
                        $content   = $_POST["content"];
                       
                        $content   = $this->strFiter($content); /*这里是简单过滤下,因为是管理自己输入的所以只定义格式,这个是父类定义的一个过滤方法 ,防止注入的已在入口处统一过滤,strFiter()如:
                              
                    function strFiter($str){
                   $str = str_replace( "<" , "&lt" , $str );
                   $str = str_replace( ">" , "&gt" , $str );
                   $str = str_replace( "\n" , "<br>" , $str );
                  $str = str_replace( "  " , " " , $str );
                     return $str;
                     }   
                        呵呵,英文不错的你应该发现fiter这个好象少了一个l  ,哈~,还好将错就错,对上了就没事*/
                       
                        //下面是取得下一个主题,这个太笨拙了,改日在修改,
                        $DB->query("SELECT title,url FROM mnrc_news WHERE tid < '$tid' ORDER BY tid DESC");
                        $nextTitle = $DB->row();//取得一行数据,返回数组

                                                               
                                                         //好,下面是正式开始替换模板,说来搞笑,我本来用smarttemplage,但是她不提供一个替换生
//成,也可能是我不知道(应该是不知道,毕竟接触不久),我自己用str_replace()写了个替换,差点晕倒

                                $fp = fopen("templates/admin/article_model.htm" , "r");//打开模板文件
                                $fread = fread($fp,filesize("templates/admin/article_model.htm"));//读写整个
                                //下面几行开始替换变量,这样数据中不用存储内容字段,省掉空间
                                $fread = str_replace( "{title}" , $title , $fread );
                                $fread = str_replace( "{content}" , $content , $fread );
                                $fread = str_replace( "{ptime}" , $ptime , $fread );
                                $fread = str_replace( "{author}" , $author  , $fread );
                                $fread = str_replace( "{HEADER}" , HEADER , $fread );
                                $fread = str_replace( "{FOOTER}" , FOOTER , $fread );
                                $fread = str_replace( "{AD}" , AD , $fread );
                                $fread = str_replace( "{newstitle}" , $nextTitle["title"] , $fread );
                                $fread = str_replace( "{path}"      , $nextTitle["url"]   , $fread );
                               
                        // show relation news 显示相关新闻,模板形如 <a href="{r[url][1]}">{r[1]}</a>以下的显示栏
//目,显示展会信息类似
                        $DB->query("SELECT title,url FROM mnrc_news LIMIT 0,9");
                        $relation = $DB->fetchAll();
                            
                            $relationnums = 1;
                                foreach( $relation as $v ){
                               
                                        $fread = str_replace( "{r[$relationnums]}" , $v["title"] , $fread );
                                        $fread = str_replace( "{r[url][$relationnums]}" , $v["url"] , $fread );
                                        $relationnums++;
                                       
                                }
                       
                        // show hot news
                        $DB->query("SELECT title,url FROM mnrc_news ORDER BY tid DESC LIMIT 0,9");
                        $hot = $DB->fetchAll();
                       
                            $hotnums = 1;
                                foreach( $hot as $v ){
                               
                                    $fread = str_replace( "{r[title][$hotnums]}" , $v["title"] , $fread );
                                        $fread = str_replace( "{r[url][$hotnums]}" , $v["url"] , $fread );
                                        $hotnums++;
                               
                                }
                               
                        // show lead info
                        $DB->query("SELECT title,url FROM mnrc_news LIMIT 0,8");
                        $leadInfo = $DB->fetchAll();
                       
                            $leadInfonums = 1;
                                foreach( $leadInfo as $v ){
                               
                                    $fread = str_replace( "{l[title][$leadInfonums]}" , $v["title"] , $fread );
                                        $fread = str_replace( "{l[url][$leadInfonums]}" , $v["url"] , $fread );
                                        $leadInfonums++;
                               
                                }
                               
                        // show exhibit meeting
                        $DB->query("SELECT title,url FROM mnrc_news WHERE sortID = '500' ORDER BY tid DESC LIMIT 0,6");
                        $hot = $DB->fetchAll();
                       
                            $hotnums = 1;
                                foreach( $hot as $v ){
                               
                                    $fread = str_replace( "{z[title][$hotnums]}" , $v["title"] , $fread );
                                        $fread = str_replace( "{z[url][$hotnums]}" , $v["url"] , $fread );
                                        $hotnums++;
                               
                                }
                               
                                //替换结束,关闭打开的文件
                                fclose($fp);
                               
                                ############################################  OVER REPLACE  #############################################

                                //下面要开始生成静态文件了
                               
                                      ///////////////////// 定义目录名,如 article/2006-11/
                                $artDir = "../article/";
                                $artDir.= date("Y-m")."/";
                       
                                      //////////////////// 如果还没该目录则自动创建       
                                if( !file_exists( $artDir ) ){
                                    mkdir( $artDir , 0777 );
                                }
                                //// 文件地址,文件名如 22-12345.htm   这样整个URL就如 2006-11/22-12345.htm
                                 //////////////////////////// 比较好区分点
                                $url = date("Y-m") . "/" . date("d") . "-" . substr( mktime() , -5 ) . ".htm";
                                 //////////////////////////  打开文件,这里当然是没有的,自动创建一个,为空0
                                $f = fopen( "../article/".$url , "w");
                                /////////////////////////// 把替换后的文件写入创建的文件中
                                fwrite( $f , $fread );
                              ////////////////////////// 关闭文件
                                fclose($f);
                               
                // 到这里已经生成了静态文章了,效果还算不错,感觉方法不太好就是了 @@@@@@@@@@@@@@@@
                        //最后插入数据库,就是一件很惬意的事情了
                        // INSERT INTO DATABASE
                                       
                        $DB->query("INSERT INTO mnrc_news values('$sortID','$tid','$title','$author',
                        '$url','$is_show','$ptime','$is_hot')");
                       
                        ($DB->affRow() > 0) ? $this->goto("添加新闻成功") : $this->goto("操作失败");
                       
                                               
                }else{  //如果没有提交表单,显示增加新闻界面
               
                    $tpl = new SmartTemplate("admin/addArt.htm");                       
                        $DB->query("SELECT * FROM mnrc_news_sort");
                        $res = $DB->fetchAll();
                        foreach( $res as $k => $v ) {
                             $res[$k] = $v;         
                        }
                        $tpl->assign( "SORTINFO" , $res );                       
                        $tpl->output();
               
                }
               
        }


        ///////////////////////////////////////////
      
       实现有多种方式,我的也只是其中不太好的一种,所以各位看了后,给出个意见,一起提高吧,也算是给我鼓励
      我现在还有好多东西要做,这个月底走人,老板恨不得我能象机器一样24小时加班.......

[ 本帖最后由 kfq-3456 于 2006-11-22 11:22 编辑 ]

学习,学习
毕业了。。。

楼上的为什么不说两句啊
我用了你的邮件类,感觉不错呀

虽然看不懂还是顶吧.

菜鸟学习了,呵呵!

我就是这里的产品分类生成跟产品增加的时候 这俩个生成搞不清楚了哦