View Single Post
  #1   IP: 49.87.187.58
Old 2016-04-11, 09:47 AM
Kaweah Kaweah is offline
初级会员
 
Join Date: 2013-08-09
Posts: 1
Kaweah 现在声名狼藉
Default 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 网站在二级目录时,链接的方式

代码分析

Code:
 
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()终止程序
Code:
 
 
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

Code:
 
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 文件中找到。

Code:
 
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来判断链接组成样式

实例
Code:
 
zen_href_link(FILENAME_ADVANCED_SEARCH)
生成搜索页链接

Code:
 
http://www.xxx.com/advanced_search.php
Code:
 
zen_href_link(FILENAME_DEFAULT,'cPath=1_2')
生成一级分类id1下二级分类id2的分类页链接

Code:
  
http://www.xxx.com/index.php?main_page=index&cPath=1_2
Code:
 
zen_href_link(FILENAME_PRODUCT_INFO,'cPath=1_4&products_id=1')
生成一级分类id1下二级分类id4的里的产品id1的产品页链接

Code:
 
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')
Reply With Quote