【问题标题】:How to add a new custom link using PHP "if" and "else", in OpenCart 1.5.5.1?如何在 OpenCart 1.5.5.1 中使用 PHP“if”和“else”添加新的自定义链接?
【发布时间】:2013-05-25 03:25:00
【问题描述】:

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

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

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

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

这是我当前的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';
?>

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

..我想让 sign Up! 链接在用户登录时变为 Logout。

我还不知道 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 } ?>

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

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

【问题讨论】:

  • 我已经简化了示例标记以便更好地展示和解释。应删除登录用户名(客户端之一)下方的“注销”链接菜单。因为当用户登录时,应回显注销链接菜单以代替“注册”链接菜单。
  • @shadyyx 问题已解决。我想我必须先学习 PHP,然后再学习 PHYTON。

标签: php twitter-bootstrap opencart


【解决方案1】:

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

我将仅显示 Sign Up! 链接,登录后,我将仅显示具有所需 LogoutMy Account 菜单/strong> 链接(就像现在一样)。

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

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

我们可以稍微修改您的顶部导航栏...如果没有用户登录,则条件&lt;?php if (!$logged) { ?&gt;适用,因此在其中我们将显示注册!链接,然后是@987654323如果有用户登录,@ 就会被应用。因此我们将把 My Account 菜单移到那里。此代码只是一个示例(因为您没有向我们提供导航栏源代码...):

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

现在你应该完成了。

【讨论】:

  • 谢谢,就像我说的...我只是在编辑主题,所以我只是重新定位菜单并使用当前的菜单链接。您的建议很棒,因为您也提供了代码。这对我来说是一种享受。
  • 不客气。我希望这将帮助您解决问题。如果您需要进一步的帮助,最好向我们提供您目前已修改的顶部导航栏代码...祝您好运!
  • 我修改了一下,菜单。根据您的意见。 “我的帐户”菜单仅对登录用户显示。除结账菜单和购物车外,大多数文本链接都可以正常工作。购物车菜单被重定向到未找到的页面,而结帐菜单正在重定向到购物车。注销菜单工作正常。不太了解,如何修改controller中的header.php文件。
  • @shadyyyx 完美!这正是我想要完成的。正是我所想的逻辑。 PHP 变量完全符合我的想法。非常感谢!问题解决了!我的模板中没有代码$this-&gt;data['checkout']...,所以我添加了它。这就是我无法访问结帐的原因。哦,男孩...我需要一些 PHP 技能...顺便说一下,如果我想将用户重定向到他/她登录的页面,是否需要付出巨大的努力? '因为现在,用户登录后,页面被重定向到我的帐户页面。
  • 除非您可以在侧边栏中访问登录表单(因此在每个页面上),否则用户只能在结帐期间或从account/login 页面登录。当他已经登录时将用户重定向回登录页面(account/login)没有任何意义。无论如何,我认为重定向到我的帐户页面没什么大不了的。您可以编辑 catalog/controller/account/login.php - index() 方法并检查调用方法 redirect 的部分 - 然后您可以更改它重定向到的 URL .
猜你喜欢
  • 1970-01-01
  • 2015-06-21
  • 1970-01-01
  • 1970-01-01
  • 2013-07-13
  • 2013-11-16
  • 1970-01-01
  • 2018-04-24
  • 1970-01-01
相关资源
最近更新 更多