关于生成html
发布于:2022-01-17 09:50:54
#1 伪海贼迷
关于生成html。使用makeall时。数组时这样:
Array( [0] => Array ( [0] => Array ( [0] => main [1] => newsshow [2] => Array ( [id] => 3 ) ) [1] => blog_3.html ) [1] => Array ( [0] => Array ( [0] => main [1] => newsshow [2] => Array ( [id] => 4 ) ) [1] => blog_4.html ) [2] => Array ( [0] => Array ( [0] => main [1] => newsshow [2] => Array ( [id] => 5 ) ) [1] => blog_5.html ))makeall是使用foreach生成。那么,当你第一个页面时。其他的页面都没有生成,那么,在他那里其他页面的链接自然是动态的链接,当生成第二个时,因为第一个已经生成了。所以第一个的链接是静态的,请问一定会这样的吗?还是我理解错了。如果是这样的问题。那应该怎么解决?我以前也是这样,不过没有解决掉。想不明白。。
2012-08-04 11:14:26
#2 jake
大概明白你的意思。可以打开makeAll函数的代码看看,makeAll会有两次foreach循环的操作。
第一次foreach循环,会在临时表中记录当前需要生成的页面的静态URL,而不是真实生成文件。
第二次循环,会生成全部的静态文件,当然,每个文件里面使用的地址,都会根据第一次生成的临时表的静态地址。
2012-08-04 12:52:15
#3 伪海贼迷
jake 发表于 2012-8-4 12:52
大概明白你的意思。可以打开makeAll函数的代码看看,makeAll会有两次foreach循环的操作。
第一次foreach循 ...
例如有id=3,4,5;通过
$urls = array();
$guestbook = spClass("m_cases");
if( $result = $guestbook->findAll() ){ // 获取到全部的留言来进行spUrl的构造
foreach($result as $value){ // 循环
$lujin='blog_'.$value['id'].'.html';
$urls[] = array(array('main','show',array('id'=>$value['id'])),$lujin); // 这里和spUrl的参数是相同的
}
}
spClass('spHtml')->makeAll($urls); // 使用makeAll来制作
我是用这样的方法生成的。但是结果就是错。帮我看看那里有问题。。生成之后。第一个是blog_3.html,但是里面blog_4.html页面的链接依然是/index.php?c=main&a=show&id=4。生成的第二个时blog_4.html。里面blog_3.html的链接就是静态的。但是blog_4.html/blog_5.html、的链接依然是动态的。搞不懂。。基础不好。麻烦了
2012-08-04 22:53:23
#4 伪海贼迷
jake 发表于 2012-8-4 12:52
大概明白你的意思。可以打开makeAll函数的代码看看,makeAll会有两次foreach循环的操作。
第一次foreach循 ...
还有。生成整站的时候是把全部的链接都写在数据里面然后makeAll就可以吗?我看了好多帖子。。从最底层向外层生成?
2012-08-04 22:55:49
#5 jake
这里有个小问题,就是参数对应的问题。id应该是数值类型的,但这种或许把它当作字符串了。(又或者反之,要看$value['id']的类型),所以可以尝试:
'id'=>(int)$value['id']
或者
'id'=>(string)$value['id']
每次测试前,要把tmp下面清空。
对了,手册里面有例子源码,可以作为参考:
http://www.speedphp.com/optimize-html-pager.html
2012-08-04 23:07:59
#6 azwl
我也是这个问题困扰着:
首页是动态的,有a页面链接,a页面中有b1,b2,b3链接,现在a,b页面4个都生成了,就是a中的b1,b2,b3还是动态链接。但动态首页中的a链接是静态的。
id是整数字符串都试过了就是不行
2012-08-05 16:06:01
#7 jake
azwl 发表于 2012-8-5 16:06
我也是这个问题困扰着:
首页是动态的,有a页面链接,a页面中有b1,b2,b3链接,现在a,b页面4个都生成了,就 ...
打开那个临时文件看看,
我测试过好多次,已知两个问题会导致不能生成:
1. 数值类型参数对应不上。
2. 重新生成时,没有删除临时问题。
2012-08-05 16:15:14
#8 azwl
总算OK了,确实是数据类型问题,生成的url列表中看到一个参数用""括号,另一个没用,就针对""的用(int),哪知道另一个也要用(int)才可以。
建议还是修改一下,一般在make时可以注意到int问题,但在模板中一般不会注意的。
是否把那个json_encode替换掉。
另外a页面中有指向a本身的连接,要加入urls两次才OK
2012-08-05 16:58:05
#9 azwl
建议把
$args = !empty($args) ? json_encode($args) : '';
改成类似
$t='';
if (!empty($args)) foreach($args as $key=>$v) $t=$t.$key.$v;
$args=$t;
2012-08-05 17:18:37
#10 jake
json_encode没有什么好的替代方案啊,之前是用序列化的,更不好。
makeAll会循环两次的,不过不清楚有没有什么问题。
mark一下,后面研究研究看看。估计spHtml需要独立成扩展才好。
2012-08-05 21:07:37
#11 伪海贼迷
azwl 发表于 2012-8-5 16:06
我也是这个问题困扰着:
首页是动态的,有a页面链接,a页面中有b1,b2,b3链接,现在a,b页面4个都生成了,就 ...
你好。能不能贴你生成的代码给我看看。。我改了。。还是不可以。。
2012-08-05 22:33:41
#12 伪海贼迷
azwl 发表于 2012-8-5 16:06
我也是这个问题困扰着:
首页是动态的,有a页面链接,a页面中有b1,b2,b3链接,现在a,b页面4个都生成了,就 ...
搞定了。。不用了
2012-08-05 22:42:53
#13 azwl
jake 发表于 2012-8-5 21:07
json_encode没有什么好的替代方案啊,之前是用序列化的,更不好。
makeAll会循环两次的,不过不清楚有没有 ...
我把spView.php 中setUrl和getUrl中的json_encode改成如下代买就没有问题了
$t='';
if ($empty($args)) foreach($args as $k=>$v) $t.=$k.$v;
$args=$t;
我估计是json_encode或序列化时会判断数据类型而加上"",导致makehtml时和spUrl产生的$args不同.
所以直接把$args拼接成字符窜就没有问题了。
2012-08-05 22:48:43
#14 jake
azwl 发表于 2012-8-5 22:48
我把spView.php 中setUrl和getUrl中的json_encode改成如下代买就没有问题了我估计是json_encode或序列化 ...
之前拼装方式也考虑过,不过在疑惑是否会出现参数相同的情况,另外还会有个问题是如果在使用spUrl的时候,参数顺序不一致,或许也会有问题。
不过好像现在的方式,参数顺序不一致,也会有问题~~~
2012-08-06 08:57:39
#15 azwl
jake 发表于 2012-8-6 08:57
之前拼装方式也考虑过,不过在疑惑是否会出现参数相同的情况,另外还会有个问题是如果在使用spUrl的时候 ...
我测试了一下,好像可以直接用数组的方式比较,下面的数组$a1,$a2是相等的。
$a1=array('a'=>1,'b'='2');
$a1=array('b'=>2,'a'='1');
if ($a1==$a2) echo "true"
结果是输出true
2012-08-09 09:34:14
#16 jake
azwl 发表于 2012-8-9 09:34
我测试了一下,好像可以直接用数组的方式比较,下面的数组$a1,$a2是相等的。
$a1=array('a'=>1,'b'='2') ...
{:soso_e179:}
2012-08-09 12:19:50
#17 QingLin
azwl 发表于 2012-8-5 22:48
我把spView.php 中setUrl和getUrl中的json_encode改成如下代买就没有问题了我估计是json_encode或序列化 ...
这个方法 解决了 带参数的分页html生成后还是动态地址的问题
2014-01-23 17:07:59