PDA

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


Kaweah
2016-04-11, 09:47 AM
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')