我们在制作zencart的模板时,经常会遇到需要将zencart的登陆页面与注册账户页面分离的情况(在 默认情况下,点击"Login"按钮会进入登陆页面与注册账号页面,登录zencart之后,Login按钮会变成一组按钮 "Log Out My Account Shopping Cart Checkout")。我们如果要改成这样一种功能:在点击Login的时候,登录页面与注册页面分别显示(即只显示登陆页,在登陆框旁边出现一个注册按 钮),登录成功后,Login按钮变成Login Off,同时底部的Account变成My Account。

其实要实现第一点,即登陆页面与注册账户页面分离,我们只要在后台Admin -> Use split-login page 将 "false"变成"true"就OK了。

接下来的功能实现,要充分利用zencart的登录模块,让我们先看一段代码:

<ul class="back">
//查询用户是否登录
<?php if ($_SESSION['customer_id']) { ?>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_LOGOFF, '', 'SSL'); ?>">
    	<?php echo HEADER_TITLE_LOGOFF; ?></a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'); ?>">
    	<?php echo HEADER_TITLE_MY_ACCOUNT; ?></a>
    </li>
<?php
      } else {
        if (STORE_STATUS == '0') {
?>
    <li>
        <a href="<?php echo zen_href_link(FILENAME_LOGIN, '', 'SSL'); ?>">
    	<?php echo HEADER_TITLE_LOGIN; ?></a>
    </li>
<?php } } ?>
//购物车中商品不能为0
<?php if ($_SESSION['cart']->count_contents() != 0) { ?>
    <li>
    <a href="
    	<?php 
        	echo zen_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'); 
        ?>">
    	<?php echo HEADER_TITLE_CART_CONTENTS; ?></a>
    </li>
    <li>
    <a href="
    	<?php 
        	echo zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'); 
        ?>">
    	<?php echo HEADER_TITLE_CHECKOUT; ?></a>
    </li>
<?php }?>
</ul>

其中 $_SESSION['customer_id'] 是当前登录的用户ID。

$_SESSION['cart']->count_contents()用于判断购物车中是否有商品。

函数zen_href_link( $page,$parameters,$connection,$add_session_id,$search_engine_safe,$static,$use_dir_ws_catalog ),主要用于输出超级链接。使用此函数好处在于使用伪静态插件后,输出链接就会自动伪静态。

$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证书时(空间服务商提供ssl证书,打开ssl设置需要将 \includes\configure.php 和 \admin\includes\configure.php 中的 SSL设定为 enable),就会是https://www.xxx.com/index.php?main_page=login

$add_session_id , url 最后跟了一串形如zenid=XXXXX的内容,这是服务器给每个访客分配一个标识,zencart在服务器上针对每个访客保存一份资料,例如访客最后浏览的页面、时间、购物车里的商品、选择的货币、语言等等.

$search_engine_safe  , 作用是将特殊字符,转换为/

$static  ,静态化参数

$use_dir_ws_catalog  , 网站在二级目录时,链接的方式

既然,我们已经知道了登录按钮出现原理,我们只需要按照登录模块代码的逻辑稍微改一下,就可以实现自己想要的功能了。

<ul class="back">
<?php if ($_SESSION['customer_id']) { ?>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_LOGOFF, '', 'SSL'); ?>">
        <?php echo HEADER_TITLE_LOGOFF; ?>
    </a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_ACCOUNT, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_MY_ACCOUNT; ?></a>
    </li>
<?php
      } else {
        if (STORE_STATUS == '0') {
?>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_LOGIN, '', 'SSL'); ?>">
    <?php echo HEADER_TITLE_LOGIN; ?>
    </a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_CREATE_ACCOUNT, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_CREATE_ACCOUNT; ?>
    </a>
    </li>
<?php } } ?>
<?php if ($_SESSION['cart']->count_contents() != 0) { ?>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_SHOPPING_CART, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_CART_CONTENTS; ?>
    </a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_CHECKOUT_SHIPPING, '', 'SSL'); ?>">
    <?php echo HEADER_TITLE_CHECKOUT; ?>
    </a>
    </li>
<?php }?>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_REVIEWS, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_TESTIMONIALS; ?>
    </a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_CONTACT_US, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_CONTACT_US; ?>
    </a>
    </li>
    <li>
    <a href="<?php echo zen_href_link(FILENAME_GV_FAQ, '', 'NONSSL'); ?>">
    <?php echo HEADER_TITLE_GV_FAQ; ?>
    </a>
    </li>
</ul>

依据上面介绍的zen_href_link()函数,我们可以为顶部与Login按钮并列的地方加入更多的导航按钮。