トップページにログインフォームを作成したい
kemshim > トップページにログインフォームを作成したい @ 2014/8/4 11:06 |
---|
お世話になっております。
現在、blue_aquaというテンプレートを利用して、webサイトを作成しています。 トップページにログインフォームを作成して、会員のみが閲覧出来るページ(固定ページ)を1つ作成したいと思っております。 イメージとしては、以下のようなものです。 http://mirrenta.com/mypage/users/login ですが、当方PHPの知識が乏しく、うまく作成することが出来ません。 以下のフォーラムで希望する状態に近いものを見つけたのですが、その中のアドバイスを含めてコードを入力してみるとエラーが出てしまいます。 トップページのサイドバーにログインフォームを設けたい|フォーラム|baserCMSユーザーズ : http://forum.basercms.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=887&forum=5 出力されるエラーは以下のようなものです。
以下のコードに問題があることは分かるのですが、どのように対処すべきなのかが分からずご質問させていただきました。
お手数おかけしてすみませんが、どなたかご教授いただけないでしょうか。 よろしくお願い致します。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/4 16:42 |
---|
kemshim 様
こんにちは。 参考に挙げられている質問と回答はbaserCMS2系の場合ですね。 ログインフォームを出力しているのはBcFormHelperという名前のHelperなのですが、 baserCMS3系ではViewで利用するHelperの呼び出し方が変更されています。 $helperName → $this->HelperName $bcFormをすべて$this->BcFormと置換すればいかがでしょう? Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/4 17:24 |
---|
n1215 様
ご返信いただきましてありがとうございます。 早速教えてもらった方法で試してみたのですが、今度は以下のような形になってしまいました。。
エラーメッセージから、userModelという変数が利用されていないのが原因、ということはなんとなく理解できるのですが、そこからの対処方法がわかりません。 お手数おかけいたしますが、よろしくお願い致します。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/4 19:10 |
---|
kenshim 様
作成しようとしている会員制サイト?のより詳細な仕様をお聞かせいただけますか? 例) ・会員はCMS自体の管理ユーザとは別に用意する ・会員の新規登録はメールフォームで申請され、管理者がユーザーを手動登録 ・会員用の固定ページがとあるURLに用意されていてログインした会員のみ閲覧可能 baserCMSにはプレフィックス認証機構が用意されており とあるディレクトリ(例:http://example.com/mysite/)以下のページは特定のユーザグループに所属するユーザのみアクセス可能、という形のサイトであれば実装の手間をかなり省くことができます。 この機構を利用する場合、テーマのテンプレートだけでは完結せず、設定ファイルなどもいじる必要があります。 この機構を利用しない場合はCakePHPによる独自開発が必要です。 ●参考URL baserCMS3系における同様の質問:http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1525&forum=5#forumpost5760 マイページ用のログイン認証を簡単に作る方法(baserCMS1系):http://basercms.net/develop/archives/11 上記参考URLを読んでいただければ実装の難易度はおおよそ見当がつくかと思いますが、 どちらかというと万人向けではなく開発者向けの機能です。 Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/4 19:39 |
---|
n1215 様
返信いただき有り難うございます。 作成しようとしているサイトの概要は以下のようなものです。 ・スポーツスクールのホームページ ・会員のみが見られるページを作成し、そこに管理者が会員向けにアドバイス等を記載 ・会員専用のページは、個別ページにて作成(出来れば管理者本人が簡単に更新できるもの) n1215様がおっしゃっている例で言うと、以下の二つが該当するかと思います。 ・会員はCMS自体の管理ユーザとは別に用意する ・会員用の固定ページがとあるURLに用意されていてログインした会員のみ閲覧可能 ・会員の新規登録はメールフォームで申請され、管理者がユーザーを手動登録 →こちらに関しては必須ではなく、出来ればというレベルです。 引用: baserCMS3系における同様の質問:http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1525&forum=5#forumpost5760 上記記事も参考にさせていただきました! 結果、管理者以外のユーザーの登録、それによるログイン、ログイン後のページ出力までは出来たのですが、 最初にご質問させていただいたような問題点が出てきてしまいました。その為、質問させていただいた次第です。 私としてはPHPも初心者で、わからないことだらけで申し訳ありませんが、 何卒よろしくお願いいたします。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/4 20:12 |
---|
kemshim 様
会員のログインは既に実装されていたのですね。失礼しました。 すでに会員ログイン画面を実装されているのであれば、 トップページのテンプレートにおいて、会員ログイン画面のテンプレートと同様の処理を行う (同じ変数を揃えた上で同じフォームのHTMLを出力する)というだけの話になるかと思います。 /lib/Baser/View/Members/mypage/login.php が会員ログイン画面のテンプレートですよね。 (テーマ内にこのファイルをコピーしている場合はコピーしたファイル優先ですが) このテンプレートはデフォルトの状態では、 /lib/Baser/View/Users/admin/login.php をインクルードするので、ログインフォームの出力は管理ユーザーログイン画面のテンプレートを参考にすればいいことがわかります。 /lib/Baser/View/Users/admin/login.php を見ていただくと、14行目〜21行目あたりに変数$userModelと$userControllerを設定する処理があります。 Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/7 13:14 |
---|
n1215 様
返信が遅くなって申し訳ありません。 アドバイス頂いたのち、色々と試してみたのですが、うまく行きませんでした… 恥ずかしながらアドバイスの意味についてご質問なのですが、 引用: すでに会員ログイン画面を実装されているのであれば、 上記のアドバイスのうち、「同じ変数を揃えた上で同じフォームのHTMLを出力する」とは、
のうち、どの変数をどちらと揃える必要があるのでしょうか。 本当に初心者の質問ですみません。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/8 12:18 |
---|
kemshim 様
baserCMS(ないしCakePHP)ではURLごとに対応するView(テンプレート)が存在することはご存知ですよね? テーマに含まれるテンプレートファイルが優先で、テーマに該当するファイルがない場合は ・baserCMSコア lib/Baser/View/以下 ・プラグイン lib/Baser/Plugin/{プラグイン名}/View以下 などからテンプレートが選ばれます。 詳細は ファイル読み込みの優先順位 http://basercms.net/manuals/3/programmers/3.html をご覧ください。 ●ログイン画面のテンプレート 会員ログイン画面は下記URLの通りに実装されているということでいいんですよね? http://forum.basercms.net/modules/newbb/viewtopic.php?topic_id=1525&forum=5#forumpost5760 baserCMS自体もCakePHP上に構築されていますので、 管理画面やログイン画面にもトップページやブログ投稿のページと同じようにViewテンプレートが存在します。 管理者ログイン画面(http://example.com/admin/users/login) ⇒ lib/Baser/View/Users/admin/login.php 会員ログイン画面(http://example.com/mypage/members/login) ⇒ lib/Baser/View/Members/mypage/login.php となっています。これらの画面にはすでにログインフォームがありますよね? なので、これらのページのテンプレートを参考にして真似してはいかがでしょうかということです。 会員ログイン画面のテンプレートには lib/Baser/View/Members/mypage/login.php
とありますが、これは管理者ログイン画面のテンプレートをそっくりそのまま利用している、というだけです。 そして、管理者ログイン画面のテンプレートがこちらです。これが一番参考になるテンプレートとなります。 lib/Baser/View/Users/admin/login.php https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/View/Users/admin/login.php 長いので全部は掲載しませんが、14〜22行目で$userModelと$userControllerという変数に値が代入されています。
23〜40行目がCSS 42〜122行目までがクレジットの表示などを設定しているJavaScript そして貴方が掲載しているコードは128〜157行目に相当しますね。 128〜157行目には$userModelと$userControllerという変数が何回か利用されていますが、 この部分をコピー&ペーストするだけではその2つの変数は何も設定されていない、というわけです。 変数を設定するには14〜22行目と同じ処理をトップページのテンプレートにも書く必要があります。 Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/8 15:00 |
---|
n1215 様
いつもご返信いただきありがとうございます。 引用: baserCMS(ないしCakePHP)ではURLごとに対応するView(テンプレート)が存在することはご存知ですよね? はい、この点に関しては大丈夫です。 引用: 会員ログイン画面は下記URLの通りに実装されているということでいいんですよね? こちらも上記フォーラム通りに実装しています。ログイン・ログアウトできる事も確認済みです。 引用: 変数を設定するには14〜22行目と同じ処理をトップページのテンプレートにも書く必要があります。 上記の処理を、 app/webroot/theme/{テーマ名}/Layouts/default.php の最初に記載しました。
次に、以下のコードのうち、 basercms/login.php at dev-3 · baserproject/basercms · GitHub : https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/View/Users/admin/login.php 128〜157行目のコードを app/webroot/theme/{テーマ名}/Layouts/default.php に記述した所、見た目としては問題なく表示されました。 ただ、試しに登録したマイページ用ユーザーでログインしようとすると、以下のエラーが出力されます。 引用: UsersController のプライベートメソッド ここでまた止まってしまいました。。。 貴重なお時間を頂いているのに、自力で解決できなくて申し訳ありません。 何卒よろしくお願いいたします。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/8 21:15 |
---|
kemshim 様
お疲れ様です。 ここまでくれば後はトップページと会員ログインページの差異を調べて詰めるということになってきます。 1.ログインにAjaxを用いる 現バージョン(3.0.2)のbaserCMSは管理画面へのログインをAjaxを利用して行っています。(そのうち通常のPOSTに代わるという話もあります) →2014.08.12追記:3.0.5.1でPOSTに変わったようです。 AjaxはJavaScriptのXMLHttpRequestというオブジェクトを利用して画面遷移なしにサーバと通信する技術の総称です。 JavaScript(scriptタグの内部)の$("#BtnLogin").click(function(e){}で囲まれる部分がログインボタンを押した時の処理です。 この部分の処理と依存するjQueryプラグインが必要になります。 2.プレフィックスを指定してログイン先を選択する もう1つ重要なものとして$currentPrefixという変数があります。 これはbaserCMSのControllerからViewに渡されている変数の一つで、URLのプレフィックスを表しています。 通常(プレフィックスなし)は'front'、管理画面なら'admin'、URLのとおりに設定した会員ページならば'mypage'という風になります。 フォームを出力している部分において、この変数と$this->request->params['prefix']の値を利用してログイン先のURLや利用するモデルを選択するようになっています。 該当箇所は https://github.com/baserproject/basercms/blob/dev-3/lib/Baser/View/Users/admin/login.php 17行目
132〜136行目
150〜154行目
ですね。 トップページでは$currentPrefixは'front'と設定されていますが、/mypage/以下の会員ページにログインしたいのでこちらは'mypage'に変更しておきます。 これで$userModelは'Member'、$userControllerは'members'となり、$this->request->params['prefix']の代わりにプレフィックスを直接記入してやればログイン先が希望するURLになるはずです。 以下がコードの例になります。
長くなりましたが以上でいかがでしょうか。 Twitter: @n_1215 |