トップページにログインフォームを作成したい
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/18 22:26 |
---|
kemshim 様
なるほどLayout/default.phpに記述されていたんですね。トップページとおっしゃっていたので Page/index.phpに記述しているものかと勘違いしていました。 jQueryによる記述やプラグインの前にjQuery自体が読み込まれていなければ動かないのは当然ですね……。 Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/16 11:22 |
---|
n1215 様
ご返信いただきありがとうございます。 引用: ブラウザの機能(たとえばChromeなら要素を検証機能)を用いるとJavaScriptやCSS,ファイル読込のエラーを見ることができます。 ChromeでJavaScriptのエラーをチェックした所、以下のような文章が表示されました。
下記のエラー
の解決策として、JavaScriptの記述の順番を変えてみたところ、/mypage/members/editのページが表示されるようになりました! app/webroot/theme/{テーマ名}/Layout/default.phpで、もともとは、
のように、JavaScriptの後に
のようにJavaScriptの前に
参考) jQueryで「Uncaught ReferenceError: $ is not defined (anonymous function)」 ― HattaraTecLog : http://teclog.hattara.info/?p=221 何度も何度もご丁寧に回答頂き、本当にありがとうございました! <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/12 20:10 |
---|
kemshim 様
3.0.2ではログインはAjaxで処理されるのでブラウザ上で/mypage/members/ajax_loginに移動することは実際にはありません。 表示されているページはログイン後にリダイレクトされるべきページのURLが表示されていますね。 本来はページ遷移なしにAjaxリクエストの返り値としてこの値を受け取り、/mypage/members/editに遷移するというのがAjaxによるログイン処理の流れです。 何らかの原因でAjaxによるフォームの送信が行えず、 通常のHTMLのフォームのPOSTが行われ、画面が/mypage/members/ajax_loginに遷移してしまっているものと推測します。 ブラウザの機能(たとえばChromeなら要素を検証機能)を用いるとJavaScriptやCSS,ファイル読込のエラーを見ることができます。 ページを読み込んだ時点でブラウザにJavaScriptのエラーは出ていないでしょうか? またjquery.form-2.94.jsは正常に読み込まれていますか? ログインボタンを押した後にJavaScriptのエラーが出ていませんか? ※他のIDでの試行結果も書かれていますが、会員ページにすでにログインした状態になっているためだと思います。 引用: action属性とは、こちらのことでしょうか。 違います。PHPが出力したHTMLソースの話です。おそらくaction属性は正しそうなのでこれはもういいです。 参考:正常な場合の処理 lib/Baser/Config/setting.php(ないしこれをコピーしたファイルapp/Config/setting.php)に会員ページログイン後のリダイレクト先が指定されていますよね? 初期設定のままだと/mypage/members/ajax_loginに向けてAjaxでのログイン処理が成功すると /mypage/members/editにリダイレクトされるようになっています。 lib/Baser/Config/setting.php
そしてこのページのテンプレートは下記です。 lib/Baser/View/Members/mypage/edit.php
lib/Baser/Controller/MembersController.phpのmypage_editメソッドで Viewの$pageTitle変数に"メンバーマイページ(デモ)"という値が設定されているので 上記の出力結果はメンバーマイページ(デモ)と表示されるはずですね。 Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/12 17:16 |
---|
n1215 様
ご返信いただきありがとうございます。 引用: まずプレフィックスの設定($currentPrefix)は'mypage'ではなく'mypege'となっていませんか? 申し訳ありません、フォーラムに入力する際にスペルを誤って入力していたようです。 実際のプレフィックス設定は'mypage'になっております。 引用: 上記が正しく設定されている場合、 スクリーンショットで撮ったものが以下になります。 ↓ここからスクリーンショット ↑ここまで 引用: ・遷移先のページのURLはどうなってますか? URLは、http://example.com/mypage/members/ajax_login となっております。 引用: ・トップページのログインフォームのformタグのaction属性に入ってる値を教えてください action属性とは、こちらのことでしょうか。
'ajax_login'となっています。 仮に上記のaction属性に、/mypage/members/ajax_loginと記述した場合、以下のような画面が表示されます。 <動作環境> |
n1215 > Re: トップページにログインフォームを作成したい @ 2014/8/12 12:11 |
---|
kemshim 様
まずプレフィックスの設定($currentPrefix)は'mypage'ではなく'mypege'となっていませんか? 上記が正しく設定されている場合、 "以下のメッセージだけが出るページ"について全く状況が把握できないので詳しく教えてください。 ・遷移先のページのURLはどうなってますか? ・トップページのログインフォームのformタグのaction属性に入ってる値を教えてください 正常な状態では値が/mypage/members/ajax_loginとなるはずです Twitter: @n_1215 |
kemshim > Re: トップページにログインフォームを作成したい @ 2014/8/9 12:56 |
---|
n1215 様
ご丁寧に解説していただき、ありがとうございます! その方法で、トップページに実装してみると、見た目は希望通りになりました。 ただ、マイページ用のユーザでログインしようとすると、以下のメッセージだけが出るページに遷移します。
試しに登録していないIDを入れてみても同様の結果になります。 どうすればいいでしょうか… <動作環境> |
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 |
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 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/7 13:14 |
---|
n1215 様
返信が遅くなって申し訳ありません。 アドバイス頂いたのち、色々と試してみたのですが、うまく行きませんでした… 恥ずかしながらアドバイスの意味についてご質問なのですが、 引用: すでに会員ログイン画面を実装されているのであれば、 上記のアドバイスのうち、「同じ変数を揃えた上で同じフォームのHTMLを出力する」とは、
のうち、どの変数をどちらと揃える必要があるのでしょうか。 本当に初心者の質問ですみません。 <動作環境> |