zen-cart网站,模版,采集,二次开发

首页 » ZenCart » ZenCart分析 » 阅读文章

ZenCart页面链接输出函数:zen_href_link()分析

2011-12-14 10:50 40625 1 发表评论
标签:


zen_href_link 函数位于 /includes/functions/html_output.php 文件中,主要用于输出超级链接。使用此函数好处在于使用伪静态插件后,输出链接就会自动伪静态

zen_href_link()它一共有7个参数,但是事实上我们只熟习最常用的3个参数就行了,分别是:$page,$parameters,$connection这个三个

参数介绍

参数 作用
$page 这个变量通常由 /includes/filename.php 文件中的常量取得,
代表的是链接中main_page的值,
如zen_href_link(FILENAME_CONTACT_US) ,即使联系我们页面链接 index.php?main_page=contact_us
$parameters 传递的参数
用&符前面生成的url链接
zen_href_link(’products’, ‘id=1′),那么index.php?main_page=products&id=1
$connection 链接方式
即是否https,默认是http
如zen_href_link(FILENAME_LOGIN, '', 'SSL'),在有SSL证书时,就会是https://www.xxx.com/index.php?main_page=login
$add_session_id url最后跟了一串形如zenid=XXXXX的内容,这是服务器给每个访客分配一个标识,zencart在服务器上针对每个访客保存一份资料,例如访客最后浏览的页面、时间、购物车里的商品、选择的货币、语言等等
$search_engine_safe 作用是将特殊字符,转换为/
$static 静态化参数
$use_dir_ws_catalog 网站在二级目录时,链接的方式

代码分析

    if (!zen_not_null($page)) {
      die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine the page link!</strong><br /><br /><!--' . $page . '<br />' . $parameters . ' -->');
    }

判断传递过来的 $page 变量是否为空,如果 $page 为空,这输出错误提示,并die()终止程序

    if ($connection == 'NONSSL') {
      $link = HTTP_SERVER;
    } elseif ($connection == 'SSL') {
      if (ENABLE_SSL == 'true') {
        $link = HTTPS_SERVER ;
      } else {
        $link = HTTP_SERVER;
      }
    } else {
      die('</td></tr></table></td></tr></table><br /><br /><strong class="note">Error!<br /><br />Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</strong><br /><br />');
    }

是否启用安全链接判断,参数HTTP_SERVER和HTTPS_SERVER在includes/configure.php

    if ($use_dir_ws_catalog) {
      if ($connection == 'SSL' && ENABLE_SSL == 'true') {
        $link .= DIR_WS_HTTPS_CATALOG;
      } else {
        $link .= DIR_WS_CATALOG;
      }
    }

由于 $use_dir_ws_catalog 默认为真,所以将执行以上代码。这个是一个条件语句,如果 $connection 的值为 SSL,并且 ENABLE_SSL 这个常量为真,则把 DIR_WS_HTTPS_CATALOG 这个常量赋值给 $link;否则将把 DIR_WS_CATALOG 这个常量赋值给 $link。ENABLE_SSL,DIR_WS_HTTPS_CATALOG 和 DIR_WS_CATALOG 这三个常量都可以 /includes/configure.php 文件中找到。

    if (!$static) {
      if (zen_not_null($parameters)) {
        $link .= 'index.php?main_page='. $page . "&" . zen_output_string($parameters);
      } else {
        $link .= 'index.php?main_page=' . $page;
      }
    } else {
      if (zen_not_null($parameters)) {
        $link .= $page . "?" . zen_output_string($parameters);
      } else {
        $link .= $page;
      }
    }

通过$static来判断链接组成样式

实例

 zen_href_link(FILENAME_ADVANCED_SEARCH)

生成搜索页链接


http://www.xxx.com/advanced_search.php

 

zen_href_link(FILENAME_DEFAULT,'cPath=1_2')

生成一级分类id1下二级分类id2的分类页链接


http://www.xxx.com/index.php?main_page=index&cPath=1_2

 

zen_href_link(FILENAME_PRODUCT_INFO,'cPath=1_4&products_id=1')

生成一级分类id1下二级分类id4的里的产品id1的产品页链接


http://www.xxx.com/index.php?main_page=product_info&cPath=1_4&products_id=1

产品页链接有更规范的方式:zen_href_link(zen_get_info_page(1) 'cPath=1_4&products_id=1')

相关日志:

评论 共1条 (RSS 2.0) 发表评论

  1. david 说道:

    为什么我的多语言url 不随/fr/, /es/改变。 全是和/en/一样
    en/abc-p-1.html, fr/abc-p-1.html, es/abc-p-1.html.

    abc 需要根据语言的不同变化

发表评论

  • 
  • 插入代码

联系我 Contact Me

回到页首