【コラム】

Yet Another 仕事のツール

60 osCommerceでショップを構築(7) お勧め商品を表示

    鶴田展之  [2005/04/05]

    いよいよ今回は、osCommerce本体のスクリプトを改造し、「お勧め商品」を表示するようにしてみよう。とはいえ、実はosCommerceには既に同様の機能が実装されていたりする。これは「also_purchased_products」と呼ばれるosCommerceのモジュールによって提供される機能で、以下のスクリーンショットのように、「この商品を買った人は、こんな商品も買っています」ブロックを表示するものだ。

    「この商品を買った人は、こんな商品も買っています」ブロックを表示する機能が、osCommerceにももともと実装されている

    しかし、本コラムで行う改造は、PHPで書かれたアプリケーションが、いかに簡単にカスタマイズできるかを示すことを主眼としている。あえて、osCommerceの元々の機能を、自分で作った推売システムで置き換えてしまうことにしよう。

    実際の改造に入る前に、osCommerceをテストに適した設定に変更しておこう。管理画面の基本設定で、「キャッシュ」を「不使用」に設定する。これは、キャッシュを使用するようにしていると、スクリプトの変更が直ちに画面に反映されず、デバッグがしにくくなるためだ。

    キャッシュの設定を変更したら、osCommerceのカタログページにアクセスして、何かひとつ商品を選択してみよう。アドレスバーに表示されるURIを見れば、商品情報の表示は「product_info.php」というスクリプトが担当していることがわかるだろう。商品情報のページに他のお勧め商品を表示するのであれば、このproduct_info.phpを書き換えればよいわけだ。

    早速product_info.phpをエディタで開いてみよう。PHPスクリプトの編集に使うエディタはなんでも構わないが、最低限、複数文字エンコーディングの判別が可能なものが必要だ。今後本格的にPHPスクリプトを作成する予定があるのならば、以前紹介した「Eclipse 」などの統合開発環境を使ってもよい。Eclipseには「PHPEclipse」などのPHPプラグインもある。これらのプラグインは、PHPスクリプトの開発に特化したエディタが付属していて非常に便利だ。PHPEclipseについては、いずれまた本コラムの中で詳しく紹介する機会もあるだろう。

    話をproduct_info.phpに戻そう。まず、既存の「also_purchased_products」モジュールを呼び出している箇所は、172行目あたりの以下の部分だ。

    <?php
        if ( (USE_CACHE == 'true') && !SID ) {
          echo tep_cache_also_purchased(3600);
        } else {
          include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
        }
      }
    ?>

    ここでは、外部ファイル(具体的にはincludes/modules/also_purchased_products.php)に記述されたスクリプトを、「include」命令によって実行時に取り込むようになっている。この部分は、思い切って全部コメントアウトしてしまおう。

    <?php
    //    if ( (USE_CACHE == 'true') && !SID ) {
    //      echo tep_cache_also_purchased(3600);
    //    } else {
    //      include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
    //    }
    //  }
    ?>

    代わりに、ここには以下の処理を記述する。

    <?php
        $query = sprintf("select r.*, p.products_name ".
                         "from recommend r, products_description p ".
                         "where r.products_id = %d ".
                         "and p.language_id = 4 ".
                         "and r.recommend_products_id = p.products_id ".
                         "order by r.rank;",
                         $_GET["products_id"]);
        $recommend = tep_db_query($query);

        print('<table border="0"><tr><th>----Recommend!!!-----</th></tr>');

        while ($recommend_values = tep_db_fetch_array($recommend)) {
            printf('<tr><td>'.
                   '<a href="product_info.php?products_id=%d" target="_self">'.
                   '%s</a></td></tr>', 
                   $recommend_values['recommend_products_id'],
                   $recommend_values['products_name']);
        }

        print('</table>');

    //    if ( (USE_CACHE == 'true') && !SID ) {
    //      echo tep_cache_also_purchased(3600);
    //    } else {
    //      include(DIR_WS_MODULES . FILENAME_ALSO_PURCHASED_PRODUCTS);
    //    }
    //  }
    ?>

    簡単に処理の概要を解説しておこう。まず、$query変数には、データベースからお勧め商品の情報を検索するための「SQL」命令が入る。ちょっとわかりにくいかもしれないが、基本的には、選択された商品のIDを元に前回作成したrecommendテーブルを検索しているだけだ。products_descriptionテーブルが結合されているが、これはお勧め商品の商品名を取得するためである。なお、「language_id = 4」としているのは、osCommerceが各国語毎にデータとして保持している商品の詳細情報のうち、日本語のデータだけを選択するためだ。本来はこういった「コードをスクリプトにべた書き」するようなことは、後のメンテナンス性を損ねるので避けるべきなのだが、今回は、サンプルとして「動く」のが優先ということで目をつぶっていただきたい。

    データベースの検索は、osCommerceにあらかじめ用意されている「tep_db_query」関数で行う。同様に、検索結果からの値の取り出しには、「tep_db_fetch_array」関数を使用している。これらの関数はincludes/functions/database.phpに定義されており、osCommerce全体のデータベース処理を共通化している。現時点では、osCommerceはMySQLにしか対応していないが、データベース処理が関数として独立しているので、他のデータベースを使うように移植するのも、さほど難しくないはずだ。

    さて、この改造の結果、商品情報のページの表示は画面のように変更される。

    改造の結果、商品情報のページの表示は画面のように変更される

    ちゃんとrecommendテーブルに登録されたお勧め商品が表示されるようになった。見た目的にはあまり格好良くないが、これはデザインを考えながら、PHPから出力されるHTMLのタグやCSSに手を加えていけばよいだろう。

    なお、PHPの文法や関数に関しては、非常わかりやすいドキュメントも提供されている。いきなり高度なアプリケーションを開発するのは難しくても、osCommerceのようなアプリケーションで、既存のコードを参考にしながらカスタマイズするのは割と簡単だ。是非、読者の皆さんも挑戦してみて欲しい。

    新着記事

    特設サイトの情報

      求人情報

      人気記事

      一覧

      イチオシ記事

      新着記事

      特別企画

      転職ノウハウ

      あなたの仕事適性診断

      4つの診断で、自分の適性を見つめなおそう!

      Heroes File ~挑戦者たち~

      働くこと・挑戦し続けることへの思いを綴ったインタビュー

      はじめての転職診断

      あなたにピッタリのアドバイスを読むことができます。

      転職Q&A

      転職に必要な情報が収集できます

      スカウト転職する

      企業からアプローチのメッセージが届きます。

      マイナビニュースマガジン