如何在OpenCart 1.5.5.1中使用PHP“if”和“else”添加新的自定义链接?

时间:2013-05-25 03:25:01

标签: php twitter-bootstrap opencart

我正在编辑一个名为 AquaCart 的主题,安装在OpenCart 1.5.5.1中。我还整合了Twitter Bootstrap的固定顶部导航栏。我已经修改了导航栏并将登录 / 注销菜单放在那里,而且它运行正常。这个项目是我自己的网上商店。

我还没有任何PHP技能,只有HTML + CSS。我已经设法通过复制当前主题的header.tpl文件中的代码并编辑header.php文件(来自catalog\english\common\header.php),将登录/注销按钮放在我的新导航栏菜单上。

现在,我正在抛光菜单,想要添加一些名为注册的自定义菜单/链接。 我希望此注册!菜单链接在用户已登录时显示为注销链接。

我当前的编辑显示<li>中已登录用户的名称,以及第二个<li>中的注销菜单。这不是我真正想要的。我希望在用户登录时显示注销链接以代替注册!链接。

这是我当前的header.tpl编辑:

<ul>
    <ul>
        <li>
            <a href="#">My Account</a><!--Shall be shown only when user is logged in-->
                <ul>
                    <?php if (!$logged) { ?>
                    <?php echo $text_welcome; ?>
                    <?php } else { ?>
                    <?php echo $text_logged; ?>
                    <?php } ?>
                    <li class="divider"></li>
                    <li><a href="#">Store Front</a></li>
                    <li><a href="#">Blog Page</a></li>
            </ul>
        </li>
        <li><a href="index.php?route=account/register">Sign Up!</a></li>
    </ul>
</ul>

我的header.php来自opencart的catalog \ language文件夹。 text_loggedtext_welcome已经过编辑。

<?php
    // header.php from catalog\language\english\common\header.php
    $_['text_home']           = 'Online Shop';
    $_['text_wishlist']       = 'Wish List (%s)';
    $_['text_shopping_cart']  = 'Shopping Cart';
    $_['text_search']         = 'Search';
    $_['text_welcome']        = '<li><a href="%s">Login</a></li>
                                 <li><a href="index.php?route=account/register">Sign Up!</a></li>';
    $_['text_logged']         = '<li><a href="%s">%s</a></li>
                                 <li><a href="%s">Logout</a></li>';
    $_['text_account']        = 'My Account';
    $_['text_checkout']       = 'Checkout';
?>

上面的代码就这样呈现......

..我想在用户登录时将注册链接变为注销

Enter image description here

我还不知道PHP,但我正在努力研究OpenCart安装的PHP文件,并且我在header.php中的catalog\controller\common文件中找到了这个字符串:

$this->data['text_logged'] = sprintf($this->language->get('text_logged'), $this->url->link('account/account', '', 'SSL'), $this->customer->getFirstName(), $this->url->link('account/logout', '', 'SSL'));

我正在考虑重复这一点,但不知道要复制和修改的内容。还涉及哪些其他文件?


更新:

我现在添加了一个新的文本名称“注册”和“登录”,所以我可能不会感到困惑,我可以轻松地将其替换为我的文本链接。

到目前为止..我已添加:在我的catalog\english\common\header.php

$_['text_login']  = 'Login';
$_['text_signup']  = 'Sign Up!';

在我的catalog\controller\header.php

$this->data['text_login'] = $this->language->get('text_login');
$this->data['text_signup'] = $this->language->get('text_signup');

更新2:

我已经重新标记了我的菜单,根据shadyxx的意见,我已经改变了菜单。因此,对于“未登录用户”...此菜单应该回显......

Enter image description here

这样标记:

<div class="nav-collapse collapse">
    <ul>
        <li><a href="#">Login</a></li>
        <li><a href="#">Register</a></li>
    </ul>
</div>

对于LOGGED-IN USERS,此菜单应该回应......

Enter image description here

这样标记:

<div>
    <ul>
        <ul>
            <li>
            <a href="#">Account></b></a>
            <ul>
                <li>%s</a></li>
                <li class="divider"></li>
                <li>Shopping Cart</a></li>
                <li>Checkout</a></li>
            </ul>
        </li>
        <li>Logout</a></li>
        </ul>
    </ul>
</div>

在我的catalog\controller\common\header.php

$this->data['signup'] = sprintf($this->language->get('text_signup'), $this->url->link('account/register', '', 'SSL'));
$this->data['login_register'] = sprintf($this->language->get('text_login_register'), $this->url->link('account/login', '', 'SSL'), $this->url->link('account/register', '', 'SSL'));
$this->data['logged_in'] = sprintf($this->language->get('text_logged_in'), $this->url->link('account/account', '', 'SSL'), $this->customer->getFirstName(), $this->data['text_shopping_cart'] = $this->language->get('text_shopping_cart'), $this->data['shopping_cart'] = $this->url->link('checkout/cart'), $this->url->link('account/logout', '', 'SSL'));

在我的目录\ language \ english \ common \ header.php

