.ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録

.検索

.メインメニュー

.フォーラムメニュー

.オンライン状況
12 人のユーザが現在オンラインです。 (10 人のユーザが フォーラム を参照しています。)

登録ユーザ: 0
ゲスト: 12

もっと...

.
.リンク集

メイン
   CakePHP コントローラ(Controller)
     タグ機能をつけたい
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
logue
投稿日時: 2008-8-11 8:25
Baker スタート
登録日: 2008-4-10
居住地:
投稿: 13
タグ機能をつけたい
cakePHPで作っているアプリケーションにタグ機能をつけたいと思っています。

barkeryのソースや、チュートリアルで作成したブログにタグ機能を実装するチュートリアルなどを参考に組み込もうと思っていますが、前者だとpreg_replaceがなんたらかんたらというエラーで動かないし、後者はベースとなっているcakePHPのバージョンが違います。


みなさんはどのようにタグ機能を実装していますか?
custar
投稿日時: 2008-8-11 11:10
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: タグ機能をつけたい
初期学習時にブログ チュートリアルでタグ付けを経験しましたが、書かれてい
る通りにやったら動きました。Post と Tag を関連付けられました。書かれて
いる以上のことはやりませんでしたが。

cakephp : 1.1.x

引用:

logueさんは書きました:

barkery のソース


ログイン プロンプトが出てきましたが、これ、どうやって入るの?

引用:

cakephp v1.1 による説明ですね。特に問題はないと思います。

引用:

logueさんは書きました:

前者だと preg_replace がなんたらかんたらというエラーで動かないし、


エラーメッセージが出るってことは動こうとしているのですから、それを治し
てあげればよいと思います。ちょっと手間ですが、動かせるようになれば、実
装のヒントになるんじゃないですか?

引用:

logueさんは書きました:

後者はベースとなっている cakePHP のバージョンが違います。


まずは、説明されている内容を理解することが先です。ですので、cakephp の
バージョンなんて気にせず、仕組みを理解した方が良いでしょう。故に、説明
されているバージョンで動かせるようになることをお薦めします。

既に動いているものがあるのなら、それから理解を深めると学習時間の短縮に
なります。


私は ACL の学習参考に公開されているソースを探しましたが、実装されている
ものはなかったので、少ない説明サイトとソースコードの読み込みによって自
力で実装できるくらいにはなりました。きっと自力でも何とかなりますよ。

以下はその時調べたソースコード公開の有無です。

Just baked
They are using cakePHP
----------------------------------------
- Mozilla Addons ........ 1.1
- Scratch by MIT ........ x
- Yale Daily News ....... x
- The Onion Store ....... x
- NoseRub ............... 1.2
- foamee ................ x
- twimbler .............. x
- MapMe ................. x
- Wildflower ............ 1.2

公開されている中にタグをもつものはないようですが、時間があるならば覗い
てみたらどうでしょうか。
logue
投稿日時: 2008-8-13 14:00
Baker スタート
登録日: 2008-4-10
居住地:
投稿: 13
Re: タグ機能をつけたい
失礼。
引用:

ログイン プロンプトが出てきましたが、これ、どうやって入るの?

berkryのソースは、cakeForgeのアカウントでアクセスできます。
ここから、SVNで最新のソースを取得します。

現時点では、Barkryのソースを参考に作っています。

先ほどのエラーですが、エラーが起きている場所が本体のソース(cakeディレクトリ内)をさしているみたいです。まさか本体のバグなんてことはありえないので、おそらくmodelだと思うのですが、ほかのエラーなどと異なり詳しい行番号などが書かれていないので困っています。

ほとんど、Bakeryのソースまんまなんですけどね。
custar
投稿日時: 2008-8-17 14:16
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: タグ機能をつけたい
引用:

logue さんは書きました:

berkry のソースは、cakeForge のアカウントでアクセスできます。
ここから、SVN で最新のソースを取得します。


私の場合、cakeforge のアカウントを作成し、bakery のソースを落としてきて、
展開後、設定をしてから動作を確認することはありません。それほど手間をか
けれらないからです。

こういう場合は、どんな目的で、どんなコードを書いて、どういう状況である
かを、このスレッド上で分かる状態にしていただくと、手間をさほど掛けずに、
そちらの状況を把握できます。

状況説明には、エラーメッセージがあると尚良いです。

引用:

logue さんは書きました:

先ほどのエラーですが....(略)


全くエラー内容が分からないです。

引用:

logue さんは書きました:

ほとんど、Bakeryのソースまんまなんですけどね。


ある要素技術の習得のためには、その要素技術のみに特化した、完全に動作し
ている簡単なサンプルを見つけ、それをそのまま真似してみると理解が進みます。

bakery のソースがそれに適しているかどうかだと思います。

私は bake シェルが作るコードが参考になると思うのですが。それとブログ チュー
トリアルでも理解できると思います。

引用:

logueさんは書きました:

みなさんはどのようにタグ機能を実装していますか?


この手の質問は引いてしまいます。

というのは、私はそれをフォーラムで説明するのが非常に面倒に感じているか
らです。仕組みとコードを説明することになり長くなる。

このような場合、まず、logue さんが書かれているコードを提示していただけ
ると、それから話を展開できます。

cakephp に関する日本語書籍が少なくとも 2 冊出ていますが、その辺の記述は
ないのでしょうか。さらっと書店で眺めただけで、両方とも持ってないから分
かりません。
logue
投稿日時: 2008-8-18 8:55
Baker スタート
登録日: 2008-4-10
居住地:
投稿: 13
Re: タグ機能をつけたい
参考になるかわかりませんが、コードです。ほとんど、オリジナルのままです。

