web-dev-qa-db-ja.com

ユーザーのログイン時にカスタムリージョンを非表示にし、ユーザーがログアウトすると再び表示されるようにする

私は問題の答えをどこでも探しましたが、見つけることができません。私の目標は、ユーザーがログインするとウェブサイトのカスタム領域を折りたたむ/強制的に非表示にし、ユーザーがログアウトすると再び表示されるようにすることです。または、領域を折りたたむことができない場合は、CSSを介して高さ0で表示するようにスタイル設定した空の領域で領域を置き換えることができます。基本的に、ユーザーのログイン時にカスタムリージョンを非表示にし、ユーザーがログアウトしたときにリージョンが再び表示されるようにします。

その理由は、サイドバーに表示されるのではなく、横のログインバーとして表示されるように、私のWebサイトのログインブロックの変換に最後の手を加えているためです。私はそこに行く道の90%です。ページの最上部にカスタム領域を作成してバーを配置しました。このバーは、Facebookに表示される水平ログインバーのようなものです。しかし、CSSを使用してログインブロックを再フォーマットする際、「パスワードをお忘れですか?」を強制することによって、私が望む外観を実現することしかできませんでした。および「新しいアカウントを作成する」リンクが表示されない(そうでない場合、リンクはパスワードフィールドと「ログイン」ボタンの間にあり、奇妙に見えました)。

しかし、それによってログインヘルプリンクがなくなりました。この問題を解決するために、「ユーザー名」フィールドと「パスワード」フィールドのすぐ下に新しい領域を作成し、「パスワードをお忘れですか?」を格納しました。そして、「新しいアカウントを作成する」リンクは、非常にうまく表示されます。しかし、もちろん、誰かがログインするときはいつでも、それらのリンクは画面に残ります。これは明らかに奇妙です。

ユーザーがログインしたときに新しいリージョンを非表示にし、ユーザーがログアウトしたときに再び表示されるようにする方法を理解する必要があります。また、ヘッダーが2つの新しいカスタム領域のすぐ下にある他の領域を、領域が非表示になったら上に移動して、領域が以前あった領域にギャップホールがないようにします。私はPHPにかなり慣れていないので、私が試したものはかなり間違っているかもしれませんが、これは私が試みたものであり、機能しませんでした-空の領域とのリンクで領域を交換しようとするオプションですユーザーがログインしたとき:

     <?php 
        if(isset($username) == false):
        print render($page['nameofregion1']);
        else: ?></div>
        <div id="region2style">
        <?php print render($page['nameofregion2']);
        endif;
     ?>

ここで、 'region2style'のCSSは "height:0px"に設定され、高さがゼロになっています。私の疑いは、他のエラーの中でも、ここで変数$ userを誤用していることですが、どの変数がDrupalでユーザー名情報を保持しているのか理解できません。これを行うにはもっとエレガントな方法があると確信しています。誰かが私を正しい方向に向けることができれば、私はそれを本当に感謝します。ありがとうございました。

2
Drupguy

Context は、Webサイトのセクションを再構築するための優れたプラグインです。 Delta および Omegaテーマ と組み合わせると、ほぼ全体に基づいてレイアウト全体をオーバーホールできます手作業でコードを編集することなく、任意の条件。

ここにコンテキストとデルタのまともなイントロのチュートリアルがあります。

しかし、それが目的に合わない場合は、.tpl.phpファイルを使用して正しい方向に進んでいます。ユーザーログインの確認は簡単です。最初に変数をグローバル化することを忘れないでください。

<?php
global $user;

if ( $user->uid ) {
  // Logged in user
}
else {
  // Not logged in
}
?>

...中括弧の間に目的のコードを挿入することで、ブロック、リージョン、メッセージなど、テンプレートからアクセス可能なほとんどすべてのものを簡単に切り替えることができます。

これが私の「PRING ALL THE THINGS !!」です。スニペット、$ user変数で試してみます。

<?php global $user; echo '<pre>'.print_r($user, true).'</pre>'; ?>

幸運を!

1
emc

ログインブロックがそのリージョンのonlyコンテンツである場合、Drupalの組み込みのロールベースのアクセス制御を使用するだけで、カスタムモジュール、テンプレートのオーバーライド、またはカスタムコードなしでこれを実現できます。

重要なのは、Drupalは空の領域を表示しないことです。ログインブロックをauthenticated usersにアクセスできないようにすると、ユーザーがログインするとすぐにログインブロックが消えます。 。

Drupal 7と仮定すると、[構造]-> [ブロック]に移動し、[ユーザー]ログインブロックの[構成]をクリックします。次に、[ロール]パネルに移動し、[特定のブロックを表示] anonymousユーザーをこのブロックの表示を許可されている唯一の役割にするための役割.

(この方法はDrupal 6でも機能しますが、ナビゲーションパスが少し異なります。)

1
Free Radical