关于生成html

#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