コントローラー
http://code.google.com/p/lorelei/source/browse/trunk/controllers/tags_controller.php

モデル
http://code.google.com/p/lorelei/source/browse/trunk/models/tag.php

タグを使用するコントローラー(ここではarticleからtagを参照する)
http://code.google.com/p/lorelei/source/browse/trunk/controllers/articles_controller.php
custar
投稿日時: 2008-8-18 10:45
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: タグ機能をつけたい
引用:

logueさんは書きました:

参考になるかわかりませんが、コードです。ほとんど、オリジナルのままです。


動くかもしれない、という程度しかコメントできません。
というのは、これを追試してみることを私はしないからです。
# 気を悪くしないでくださいね。

そちらで動かした結果、エラーか何か出ているのなら、それからコメントはで
きますが、何もないので。


この手のサンプルは、参照する程度に留めた方がいいと思います。というのは、
データベース テーブルの作り方が書かれていませんよね。そこの作り方が違っ
ていたら、そもそも動かない。

しかも、Model の bindModel() なんて見えますね。学習初期にこんなの見たら
疑問が増えるばかり。


私は、ブログ チュートリアルの構成をお薦めします。

step-1 :
 scaffolding を使って、確実にタグを取れるサンプルを作る。

step-2 :
 scaffolding を止め、bake で add(),index(),view(),edit(),del() を出力させる。
 同時に {add,index,view,edit}.ctp も出力。
 記述方法の理解。

step-3 :
 独自拡張。


bake の作り出すコードは、テスト・検証されているものでしょうから、よっぽ
ど外部のサンプルより有益だと思います。しかもかなり簡単。外部のサンプル
は、cake のバージョンが異なるかもしれないですし。
logue
投稿日時: 2008-8-18 15:00
Baker スタート
登録日: 2008-4-10
居住地:
投稿: 13
Re: タグ機能をつけたい
確かにbakeだと追加、一覧、編集、表示といった基本的な処理は自動で出されます。

実際、ほかの部分のコードは、バリテーションなどの確認や、別モデルのデーターの更新などをのぞくと、だいたい正常に動いています。

このタグ機能も、現時点で引っかかっているのは、タグの登録処理だけで、一応手動で入力したタグは動いています。

どのサンプルにも共通していることですが、だいたい中間に入ってくるデーターベースが必要になっているという点です。
articles
tags
以外に
article_tags
というデーターベースが必要になります。ここが問題をややこしくしているところで、articles側の記事のidとtags側のタグのIDを関連づけているようです。

いずれの例にしても、SQLのQueryを直打ちしているのでcakeとしてはどうなのか?というのもあり、実際どういうコーディングをしているのか知りたかったのですが。

なお、データーベースは、どのサンプルでも、おおむね
http://d.hatena.ne.jp/nori0620/20071123/1195801255
に書かれているものと同一です。ただ、bekeryではSEOのためか、tagデーターベースに、keynameというテーブルがあり、ここにサーチエンジンに読まれやすくしたタグ名が別途保存されています。
custar
投稿日時: 2008-8-18 17:51
Cake 職人
登録日: 2007-5-31
居住地:
投稿: 189
Re: タグ機能をつけたい
引用:

logueさんは書きました:

article_tags

というデーターベースが必要 ....(略)....
articles 側の記事の id と tags 側のタグの ID を関連づけているようです。


これは仕方のないことではないでしょうか?

articles と tags は独立に存在してもいいような内容ですが、関連付けをしよ
うとしたら、仲介するテーブルが必要になると思います。

引用:

logueさんは書きました:

ここが問題をややこしくしている


何が「問題」なのか分からない。

引用:

logueさんは書きました:

いずれの例にしても、SQL の Query を直打ちしている


bake が作るコードでは、sql は一切記述していません。
SQL を直接書かなくて済むようにするのがフレームワークの仕事だと思います。

引用:

logueさんは書きました:

cake としてはどうなのか?というのもあり、実際どういうコーディングをして
いるのか知りたかった


私としては、bake の作る Controller を見れば分かります、という回答しか出
ない。

また、上で挙げた Wildflower には "tags_uploads" テーブルがあり、タグを
扱っていました。ご覧になっては。


他の方なら、何を尋ねられたいのか分かる人がいるかもしれないので、バトンタッチ。
MASA-P
投稿日時: 2008-8-18 18:47
Cake 職人
登録日: 2008-1-24
居住地:
投稿: 224
Re: タグ機能をつけたい
うーん、タグ機能は典型的なhasAndBelongsToManyの応用例だと
思うのですが…

簡単な題材ですし、ソースを丸ごとコピーして動かすと
いうよりは、HABTMの仕組みを理解し、自分で作った方が今後の
ためになると思います。

preg_replaceのエラーは、パターン構文が間違っているか、異なる
文字コードの文字列を入れているとかの原因が考えられますが、
どうなんでしょうね?
logue
投稿日時: 2008-8-19 9:52
Baker スタート
登録日: 2008-4-10
居住地:
投稿: 13
Re: タグ機能をつけたい
preg_replaceの原因は、バリテーションでした。とりあえず、コメントアウトしたところ、タグの追加・保存までは動くようになりました。

しかし、article_tagsといったarticlesとtagsの中間に入るデーターベースが更新されないためやはり動いていません。どのサンプルをみても、モデルやコントローラーを必要としないデーターベースのようなので、どのように扱ってどのように扱えばいいのかも理解しづらい部分があります。

(1) 2 »
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 


. .