首页 » ZenCart » ZenCart分析 » 阅读文章
ZenCart页面链接输出函数:zen_href_link()分析
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')
声明: 本文由Ezencart原创,转载请保留链接:ZenCart页面链接输出函数:zen_href_link()分析
评论 共1条 (RSS 2.0) 发表评论
为什么我的多语言url 不随/fr/, /es/改变。 全是和/en/一样
en/abc-p-1.html, fr/abc-p-1.html, es/abc-p-1.html.
abc 需要根据语言的不同变化