1

我正在编辑一个名为AquaCart的主题,安装在 OpenCart 1.5.5.1 中。我还集成了 Twitter Bootstrap的固定顶部导航栏。我已经修改了导航栏并将登录/注销菜单放在那里,它做得很好。该项目适用于我自己的在线商店。

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

现在,我正在完善菜单并想添加一些名为Sign Up 的自定义菜单/链接!. 我想要这个注册!当用户已经登录时,菜单链接显示为注销链接。

我当前的编辑在 a 中显示登录用户的名称,<li>在 second 中显示注销菜单<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 的目录\语言文件夹。text_logged并且text_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';
?>

上面的代码是这样渲染的......

..我想注册!当用户登录时,链接变为注销

在此处输入图像描述

我还不知道 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 的意见,我重新标记了我的菜单,我稍微更改了菜单。所以对于“未登录的用户”......这个菜单应该被呼应......

在此处输入图像描述

标记如下:

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

对于已登录的用户,应回显此菜单...

在此处输入图像描述

标记如下:

<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 } ?>

所以,什么不工作,使用上面的代码是结帐菜单。结帐菜单将用户重定向到购物车页面。

我刚刚复制粘贴了上面的代码。我试图通过反复试验来了解现有代码的使用。

4

1 回答 1

0

恕我直言,当没有用户登录时,您不想拥有“我的帐户”链接……因为向访问者(未登录的用户)显示是没有意义的。

我只会显示注册!链接,登录后,我将只显示具有所需注销链接的“我的帐户”菜单(就像现在一样)。

所以保持你当前的模板不变,并使用这个代码块(你给我们):

<?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();
}

现在你应该完成了。

于 2013-05-30T14:07:56.387 回答