目录型URL必备之“JS相对地址修正”

2016-07-07 14:55 来源:www.chinab4c.com 作者:ecshop专家



在另一个帖子http://bbs.ecshop.com/thread-149587-1-1.html里我提到解决ECshop目录型url必定要解决的问题(通用解决方法),现在我把我实现ajax,js地址修正的方法共享出来。本方法是通用方法,适用于任何目录型url,不管多少级目录都可以自动调整js地址,移植性好。js代码如下:

  1. function get_relative_url()
  2. {
  3. try{
  4. hosturl=host_url;
  5. }
  6. catch(e){
  7. hosturl='';
  8. }

  9. if(hosturl!='')
  10. {
  11. var url=window.location.href;
  12. url=url.replace(hosturl,'');
  13. return _get_relative_url(url);
  14. }
  15. else{
  16. return '';
  17. }
  18. }
  19. function _get_relative_url(url)
  20. {
  21. var urls=url.split('/');

  22. var result='';

  23. for(var i=0;i<=urls.length-1;i++)
  24. {
  25. if(i!=urls.length-1)
  26. {
  27. result+='../';
  28. }
  29. }
  30. return result;
  31. }
复制代码

使用方法:
1,引入此函数
2,修改js里的地址,地址前一律添加get_relative_url(),例如
var cart_url = 'flow.php?step=cart';修改为var cart_url = get_relative_url()+'flow.php?step=cart';
location.href = 'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;修改为:
location.href = get_relative_url()+'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;
3,在要实现目录化的页面里添加$smarty->assign('host_url',$GLOBALS['host_url']); 'host_url'为你的网站的域名,例如:
http://xxx.xxx.com/
4,在page_header.lbi里添加:
<script type="text/javascript">
var host_url='{$host_url}';
</script>

回答:
其实用<base href="" /> 方法更加简单~~LZ走弯路了
不过还是支持分享

如果是产品页面或产品分类页面要实现目录型url的,修改transport.js文件,添加url=get_relative_url()+url; 这样,如果产品页面是http://xxx.xxx.com/category1/category2/goods-25.html,就可以直接调用添加到购物车的addToCart函数了。




base href=""这个方法只是用来修正页面里的图片,css,js的引用相对地址的,不适用于js的动态地址跳转。我已经测试过了,在网站的根目录建立一个子文件夹,然后把生成的产品分类页的静态页面放入这个文件夹,不添加base href之前,页面的css,js等地址肯定是错的。添加后,可以加产品进入购物车,但是加入后的跳转地址就不正确了。
例如:添加到购物车以后,应该跳转到根目录的flow.php?step=cart,但是实际的跳转地址是子目录下的flow.php?step=cart,这显然不对。

js 文件中的 就加/搞定!





这个也不一定行的通,我刚好遇到这个问题,因为我的电脑上网站不是放到根目录的。这样的话,还是要改为用绝对路径。如果是放到根目录的,是可以的,并且这个方法比较简单。

学习了@

这个方法对SEO很有帮助啊,多谢分享。
请问lz能把修改过的js上传一份么?
有些地方不太会改。
  1. Ajax.call('flow.php?step=add_to_cart', 'goods=' + goods.toJS**tring(), addToCartResp**e, 'POST', 'JSON');

  2. location.href = 'user.php?act=add_booking&id=' + result.goods_id + '&spec=' + result.product_spec;

  3. Ajax.call('user.php?act=collect', 'id=' + goodsId, collectResp**e, 'GET', 'JSON');
复制代码
这样的地址需要改么?
多谢了。

呜呜,主帖怎看不到啦???