业务形式:本司专业提供深圳外贸网站建设,外贸网站建设,深圳网站建设,ZenCart模板
环球商务国际 版权所有 ©2005-2014 35EBS.All rights reserved.
粤ICP备05007577号
Processed in 0.017968 second(s) , 38 queries
zen_href_link 函数位于 /includes/functions/html_output.php 文件中,
主要用于输出超级链接。它的参数如下表所示:
$page //这个变量通常由 /includes/filename.php
文件中的常量取得
$parameters
$connection
$add_session_id
$search_engine_safe
$static
$use_dir_ws_catalog
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
function zen_href_link($page = '', $parameters = '', $connection = 'NONSSL', $add_session_id = true, $search_engine_safe = true, $static = false, $use_dir_ws_catalog = true) { global $request_type, $session_started, $http_domain, $https_domain; if (!zen_not_null($page)) { die('</td></tr></table></td></tr></table><br /><br /><b class="note">Error!<br /><br />Unable to determine the page link!</b><br /><br /><!--' . $page . '<br />' . $parameters . ' -->'); } 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 /><b class="note">Error!<br /><br />Unable to determine connection method on a link!<br /><br />Known methods: NONSSL SSL</b><br /><br />'); } if ($use_dir_ws_catalog) { if ($connection == 'SSL' && ENABLE_SSL == 'true') { $link .= DIR_WS_HTTPS_CATALOG; } else { $link .= DIR_WS_CATALOG; } } 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; } } $separator = '&'; while ( (substr($link, -1) == '&') || (substr($link, -1) == '?') ) $link = substr($link, 0, -1); // Add the session ID when moving from different HTTP and HTTPS servers, or when SID is defined if ( ($add_session_id == true) && ($session_started == true) && (SESSION_FORCE_COOKIE_USE == 'False') ) { if (defined('SID') && zen_not_null(SID)) { $sid = SID; // } elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL_ADMIN == 'true') ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) { } elseif ( ( ($request_type == 'NONSSL') && ($connection == 'SSL') && (ENABLE_SSL == 'true') ) || ( ($request_type == 'SSL') && ($connection == 'NONSSL') ) ) { if ($http_domain != $https_domain) { $sid = zen_session_name() . '=' . zen_session_id(); } } } // clean up the link before processing while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); if ( (SEARCH_ENGINE_FRIENDLY_URLS == 'true') && ($search_engine_safe == true) ) { while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); $link = str_replace('&', '/', $link); $link = str_replace('?', '/', $link); $link = str_replace('&', '/', $link); $link = str_replace('=', '/', $link); $separator = '?'; } if (isset($sid)) { $link .= $separator . zen_output_string($sid); } // clean up the link after processing while (strstr($link, '&&')) $link = str_replace('&&', '&', $link); $link = preg_replace('/&/', '&', $link); return $link; } |
第一行代码,定义了 global 变量:
$request_type,$session_started,$http_domain 和
$https_domain。
global 的作用是定义全局变量,但是这个全局变量不是应用于整个网站,而是应用于当前页面,包括 include 或 require 的所有文件。
在函数体内定义的 global 变量,函数体外可以使用,在函数体外定义的 global 变量不能在函数体内使用。
接下来的代码:
1 |
if (!zen_not_null($page)) |
判断传递过来的 $page 变量是否为空。zen_not_null 函数,
看名字猜,应该是判断它的参数不为空。前面加了一个逻辑非符号 !,
这个条件语句的结果应该是,如果 $page 为空,则执行以下代码:
1 |
die('</td></tr></table></td></tr></table><br /><br /><b class="note">Error!<br /><br />Unable to determine the page link!</b><br /><br /><!--' . $page . '<br />' . $parameters . ' -->'); |
输出 die 后面括号的内容,然后中止程序执行。输出内容的后半部分容易理解,就是发出一条无法判断页面链接的警告。前半部分,只有关闭的 html
标签,table 的前面部分标签,还不知道是在哪里,有待研究。
然后,根据 $connection 参数,来决定是 http:// 链接,还是 https:// 链接。
HTTP_SERVER 这个常量可以在 /includes/configure.php 文件中找到,实际就是网站的根目录。
然后把 HTTP_SERVER 这个常量值赋值给 $link 这个变量。
如果 $connection 传递过来的,既不是 NONSSL,也不是 SSL,则会输出错误信息,然后中止执行程序。
判断参数 $use_dir_ws_catalog 是否为真,如果不是,则不执行任何代码,如果为真,执行以下代码:
1 2 3 4 5 |
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 文件中找到。
看一个实例:
1 |
zen_href_link(FILENAME_LOGIN, '', 'SSL'); |
以上代码,将产生以下的超级链接:
1 |
http://localhost/zen-cart/index.php?main_page=login&zenid=aehmrn5v035c3j28ajto20k4d4 |
FILENAME_LOGIN 这个常量在 /includes/filenames.php 文件中被定义。
1 |
define('FILENAME_LOGIN', 'login'); |
接下来将判断 $static 这个变量的真假,如果不为真,则执行以下代码:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
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; } } |