1.6. 製品とカテゴリー — DB テーブルを作成する
製品とカテゴリーの機能を作る前に、私たちの顧客とサイト管理者が必要とする情報について考えてみましょう。商品について十分な情報を提供する必要があり、商品名、商品の詳細な説明、商品の価格を表示しなければなりません。商品の写真や追加の画像を掲載することもできます。配送料の計算のために商品の重量が必要になるかもしれません。在庫がない商品を売らないよう、倉庫の在庫数も必要です。サイト管理者には商品の ID と、検索エンジン向けの人間が読める URL が必要になります。
結果として、少なくとも次のフィールドが必要になります:
1.5. データベースとテンプレートを扱うクラスを接続する
私たちはフレームワークの構造を作りました。今度はデータ、つまりニュースや商品の保存について考える時です。DB を扱うオブジェクトは、次のことができる必要があります:
- DB との接続を管理する
- DB からの小さな抽象化を提供する
- クエリをキャッシュする
- DB との共通操作をより簡単にする
そのために、オブジェクト Registry/objects/db.class.php を作ります:
1.4. MVC フレームワークの作成に取りかかる
フレームワークに何が必要かは十分に書いてきました。今こそ、私たちのフレームワークを実装する時です。まず、Web サーバーが必要です。Denwer を試すこともできますが、PHP を更新する必要があるかもしれません。
PHP 5.5.20 入りの Denwer は、このページからダウンロードできます:
https://drupalbook.org/ru/drupal/denwer-obnovlenie-php
または GitHub から
https://github.com/levmyshkin/denwer-php-5.5.20
私たちのフレームワークの動作は index.php ファイルから始まります。このファイルはレジストリからインスタンスを返し、必要なコントローラーを呼び出してレジストリの結果を渡します。コントローラーは今度は、必要なモデルを呼び出せます。
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 パラメーターを通じて、このフォームでファイルをアップロードすることをブラウザに知らせます。フォームの準備ができたので、ファイルアップロードのフィールドを追加しましょう: