spUrl的使用方法疑难(我没找到Jake提及或者网友谈到)

#1 snllll

我是这么做的,我使用admin.php作为后台应用的程序入口,index.php是前台的程序入口。
那么我在后台发布了一篇文章,文章列表中点击文章名称,需要打开连接访问前台的文章细节查看页面。
如果使用<{spUrl c=article a=read id=$one.id}>最后的输出结果就是类似于 :admin.php?c=article&a=read&id=2
正确的应该是index.php?c=article&a=read&id=2
我的问题是如何处理呢?

我目前只好在模板中用index.php?c=article&a=read&id=<{$one.id}>的形式。这样做自然是不太好的,比如重新配置了URL规则的话,就需要重新更改这里的代码,不能自动切换。

2010-04-24 02:27:46

#2 snllll

我想到一个方法,就是在Smarty中重新注册一个自己的函数,这样就就避免上面的问题了。不过为了解决找一个URL的问题就搞这么复杂,显然不是个很好的方案,而且,即使注册使用似乎也不能考虑spUrl的自动给url调整功能,也只能是写死的。
如果spUrl能原生解决的话是最好的。

2010-04-24 02:31:50

#3 jake

从应用程序配置中,可以修改此设置:http://speedphp.com/manual/spconfig
'url' => array(
'url_path_base' => '/myapp/index.php'
)
即可。

不过要注意的是:

1. 从逻辑上来说,是哪个入口文件产生的请求,就会从哪个入口文件构造URL,这也是speedphp能够进行多入口文件部署的根本。
2. 使用了'url_path_base' 改变了URL生成的入口文件名称后,speedphp内识别当前应用程序目录的机制就会被覆盖,也就是说,如果你的应用程序是放到/myapp/admin.php这个目录下的,那么你的'url_path_base' 的设置应该是 '/myapp/index.php',前面务必是/开头的路径。
3. 如果直接设置'url_path_base' => '/index.php' ,应该是不行的,这个逻辑问题,会在speedphp 3中解决。

2010-04-24 08:59:25

#4 snllll

回复 3 jake


    这个我研究过了,我认为不能解决我的问题。我实在admin.php中 使用,就一处,如果改了,会改变全局的设置。
我 建议Jake在新版中能够在spUrl中加入一个候选参数,设定该参数可以达到在使用的地方任意设定其他入口程序为基础的链接地址。

我暂时不修改框架 的程序了,改框架虽然可以满足需要,但是给升级带来许多麻烦

2010-04-24 12:36:46

#5 jake

你可以在你所说的那一处,在spUrl函数调用之前,加上
$GLOBALS['G_SP']['url']["url_path_base"] = "新入口地址";

不过如果只有一处的spUrl要改变,直接写地址就好,不需要改框架那么严重。

另外,其实spUrl本身是可以通过
  'launch' => array(
           'function_url' => array(
                        array("类名", "方法"),
              ),
),
的方式来重新定义成你需要的函数的。

2010-04-24 13:09:33