$_['text_login_register']
= '<div>
     <ul>
         <li>Login</a></li>
         <li>Register</a></li>
     </ul>
   </div>';

$_['text_logged_in']
= '<div>
       <ul>
           <ul>
               <li>
                   <a href="#">Account<b class="caret"></b></a>
                   <ul>
                       <li><a href="%s">%s</a></li>
                       <li class="divider"></li>
                       <li><a href="%s">Shopping Cart</a></li>
                       <li><a href="%s">Checkout</a></li>
                   </ul>
               </li>
               <li><a href="%s">Logout</a></li>
           </ul>
       </ul>
   </div>';

在我的header.tpl

<?php if (!$logged) { ?>
<?php echo $login_register; ?>
<?php } else { ?>
<?php echo $logged_in; ?>
<?php } ?>

因此,使用上述代码无法正常工作的是结帐菜单。结帐菜单将用户重定向到购物车页面。

我只是复制粘贴上面的代码。我试图了解现有代码的使用情况以及反复试验。

1 个答案:

答案 0 :(得分:0)

恕我直言,当没有用户登录时,您不希望拥有我的帐户链接...因为为访客显示没有任何意义(未登录的用户)。

我只会显示注册!链接,登录后,我只会显示我的帐户菜单,其中包含所需注销< / strong>链接(现在就是这样)。

因此请按原样保留当前模板,并使用此代码块(您已经提供给我们):

<?php if (!$logged) { ?>
<?php echo $text_welcome; ?>
<?php } else { ?>
<?php echo $text_logged; ?>
<?php } ?>

我们可以稍微修改您的顶部导航栏...条件<?php if (!$logged) { ?>适用于没有用户登录的情况,因此我们会在其中显示注册!链接,然后是如果有用户登录,则<?php } else { ?>会被应用。因此,我们会在那里移动我的帐户菜单。这段代码只是一个例子(因为你没有向我们提供导航栏源代码......):

<ul id="top-navbar>
    <?php if (!$logged) { /* only visitor */?>
    <li><a href="<?php echo $signup; ?>"><?php echo $text_signup;?></a></li>
    <?php } else { /* logged in user */?>
    <li><span>My Account</span>
        <ul class="sub-menu">
            <li><span><?php echo $text_logged; ?> <?php echo $logged_username; ?></span></li>
            <li><a href="<?php echo $logout; ?>><?php echo $text_logout; ?></a></li>
        </ul>
    </li>
    <?php } ?>
</ul>

在您的控制器中,您必须将语言字符串,URL和用户名推送到模板,在语言文件中,您必须添加菜单所需的文本字符串(如果您还没有这么做...)


修改

你的想法很好,但方法不是。不要将HTML放入语言文件或控制器中,除非确实有必要或没有其他可能的方法(可能不会发生,如果是,则有问题)。

因此,将所有HTML放入模板文件(header.tpl)并使用PHP变量:

<?php if (!$logged) { ?>
<div>
    <ul>
        <li><a href="<?php echo $login; ?>"><?php echo $text_login; ?></a></li>
        <li><a href="<?php echo $signup; ?>"><?php echo $text_signup; ?></a></li>
    </ul>
</div>
<?php } else { ?>
<div>
    <ul>
        <li>
            <a href="#"><?php echo $text_account; ?><b class="caret"></b></a>
            <ul>
                <li><a href="<?php echo $account; ?>"><?php echo $username;?></a></li>
                <li class="divider"></li>
                <li><a href="<?php echo $shopping_cart;?>"><?php echo $text_shopping_cart; ?></a></li>
                <li><a href="<?php echo $checkout; ?>"><?php echo $text_checkout; ?></a></li>
            </ul>
        </li>
        <li><a href="<?php echo $logout; ?>"><?php echo $text_logout; ?></a></li>
    </ul>
</div>
<?php } ?>

现在已经定义了许多URL和文本,因此我们只需添加其中的几个。

打开您的语言文件(catalog\language\english\common\header.php)并添加/修改这些文件:

$_['text_login'] = 'Log In';
$_['text_signup'] = 'Register';
$_['text_logout'] = 'Log Out';

您可以删除之前的text_login_registertext_logged_in变量及其值。

现在打开控制器(catalog\controller\common\header.php)并找到以此行结尾的部分:

$this->data['checkout'] = $this->url->link('checkout/checkout', '', 'SSL');

然后,添加以下行:

$this->data['text_login'] = $this->language->get('text_login');
$this->data['text_signup'] = $this->language->get('text_signup');
$this->data['text_logout'] = $this->language->get('text_logout');

$this->data['login'] = $this->url->link('account/login', '', 'SSL');
$this->data['signup'] = $this->url->link('account/register', '', 'SSL');
$this->data['logout'] = $this->url->link('account/logout', '', 'SSL');

$this->data['username'] = '';
if($this->customer->isLogged()) {
    $this->data['username'] = $this->customer->getFirstName() . ' ' . $this->customer->getLastName();
}

现在你应该完成。