サイト内の会員様用お気に入りを実装したいです 【解決済み】
サイト内の会員様用お気に入りを実装したいです
-----
ご利用のサーバ:
MODXのバージョン:1.0.6J
PHPのバージョン:5.2.17
MySQLのバージョン:
ブラウザ:IE8
-----
お世話になっております
HP内のページを会員それぞれで、お気に入りとして登録できるシステムを作ろうとしています。
頑張って数日間、試行錯誤を繰り返してみましたが、うまくいきませんでした。
イメージとしては、
各ページのテンプレート変数にお気に入りを希望された人の会員No.を羅列して記憶させておき、お気に入り一覧を要求されたらDittoを使って、ページ一覧から(正規表現を使い)本人の会員No.が入っているページだけピックアップすれば実現できるかな?と考えています
テンプレート変数への情報の書き込みの方法がわからず、FDMを使ってやろうとしています。
呼び出しは
[!FDM? &canmoderate=`publicuser` &eform_tpl='fdmEformbookmark' &gotoid=`96` &id=`137` &parent=`137` &model='137' &aliastype=`article_%createdon%` &disableadd=`1` &disableedit=`0` &disablepublish=`1` &disableunpublish=`1` &disabledelete=`1`!]
こんな感じで、
チャンクfdmEformbookmarkの中身は
<label for="address">お気に入り</label><br />
<input name="tvお気に入り登録用" value="[[testbookmark2]]" type="text" eform="お気に入り登録用::1" />
スニペットtestbookmark2の中身は
<?php
$tmplvar_info = $modx->getTemplateVar('お気に入り登録用');
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
// 正規表現
$pattern = '*,90,*';
if (!(preg_match($pattern , $tmplvar_value))) {
$tmplvar_value=$modx->$tmplvar_value . '90,';//90は仮の会員No.で、最終的にはログインユーザーのIDに変える予定です。
echo $tmplvar_value;
} else {
print('条件外です~~~~~~!!!!!');
}
?>
おそらく、会員No.が追加されるところまではうまくいっていると思うのですが、「スニペットtestbookmark2」が出力した結果がフォームのテキスト入力に書き出されても、画面上では会員No.を追加する前のデータに戻されてしまっているようです。(FDMの仕組みなのでしょうか?変数の中身が最初からあるとそれを優先して表示しているのでしょうか?)
会員No.がしっかり追加されてフォームに表示されれば、あとはFDMの送信ボタンを押せばテンプレート変数に情報が追加される。そういうイメージで作成してきましたが、ここで行き詰りました。
実力不足で、説明も足りないと思いますが、ぜひご知恵をお貸しください。よろしくお願いします
ご利用のサーバ:
MODXのバージョン:1.0.6J
PHPのバージョン:5.2.17
MySQLのバージョン:
ブラウザ:IE8
-----
お世話になっております
HP内のページを会員それぞれで、お気に入りとして登録できるシステムを作ろうとしています。
頑張って数日間、試行錯誤を繰り返してみましたが、うまくいきませんでした。
イメージとしては、
各ページのテンプレート変数にお気に入りを希望された人の会員No.を羅列して記憶させておき、お気に入り一覧を要求されたらDittoを使って、ページ一覧から(正規表現を使い)本人の会員No.が入っているページだけピックアップすれば実現できるかな?と考えています
テンプレート変数への情報の書き込みの方法がわからず、FDMを使ってやろうとしています。
呼び出しは
[!FDM? &canmoderate=`publicuser` &eform_tpl='fdmEformbookmark' &gotoid=`96` &id=`137` &parent=`137` &model='137' &aliastype=`article_%createdon%` &disableadd=`1` &disableedit=`0` &disablepublish=`1` &disableunpublish=`1` &disabledelete=`1`!]
こんな感じで、
チャンクfdmEformbookmarkの中身は
<label for="address">お気に入り</label><br />
<input name="tvお気に入り登録用" value="[[testbookmark2]]" type="text" eform="お気に入り登録用::1" />
スニペットtestbookmark2の中身は
<?php
$tmplvar_info = $modx->getTemplateVar('お気に入り登録用');
if ($tmplvar_info !== FALSE) { // 問題なく情報が取得できた場合
$tmplvar_value = $tmplvar_info['value']; // テンプレート変数の入力値を取得
}
// 正規表現
$pattern = '*,90,*';
if (!(preg_match($pattern , $tmplvar_value))) {
$tmplvar_value=$modx->$tmplvar_value . '90,';//90は仮の会員No.で、最終的にはログインユーザーのIDに変える予定です。
echo $tmplvar_value;
} else {
print('条件外です~~~~~~!!!!!');
}
?>
おそらく、会員No.が追加されるところまではうまくいっていると思うのですが、「スニペットtestbookmark2」が出力した結果がフォームのテキスト入力に書き出されても、画面上では会員No.を追加する前のデータに戻されてしまっているようです。(FDMの仕組みなのでしょうか?変数の中身が最初からあるとそれを優先して表示しているのでしょうか?)
会員No.がしっかり追加されてフォームに表示されれば、あとはFDMの送信ボタンを押せばテンプレート変数に情報が追加される。そういうイメージで作成してきましたが、ここで行き詰りました。
実力不足で、説明も足りないと思いますが、ぜひご知恵をお貸しください。よろしくお願いします
Re: サイト内の会員様用お気に入りを実装したいです
FDMやDittoの本来の使い方を考えると、少し複雑な実装のように思います。ウェブユーザ設定に「お気に入りのページ」といった項目を新規に作って、これに対して登録および参照する形でよければスニペットを作ってみます。
ユーザAのお気に入りページ:3,4,5
ユーザBのお気に入りページ:7,8,9
という感じですよね。これを任意に登録・削除・参照する形
ユーザAのお気に入りページ:3,4,5
ユーザBのお気に入りページ:7,8,9
という感じですよね。これを任意に登録・削除・参照する形
Re: サイト内の会員様用お気に入りを実装したいです
おはようございます
任意のページのテンプレート変数の中身を知る方法はわかったのですが、テンプレート変数の中身を書き換える方法がわからず、FDMを強引に使ってみようとしました。
yamaさんお手数ですがよろしくお願いします
任意のページのテンプレート変数の中身を知る方法はわかったのですが、テンプレート変数の中身を書き換える方法がわからず、FDMを強引に使ってみようとしました。
yamaさんお手数ですがよろしくお願いします
Re: サイト内の会員様用お気に入りを実装したいです
ゆっくりですいませんが今週中くらいメドで作ります
Re: サイト内の会員様用お気に入りを実装したいです
親切に作って頂いているだけでも感謝しています。
仕事に差支えがない程度で、よろしくお願いします。
仕事に差支えがない程度で、よろしくお願いします。
Re: サイト内の会員様用お気に入りを実装したいです
yamaさんのご意見を参考にして、自分でも作成を継続していますが、
正規表現の中にテンプレート変数を組み込むのがうまくいかないなど、「登録済みのお気に入り」の判定周りの実現にてこずっています。
こちらも引き続き作成を継続していきます。
正規表現の中にテンプレート変数を組み込むのがうまくいかないなど、「登録済みのお気に入り」の判定周りの実現にてこずっています。
こちらも引き続き作成を継続していきます。
Re: サイト内の会員様用お気に入りを実装したいです
お待たせです。10行前後で作れるかと思ったら、それなりの処理になりました。添付のファイルで新規スニペットを作ってください。スニペット名は適当でよいです。
たとえばスニペット名を「fav」とすると、テンプレートまたはリソースに [!fav!] と記述します。細かい部分はおっしゃっていただけたら改善します
たとえばスニペット名を「fav」とすると、テンプレートまたはリソースに [!fav!] と記述します。細かい部分はおっしゃっていただけたら改善します
- 添付ファイル
-
snippet.zip
- (833 バイト) ダウンロード数: 406 回
Re: サイト内の会員様用お気に入りを実装したいです 【解決済み】
これ程までのしっかりしたシステムを作って頂きましてありがとうございます。感謝の気持ちでいっぱいです。
実際にスニペットとして使わせていただき、お気に入り一覧表示など他の付加機能もこれから付け加えたいと考えています。
最初、初歩的なミスで使うことができませんでしたが、今は自己解決しました。
お恥ずかしい内容ですが、同じような事でほかの方がつまずかないように記事を残しておきます。
(コードを読んでいくうえで疑問に思ったこと)
スニペット中で自分自身にfavを送り返しているのにURLに「http://ほにゃらら?fav=del」と表示されない。
(Ans.)
45行目のheader("Location:{$url}");で繰り返されているため
(実際に使用するうえで)
直接データベースを(MyAdminで)見てみると、web_user_settingsテーブルのレコードがどんどん増え続けていた。
(Ans.)
主キーが設定されていなかったから
実際にスニペットとして使わせていただき、お気に入り一覧表示など他の付加機能もこれから付け加えたいと考えています。
最初、初歩的なミスで使うことができませんでしたが、今は自己解決しました。
お恥ずかしい内容ですが、同じような事でほかの方がつまずかないように記事を残しておきます。
(コードを読んでいくうえで疑問に思ったこと)
スニペット中で自分自身にfavを送り返しているのにURLに「http://ほにゃらら?fav=del」と表示されない。
(Ans.)
45行目のheader("Location:{$url}");で繰り返されているため
(実際に使用するうえで)
直接データベースを(MyAdminで)見てみると、web_user_settingsテーブルのレコードがどんどん増え続けていた。
(Ans.)
主キーが設定されていなかったから
Re: サイト内の会員様用お気に入りを実装したいです
ああ、なるほど、、orzkazuma さんが書きました:主キーが設定されていなかったから
実は明日か明後日リリース予定のr2では、これに対し(複合インデックスという方法で)主キーを設定しています。なので、自分の開発環境では問題が起きませんでした orz
header関数を使っているのは、リロード対策です。操作後にF5を押すと、同じ操作を実行しちゃいますので・・
また疑問などがあればいつでも気軽に質問してください
Re: サイト内の会員様用お気に入りを実装したいです
またわからないところがあればよろしくお願いします。
作っていただいたスニペットを流用して、「お気に入り一覧の表示」も作りましたので、中心になっているコードだけ掲載させていただきます。
$length = count($favs);
echo '登録件数:'.$length.'<br/>';
for($i=0;$i<$length;$i++) {
$homeDoc = $modx->getDocumentObject('id',$favs[$i]);
$title = $homeDoc['pagetitle'];
echo '<a href="http://ほにゃらら'.$modx->makeUrl($favs[$i]).'">'.$title.'</a><br/>';
}
if(!empty($fav)){}の内側あたりに入れておくといいと思います。
それでは。
作っていただいたスニペットを流用して、「お気に入り一覧の表示」も作りましたので、中心になっているコードだけ掲載させていただきます。
$length = count($favs);
echo '登録件数:'.$length.'<br/>';
for($i=0;$i<$length;$i++) {
$homeDoc = $modx->getDocumentObject('id',$favs[$i]);
$title = $homeDoc['pagetitle'];
echo '<a href="http://ほにゃらら'.$modx->makeUrl($favs[$i]).'">'.$title.'</a><br/>';
}
if(!empty($fav)){}の内側あたりに入れておくといいと思います。
それでは。
Re: サイト内の会員様用お気に入りを実装したいです
yamaさん、先日はありがとうございました。
(リソースの)お気に入り登録システムを自作サイトに使わせていただいています。
今、ホームページ全体の各リソースをDittoで検索して一覧に出す仕組みを作ってるのですが、
その一覧表示の「各ページ項目ごと」にお気に入り登録(削除)ボタンを表示させれないかな?と模索しています。
仕組みとしては、Dittoが出力したページ番号を使ってお気に入りシステムがその番号が登録済みかどうか判断して、追加や削除をすればいいわけですが、その「Dittoが出力したページIDを、どうお気に入りシステムに教えるか」で行き詰まっています。
考えているのは、Dittoが出力したHTMLを伝えるか、もしくは直接Dittoのシステムの中にお気に入りの仕組みを組み込むかのどちらかですが、その方法もわからずにいます。
よかったらお知恵をお借りできますでしょうか?
よろしくお願いいたします。
(リソースの)お気に入り登録システムを自作サイトに使わせていただいています。
今、ホームページ全体の各リソースをDittoで検索して一覧に出す仕組みを作ってるのですが、
その一覧表示の「各ページ項目ごと」にお気に入り登録(削除)ボタンを表示させれないかな?と模索しています。
仕組みとしては、Dittoが出力したページ番号を使ってお気に入りシステムがその番号が登録済みかどうか判断して、追加や削除をすればいいわけですが、その「Dittoが出力したページIDを、どうお気に入りシステムに教えるか」で行き詰まっています。
考えているのは、Dittoが出力したHTMLを伝えるか、もしくは直接Dittoのシステムの中にお気に入りの仕組みを組み込むかのどちらかですが、その方法もわからずにいます。
よかったらお知恵をお借りできますでしょうか?
よろしくお願いいたします。
Re: サイト内の会員様用お気に入りを実装したいです
中途半端な作りで申し訳なかったです。自分も使う予定があって作ってみたのですが、予定がなくなってしまったので、、
<a href="[+url+]">[+pagetitle+]</a>[[お気に入りボタン]]<br />
こんな感じのDitto用のテンプレートを組む感じで、その「お気に入りボタン」スニペットの中身ですが。
http://modx.jp/docs/extras/snippets/dit ... /body.html
Dittoには &saveパラメータというパラメータがあって、これをセットすると、Dittoの処理結果をPHPで受け取ることができます。
&saveパラメータをセットして「print_r($modx->placeholders);」を一行だけ記述したテストスニペットをそのページ内に記述すると、Dittoの処理結果が格納されている様子が分かります。
(必要な値はリソースIDだけだと思うので、&saveパラメータを使わず [[お気に入り?id=[+id+]]]みたいな渡し方でもよいかもしれませんが)
&save=3にセットすると、一覧表示にはDitto自体を使わず、Dittoの代わりのように働く専用の代替スニペットを作るような用途も可能です。この場合、Dittoは情報取得のためだけに使う感じになります。
アプローチ的には、どっちかというと後者ですね。kazuma さんが書きました:仕組みとしては、Dittoが出力したページ番号を使ってお気に入りシステムがその番号が登録済みかどうか判断して、追加や削除をすればいいわけですが、その「Dittoが出力したページIDを、どうお気に入りシステムに教えるか」で行き詰まっています。
考えているのは、Dittoが出力したHTMLを伝えるか、もしくは直接Dittoのシステムの中にお気に入りの仕組みを組み込むかのどちらかですが、その方法もわからずにいます。
<a href="[+url+]">[+pagetitle+]</a>[[お気に入りボタン]]<br />
こんな感じのDitto用のテンプレートを組む感じで、その「お気に入りボタン」スニペットの中身ですが。
http://modx.jp/docs/extras/snippets/dit ... /body.html
Dittoには &saveパラメータというパラメータがあって、これをセットすると、Dittoの処理結果をPHPで受け取ることができます。
&saveパラメータをセットして「print_r($modx->placeholders);」を一行だけ記述したテストスニペットをそのページ内に記述すると、Dittoの処理結果が格納されている様子が分かります。
(必要な値はリソースIDだけだと思うので、&saveパラメータを使わず [[お気に入り?id=[+id+]]]みたいな渡し方でもよいかもしれませんが)
&save=3にセットすると、一覧表示にはDitto自体を使わず、Dittoの代わりのように働く専用の代替スニペットを作るような用途も可能です。この場合、Dittoは情報取得のためだけに使う感じになります。
Re: サイト内の会員様用お気に入りを実装したいです
早いお返事ありがとうございます
中途半端なんてとんでもなくて、すごく助かっています。本当にありがとうございます。
お返事の内容は理解するのに時間がかかりそうですので、じっくり取り組んでみます。
また何か進展しましたらここに書き込ませていただきます。それでは。
中途半端なんてとんでもなくて、すごく助かっています。本当にありがとうございます。
お返事の内容は理解するのに時間がかかりそうですので、じっくり取り組んでみます。
また何か進展しましたらここに書き込ませていただきます。それでは。