我正在编辑一个名为 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_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');
我已经重新标记了我的菜单,根据shadyxx的意见,我已经改变了菜单。因此,对于“未登录用户”...此菜单应该回显......
这样标记:
<div class="nav-collapse collapse">
<ul>
<li><a href="#">Login</a></li>
<li><a href="#">Register</a></li>
</ul>
</div>
对于LOGGED-IN USERS,此菜单应该回应......
这样标记:
<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 } ?>
因此,使用上述代码无法正常工作的是结帐菜单。结帐菜单将用户重定向到购物车页面。
我只是复制粘贴上面的代码。我试图了解现有代码的使用情况以及反复试验。
答案 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_register
和text_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();
}
现在你应该完成。