1.3. PHP フレームワークを組み立てる
フレームワークを構築する方法はさまざまあります。とても複雑なフレームワークを好む人もいれば、とてもシンプルなものを好む人もいます。私たちの記事では、使いやすく理解しやすいフレームワークを手早く組み立てていきます。
私たちの記事は、オンラインストアの作成に必要なものとは異なる、あなた自身のフレームワークの開発を助けます。より大きなものを作るために、フレームワークに他の部分を簡単に追加できるようになります。この連載記事の主な目的は、あらゆる CMS 向けに自分自身のフレームワークを作れるようになることです。
パターン(Patterns)
フレームワークの開発には、さまざまなアプリケーション設計のテンプレート、すなわちパターンが用いられます。パターンとは、プログラム開発に関わる共通の課題を解決する、最も優れた解決策と実践のことです。パターンのうち、私たちは次のものを使います:
1.2. 私たちの CMS に何を作るか
既存の commerce サイトを見てきたので、私たちの将来の CMS の機能を洗い出す必要があります。明らかに、ユーザーがさまざまなカテゴリーの商品を見つけ、閲覧できるようにしなければなりません。ユーザーは、それらの商品をカートに追加して注文でき、注文手続きを通じて、配送料・支払い・税の計算のために注文データを入力できるべきです。さらに、注文と商品の管理パネルも作ります。以下に、すべての機能を詳しく書き出します:
製品
商品について、次の機能を作る必要があります:
- 製品の検索:カテゴリーのカタログと製品検索という 2 つの製品リストが必要です。
- 製品の閲覧:ユーザーが製品を見つけて興味を持ったら、当然、ユーザーが商品をより詳しく閲覧できるようにする必要があります。そのため、製品に対応する情報(価格、重量、サイズ、説明)を設定できるようにしなければなりません。また、商品に評価やコメントを付けられる機能を追加できるとよいでしょう。
- ウィッシュリストを作り、ユーザーが将来買いたい商品を追加できるようにします。
注文手続き
注文手続きのプロセスは 3 つの段階を含みます:
1.1. 自分の CMS を作る。序文。
このコースのこの部分では、オンラインストア向けの自分の CMS の作成に取り組みます。しかし始める前に、自分の CMS を書く必要があるのか、それとも例えば便利な Commerce(と大量の既製モジュール)を持つ Drupal を使うべきなのかを理解するために、この序文を読むべきです。 序文では、次のことを取り上げます:
- オンラインストアの動作のロジック
- 既存のものを使う代わりに、自分の CMS を開発すべきとき
- 自分の CMS の利点
- 他の既製のオンラインストア CMS の説明
オンラインストア:なぜ必要なのか?
誰もがすでにインターネットでの買い物に遭遇したことがあると思います。インターネットには、ありとあらゆるものを売るサイトが溢れています:
PHP レッスン — パート 3 — 自分の CMS を作る
CMS でのサイト作成は、Drupal、Joomla、WordPress だけに限られません。世界では、ほとんどのサイトが自作の CMS で作られています。すでに PHP で多くのコードが書かれているにもかかわらず、プログラマーは非常によく自分自身の開発物を使います。なぜ自分の CMS を使うのか、理解してみましょう。
確かに、自作モジュールのための多くのモジュール、フック、関数を持つ強力なシステム Drupal は存在します。多くの人が自分のモジュールを書けますが、Drupal 自体の作成に携わっている人が何人いるか見てみましょう。もちろん、Drupal は数百、いや数千人のプログラマーの労作だと読んだことがあるでしょう。しかし、実際に誰が Drupal を作っているのか見てみましょう。
Drupal のダウンロードページには、Drupal のコア、つまり CMS 自体に取り組んでいるプログラマーのリストのブロックがあります。
drupal.org/node/3060/committers?sort=desc&order=Commits
そしてこのページには、彼らが加えたコアの修正とともにプログラマーのリストがあります。そのリスト:
PHP レッスン — レッスン 4 — 画像の処理、GD2 ライブラリ
前のレッスンで DB へのクエリの書き方を学んだので、今回はクエリの書き方にはあまり注目せず、単にクエリを書く練習をします。また、クエリの記述を PHP の他の機能の学習と組み合わせていきます。まずは画像の処理から始めましょう。前のレッスンの 1 つですでにファイルをアップロードし、アップロードされたファイル用の Files テーブルもあります。同じテーブルに画像をアップロードしましょう。ただしまず、素材作成フォームに写真アップロード用のフィールドを追加する必要があります。
PHP レッスン — レッスン 3.6 — MySQL DB の操作。JOIN 演算子の種類。
MySQL では、JOIN による抽出をさまざまな方法で行えます。これらすべての種類のクエリを取り上げていきます。JOIN を伴うすべてのクエリのリストです:
- INNER JOIN
- LEFT JOIN
- 右のテーブルとの交差なしの LEFT JOIN
- RIGHT JOIN
- 左のテーブルとの交差なしの RIGHT JOIN
- FULL OUTER
- 左または右のテーブルが空の FULL OUTER
これらの JOIN の種類の図解です:

