#1 linyhtianwa
我的后台管理放在admin目录下,使用根目录的sp框架。admin里面也使用index.php。
现在做静态生成,遇到的问题是,在后台用spHtml生成的,一直是在admin目录下面,可是我静态想生成的是前台的,所以想让挂靠点是根目录,也就是admin的上级目录。如何做?
2011-03-15 23:50:38
#3 linyhtianwa
问题又来了。在admin里面生成静态时,用的$url数组,生成都是后台的controller,比如:array('main','index')生成的是前台,可是我想生成前台的main-index呢?而且前台的任何controller都生成不了,生成的是找不到该路由!:(
2011-03-15 23:59:04
#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