1

OpenCart 1.5.5.1 にインストールされているAquaCartという名前のテーマを編集しています。Twitter Bootstrapの固定トップ ナビゲーション バーも統合しました。すでにナビゲーションバーを変更して、そこにログイン/ログアウトメニューを配置しましたが、問題なく動作しています。このプロジェクトは、自分のオンライン ストア用です。

PHP のスキルはまだなく、HTML+CSS しかありません。header.tpl現在のテーマのファイルからコードをコピーし、ファイルを編集することで、新しいナビゲーション バー メニューにログイン/ログアウト ボタンを配置することができましたheader.php(からcatalog\english\common\header.php)。

今、私はメニューを磨いており、サインアップという名前のカスタムメニュー/リンクを追加したいと考えていました! . このサインアップが欲しいユーザーがすでにログインしているときにログアウトリンクとして表示されるメニュー リンク。

私の現在の編集では、ログインしているユーザーの名前が に<li>表示され、ログアウト メニューが 2 番目に表示されます<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';
?>

上記のコードは次のようにレンダリングされます...

..そして、サインアップしたかったのです!ユーザーがログインしているときにログアウトになるリンク。

ここに画像の説明を入力してください

私はまだ 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

IMHO、ログインしているユーザーがいない場合はマイアカウントリンクを表示したくありません...訪問者(ログインしていないユーザー)に表示する意味がないためです。

サインアップのみを表示します。リンクを作成し、ログインした後、目的のログアウトリンクを含む[マイ アカウント] メニューのみを表示します(現在のように)。

したがって、現在のテンプレートをそのままにして、このコード ブロックを使用します (提供されています)。

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

上部のナビゲーション バーを少し変更できます...<?php if (!$logged) { ?>ログインしているユーザーがいない場合に条件が適用されるため、その中にサインアップを表示します。リンクをクリック<?php } else { ?>すると、ユーザーがログインしている場合に が適用されます。したがって、[マイ アカウント] メニューをそこに移動します。このコードは単なる例です (navbar のソース コードが提供されていないため...):

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

これで完了です。

于 2013-05-30T14:07:56.387 に答える