静态生成时,如何自定义挂靠点?

#1 linyhtianwa

我的后台管理放在admin目录下,使用根目录的sp框架。admin里面也使用index.php。
现在做静态生成,遇到的问题是,在后台用spHtml生成的,一直是在admin目录下面,可是我静态想生成的是前台的,所以想让挂靠点是根目录,也就是admin的上级目录。如何做?

2011-03-15 23:50:38

#2 linyhtianwa

哦。找到办法了。是改个配置参数吧。:)

2011-03-15 23:54:12

#3 linyhtianwa

问题又来了。在admin里面生成静态时,用的$url数组,生成都是后台的controller,比如:array('main','index')生成的是前台,可是我想生成前台的main-index呢?而且前台的任何controller都生成不了,生成的是找不到该路由!:(

2011-03-15 23:59:04

#4 linyhtianwa

哈哈,我改了下框架。可能是我没找到用法。
我先改了下,分享下:

2011-03-16 00:47:59

#5 linyhtianwa

修改spHtml类的make方法成如下(绿色字为修改处):
  public function make($spurl, $alias_url = null,$url=null, $update_mode = 2) {
        if(1 == spAccess('r','sp_html_making') && ($url ==null ||  !$url)) {
            $this->spurls[] = array($spurl, $alias_url);
            return;
        }
        @list($controller, $action, $args, $anchor) = $spurl;
        if(($url ==null ||  !$url) &&  $url_item = spHtml::getUrl($controller, $action, $args, $anchor, TRUE) ) {
            @list($baseuri, $realfile) = $url_item;
            $update_mode = 1;
        }else {
            $file_root_name = ( '' == $GLOBALS['G_SP']['html']['file_root_name'] ) ?
                    '' : $GLOBALS['G_SP']['html']['file_root_name'].'/';
            if( null == $alias_url ) {
                $filedir = $file_root_name .date('Y/n/d').'/';
                $filename = substr(time(),3,10).substr(mt_rand(100000, substr(time(),3,10)),4).".html";
            }else {
                $filedir = $file_root_name.dirname($alias_url) . '/';
                $filename = basename($alias_url);
            }
            if(is_string($url) && $url) {
                $baseuri=$url;
            }else {
                $baseuri = rtrim(dirname($GLOBALS['G_SP']['url']["url_path_base"]), '/\\')."/".$filedir.$filename;
            }

            $realfile = APP_PATH."/".$filedir.$filename;
        }
        $realfile=str_replace('//','/',$realfile);

        if( 0 == $update_mode or 2 == $update_mode )spHtml::setUrl($spurl, $baseuri, $realfile);
        if( 1 == $update_mode or 2 == $update_mode ) {
            if(($url ==null ||  !$url)){
                $remoteurl = 'http://'.$_SERVER["SERVER_NAME"].':'.$_SERVER['SERVER_PORT'].
                        '/'.ltrim(spUrl($controller, $action, $args, $anchor, TRUE), '/\\');
            }else{
                $remoteurl=$url;
            }

            $cachedata = file_get_contents($remoteurl);
            if( FALSE === $cachedata ) {
                $cachedata = $this->curl_get_file_contents($remoteurl);
                if( FALSE === $cachedata )spError("无法从网络获取页面数据,请检查:
1. spUrl生成地址是否正确!点击这里测试
2. 设置php.ini的allow_url_fopen为On。
3. 检查是否防火墙阻止了APACHE/PHP访问网络。
4. 建议安装CURL函数库。");
            }
            __mkdirs(dirname($realfile));
            file_put_contents($realfile, $cachedata);
        }
    }

2011-03-16 00:49:10

#6 linyhtianwa

调用实例(一个测试类,我是使用main-index.html这种形式的,所以直接就在函数用这个了):
class generatehtml extends spController
{
        function index(){
                $url = array("zjbd", "index");
                spClass("spHtml")->make($url,'html/zjbd-index.html',$this->grRootUrl($url),2);
                echo 'success';
        }
        function grRootUrl($arr,$suffix='html'){
           $str=APP_URL.$arr[0].'-'.$arr[1];
           if(isset($arr[2]) and $arr[2]){
               foreach($arr[2] as $key => $val){
                   $str.=$key.'-'.$val;
               }
           }
           return $str.'.'.$suffix;
        }
}

2011-03-16 00:50:35

#7 jake

如果是自行生成HTML,我这里建议两个方式:
1. 直接用file_get_contents的方法来获取和生成。
2. 通过改写配置中,spHtml的getter和setter,那么就不需要改spHtml的代码了

2011-03-16 09:17:55

#8 linyhtianwa

哦。谢谢。

2011-03-26 21:36:12