PHP レッスン — レッスン 3.5 — MySQL DB の操作。JOIN 演算子。サーバーへのファイルアップロード。
このレッスンを書き始める前に、JOIN 演算子を使ったクエリをどう教えるのが良いか長く考えました。というのも、JOIN 演算子は複数のテーブルから同時に抽出するために必要だからです。もう 1 つテーブルが必要なので、それを作りましょう。このレッスンでフォームを通じてアップロードするファイル用のテーブルを作ることを提案します。DB の操作とフォームの操作という 2 つの異なる方向のレッスンになります。
では、ファイルアップロード用のフィールドの追加から始めましょう。フォームがファイルをアップロードできるようにするには、そのパラメーターにフォームの種類を追加する必要があります:
$content .= '<form action="' . $_SERVER['PHP_SELF'] . '" method="post" enctype="multipart/form-data">';
こうして、enctype パラメーターを通じて、このフォームでファイルをアップロードすることをブラウザに知らせます。フォームの準備ができたので、ファイルアップロードのフィールドを追加しましょう:
PHP レッスン — レッスン 3.4 — MySQL DB の操作。DELETE 削除クエリ。
前のレッスンでは、管理クラス simpleCMS に新しいメソッドを追加する方法を学びました。では、レコードを削除するもう 1 つのメソッド delete() を追加しましょう。
メソッドはいつものように追加します:
public function delete($mid){
}
ご覧のとおり、パラメーター $mid、つまり私たちのレコードの id を渡します。前のレッスンを思い出すと、私たちはパラメーターを get リクエストから直接渡す別の方法を使うことにしました。今回は、別の方法でパラメーターを渡してみます。
さて、メソッドを定義したので、index.php ファイルにパスの処理を書きましょう:
PHP レッスン — レッスン 3.3 — MySQL DB の操作。UPDATE によるデータの更新。
私たちはすでに SELECT、INSERT INTO といった MySQL の演算子に触れました。今度は、DB にすでに入力されたデータをどう更新するか学ぶ時です。そのために SQL の UPDATE 演算子を使います。ただしまず、index.php ファイルを変更して、もう 1 つのパスの処理を追加しましょう。次のコードを見つけてください:
if( $_GET['admin'] == 1 ){ // URL に admin 変数があれば
print $obj->display_admin(); // 変数があれば、フォームを表示する
}else{
print $obj->display_public(); // 変数がなければ、メッセージを表示する
}
そして、次のコードに置き換えてください:
PHP レッスン — レッスン 3.2 — MySQL DB の操作。INSERT INTO によるデータの挿入。SELECT によるデータの抽出
前のレッスンでは、サイト用のテーブルを作りました。このレッスンでは、テーブルを改良し、いよいよ DB を扱い始めます。そこにデータを入力し、テーブルからそのデータを取り出します。難しいことは特にないと思うので、始めましょう。
まず、messages テーブルを改良することを提案します。今はデータ用のフィールドがありますが、レコードに番号を付けるためのフィールドがもう 1 つ必要です。Drupal の DB を開くと、node テーブルには nid フィールドがあり、それでノードに番号を付けています。私たちの messages テーブルでも同じようにする必要があります。
phpMyAdmin(Denwer では http://localhost/tools/phpmyadmin)に入り、テーブルを編集しましょう。図のように、テーブルの先頭にもう 1 つ列を追加します: