質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Q&A

1回答

662閲覧

PHPでセレクター機能を作るには?

退会済みユーザー

退会済みユーザー

総合スコア0

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

0グッド

1クリップ

投稿2019/05/22 05:37

編集2019/06/28 11:00

このサイトのように、右側に「カテゴリー欄」を作って、また、ブログを書く時にカテゴリーを選択できるようにしたいのですが、手順としてはどのように行えば良いでしょうか?

LAMP環境で作っています。
cakePHPで実装したいです。全て教えて、というのは失礼な質問なのは承知しておりますが、何から手をつけたら良いかすらわからないのです。。。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

m.ts10806

2019/05/22 05:41

参照先はWordPress前提ですがCakePHPで実装したいということでしょうか。 全て教えてとなると回答欄におさまる内容ではありません。 ご自身で調べたこと試したことを具体的に記載していただきたいですし、むしろ、まずやってみてつまずいてから質問していただきたいです。 >LAMP それよりもPHPやフレームワークのバージョン、DBは何を使っているか、そのバージョンのほうが情報としては有用です。 質問は質問テンプレートを利用して書かれたほうが問題も絞り込めると思います。
m.ts10806

2019/05/22 05:42

というかレイアウトの話でしょうか?それともデータ構造の話でしょうか?
退会済みユーザー

退会済みユーザー

2019/05/22 05:49

追記しました。初心者で何から手をつければ、また、何をすればこのような機能を作れるかすらわかりません。
guest

回答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
m.ts10806

総合スコア80850

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2019/05/22 06:38

ありがとうございます。 やりたいことはまさに、1対多です。 まず私は何の作業をしたら良いのでしょうか? データベースに登録することでしょうか? Aの作業をする→Bのコードを書く→Cの作業をする みたいな流れが全くわかりません。
m.ts10806

2019/05/22 06:47

いえ。「画面設計」です。 もっと言えば「Webサイトの全体像、画面遷移図」のほうが先ですね。 回答の後半に書いていますが、 画面=機能です。 機能が決まらないと扱うデータも決まらないのでデータベースに必要なテーブル、項目も決まりません。 そもそもPHPはどれくらいされている方なのでしょうか? もし設計を頑張ったとしても使える道具が適切に使えないと意味がないので、もし「CakePHPはおろかPHPもあまりできない」のであれば、そちらの基礎からでしょうね。 そうではなく、オーソドックスな開発の流れを知りたいのでしたら「ウォーターフォールモデル」で調べてください。 そのなかの細かいところはプロジェクトによるので自分で決めてください。 正直なところ、仕事でするのでなければ どのような流れであっても目的が達成されればそれでいいのとも言えるので、まずなんでもいいから作ってみてはと。
退会済みユーザー

退会済みユーザー

2019/05/22 07:29

PHPは始めたばかりです。 下記のチュートリアルを読んで、簡単なブログを作りました。その記事に「カテゴリ別に分ける」というような機能をつけたいのです。 https://book.cakephp.org/2.0/ja/tutorials-and-examples.html
m.ts10806

2019/05/22 07:42

バージョンは2でいいんですか?現時点で最新は3.7ですよ。 あと、私の回答はどれくらい理解できたのでしょうか。 「ブログにカテゴリつける」のであればまさに私の回答通りです。 「これ以上」となるとさすがに質問の域を出兼ねません。ほぼ作業依頼になってしまいます。 teratailは質問サイトであってサポートセンターでもないですし、ご自身が「やりたい」と思っていることなのですから、全体の9割くらいは自身でやっていくことになります。
退会済みユーザー

退会済みユーザー

2019/05/22 07:49

バージョンは2で大丈夫です。 もちろん作業依頼をする気はありません。 できるものなら、ここで質問をせず、一人で全部調べてできる様になりたいです。 しかし、どういう方向性で調べたら良いのか、どうすれば自力でできるのか、が分からないのです。「自力でできるようになれるなり方が分からない」という感じです。なので、已むなくここで質問させて頂きました。 ここに質問するまでに50時間くらい「cakephp カテゴリ 実装 」などで検索しましたがほんの1ミリも進まなかったので、質問しました。
m.ts10806

2019/05/22 08:02 編集

確認すべきはCakePHPではなくデータ構成・データ構造のほうですね。 チュートリアルにそってブログをつくられたのでしたらデータは既にできているわけですし、そこにもう1つプラスの概念を入れこむわけですよね。 そしたら最初の「設計」に戻る必要があります。 ただ、設計の考え方については私の回答で充分に説明しつくされたと思っています。 あとはどのようにそれを今の設計に盛り込み、実装に反映するか、は自身で考えることになります。 「1対多だ」とご自身でも方向性が見えたんだろうなと思ったのですが、 それが見えたはずであろう今、何が課題でしょうか。 回答とコメントを繰り返すことになってしまいますけど・・
退会済みユーザー

退会済みユーザー

2019/05/22 08:54

回答にある「記事データテーブルの表」は、SQLの内容でしょうか? それともサイトを表示した時の表でしょうか?
m.ts10806

2019/05/22 08:58

データベースに作成するデータイメージです。
退会済みユーザー

退会済みユーザー

2019/05/22 09:02

書いていただいた ・カテゴリマスタテーブル ・記事データテーブル では「カテゴリ」のカラムが両方ともにありますが、両方ともにカテゴリのカラムを書かないといけないということでしょうか?
m.ts10806

2019/05/22 09:22

「カテゴリ」カラムではないですよ。提示記事の一対多のところを読んできちんとイメージしてください。あとデータベース設計の基本を学んでください。 「Webサイトの仕様」となってくると作る人が決めることになりますので。 文字で追うよりエクセルなどできちんと表にしてER図を書いてみたほうが良いです。
m.ts10806

2019/05/22 10:49

まあ、テーブル設計は「どのように検索させたいか」で決まっていくので、もし「カテゴリ検索」を重視したいのであれば記事テーブルにカテゴリ持たずに「記事カテゴリ管理テーブル」を作って一対多対多の構造にするのもありです。 とはいえ、いきなり一対多は難しいので一対一を作ってからにしてはどうでしょうか。 私が提示したイメージ表から変わる点は記事テーブルのカテゴリコードが入るカラムだけですけど。 1記事に設定できるカテゴリを1つだけにするわけです。作りはシンプルになるので作りやすくはなるかと
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問