このサイトのように、右側に「カテゴリー欄」を作って、また、ブログを書く時にカテゴリーを選択できるようにしたいのですが、手順としてはどのように行えば良いでしょうか?
LAMP環境で作っています。
cakePHPで実装したいです。全て教えて、というのは失礼な質問なのは承知しておりますが、何から手をつけたら良いかすらわからないのです。。。
気になる質問をクリップする
クリップした質問は、後からいつでもMYページで確認できます。
またクリップした質問に回答があった際、通知やメールを受け取ることができます。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/22 05:42
退会済みユーザー
2019/05/22 05:49
回答1件
0
※CakePHPで作るという流れでは回答していません。あくまで「データ設計」レベルの話です。
PHPもCakePHPもあくまで実現のための手段・道具でしかないので設計がしっかりできていてようやく使えるものです
1対1か1対多か多対多かにはよって作り方は変わります。
そのあたりは下記のような記事を見てもらうとして
teratailの質問は「1質問につき複数タグ」がつけられるので「1対多」です。
構造としては提示のサイトの「カテゴリ」も似たような形だと思います。
1記事に対して「Adsense Web関連」のように複数カテゴリがつけられるようになっています。
つまり、単純に作るなら最低でも3つテーブルが必要です。
・ユーザマスターテーブル
・カテゴリマスタテーブル
・記事データテーブル
また「カテゴリー1、2、3というデータベースは作成しました」というコメントから
まだあまり「プログラミング」というところに入って浅いのかなという印象を受けました。
なぜなら「データベース」はあくまでかなり大きなくくりなので、そのまま受け取るとカテゴリの情報を取り出したいときに選ばれたカテゴリによって毎回接続先を変える必要が出てくることになるからです。
なので、
構造的には本来は
「データベース」の配下に「テーブル」があり「テーブル」に「項目(カラム)」が設定されていて「データ(レコード)」が入ってくるわけですね。
丁寧に説明しすぎるとさすがに回答文字数の制限に引っかかってしまうボリュームになるので、ここからざっと簡単に説明しますが、
「カテゴリマスタテーブル」には「カテゴリコード」と「カテゴリ名」の2つのカラムは必ず入れます。
「記事データテーブル」には「カテゴリコード」が複数入れられるカラムは必ず入れます。
カラムを動的にするのは無理ですし「1つ以上任意選べる」からといって使われないカラムがあるのはおかしいのでカラムは1つにしたい。
記事投稿時に、例えばチェックボックスでカテゴリを選んで投稿するイメージです。
最小構成イメージ
・カテゴリマスタテーブル
|カテゴリコード|カテゴリ名|登録日時|更新日時|
|:--|:--|
|1|カテゴリ1|||
|2|カテゴリ2|||
|3|カテゴリ3|||
|4|カテゴリ4|||
・記事データテーブル
|記事ID|記事タイトル|カテゴリ|記事内容|登録日時|更新日時|
|:--|:--|
|1|記事1|1|テストあああ|||
|2|記事2|2,4|テストあああ|||
|3|記事3|3|テストあああ|||
|4|カテゴリ4|1,2,4|テストあああ|||
それぞれのテーブルに対して登録・更新・削除を行う画面は作ってください。
(本来は外部キー設定したりしたいけど、とりあえずこれで)
あとは表示部分です。
記事データテーブルを表示する際、カテゴリはコードなので、カテゴリマスタテーブルと結合して名称をとってこれるようにしておくと良いでしょう。
また、カテゴリ一覧はカテゴリマスタより表示させて、カテゴリIDをクエリストリングによるURLパラメータをリンクに含ませておき、選ばれたときにURLパラメータからカテゴリIDを取得し、記事データテーブルを検索するような仕組みを作っておくと良いです。
ざっと書いていますが、要は提示先の記事にあるWordPressのようなCMSを自作することになります。
管理画面で更新して、更新した内容を表示部に出す、そういう流れですね。
データ構成については考えうる最小構成で私が勝手に作ったものなので、自身が必要だと思った項目は足したり、不要と思った項目は削ったりしてみてください。
いずれにしても「画面レイアウト」は必須です。画面レイアウト=機能が決定するので、
機能を確定させることでデータ構造が決まります。
そこからデータを扱う処理が決まり、設計ができあがってようやく作り始めることができます。
投稿2019/05/22 06:12
編集2019/05/22 06:37総合スコア80850
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2019/05/22 06:38
2019/05/22 06:47
退会済みユーザー
2019/05/22 07:29
2019/05/22 07:42
退会済みユーザー
2019/05/22 07:49
2019/05/22 08:02 編集
退会済みユーザー
2019/05/22 08:54
2019/05/22 08:58
退会済みユーザー
2019/05/22 09:02
2019/05/22 09:22
2019/05/22 10:49
あなたの回答
tips
太字
斜体
打ち消し線
見出し
引用テキストの挿入
コードの挿入
リンクの挿入
リストの挿入
番号リストの挿入
表の挿入
水平線の挿入
プレビュー
質問の解決につながる回答をしましょう。 サンプルコードなど、より具体的な説明があると質問者の理解の助けになります。 また、読む側のことを考えた、分かりやすい文章を心がけましょう。