EC-CUBE 最近見た商品を実装する(3)

■商品マスタの商品公開ステータスを一括操作する

過去に投稿したEC-CUBE 最近見た商品を実装する(2)では『商品一覧』にしか最近みた商品が表示されないこれは
最近見た商品を取得する処理が【LC_Page_Products_List_Ex.php】で記述されているためである

この状況を改善するためにはブロックの呼び出しがあった際に最近見た商品を取得する必要がある

手順:
EC-CUBE 最近見た商品を実装する(1)EC-CUBE 最近見た商品を実装する(2)を読んで実装する
【LC_Page_Products_List_Ex.php】と【LC_Page_Products_Detail_Ex.php】ファイルを修正する
itemhistory.phpファイルを作成する
LC_Page_FrontParts_Bloc_Itemhistory_Ex.phpを作成する
LC_Page_FrontParts_Bloc_Itemhistory.phpを作成する
データベースを修正する

EC-CUBE 最近見た商品を実装する(1)EC-CUBE 最近見た商品を実装する(2)を読んで実装する

※過去の記事を参照

■【LC_Page_Products_List_Ex.php】と【LC_Page_Products_Detail_Ex.php】ファイルを修正する

  /**
   * Page のプロセス.
   *
   * @return void
   */
  function process()
  {
    $this->mode = $this->getMode();
    
    switch ($this->getMode()) {
      case 'json':
        break;
      default:
        // ↓↓↓ここから削除↓↓↓
        $this->getItemHistory();
        // ↑↑↑ここまで削除↑↑↑
        break;
    }
    
    parent::process();
    $this->action();
  }
    
  /**
   * クッキーに保管されている閲覧履歴を取得
   */
  
  // ↓↓↓ここから削除↓↓↓
  function getItemHistory()
  {
    if(isset($_COOKIE['history']))
    {
      // 最近見た商品が上に来るように配列を逆にする
      $history = array_reverse($_COOKIE['history']);
      
      $obj_product = new SC_Product_Ex();
      
      foreach($history as $id)
      {
        // クッキーに保管された情報を元にデータを取得する
        $products = $obj_product->getDetail($id);
        
        if(is_null($products['product_id']) !== true)
        {
          // 存在したら商品情報をセット
          $this->arrItemHistory[] = $products;
        }
      }
    }
  }
  // ↑↑↑ここまで削除↑↑↑
関数【getItemHistory】をまるっと削除
呼び出し元の【$this->getItemHistory();】を削除
  /**
   * 閲覧履歴を設定(Cookie利用)
   */
  function setItemHistory($__id)
  {
    ・・・省略
    
    if(is_null($data['product_id']) !== true)
    {
      
      
      ・・・省略
      
      
        foreach($history as $key=>$id)
        {
          // ↓↓↓修正↓↓↓
          setcookie('history['.$key.']', $id, COOKIE_TICKET, '/');
        }
      }
      else
      {
        
        
        ・・・省略
        
        
        // 現在のクッキー情報をクリア
        for($i=0; $i<PRODUCT_HISTORY_MAX; $i++)
        {
          // ↓↓↓修正↓↓↓
          setcookie('history['.$i.']', '', UNSET_COOKIE_TICKET, '/');
        }
        
        foreach($history as $key=>$id)
        {
          // ↓↓↓修正↓↓↓
          setcookie('history['.$key.']', $id, COOKIE_TICKET, '/');
        }
      }
      
      ・・・省略
  }
クッキー情報の保管するパスを設定

■itemhistory.phpファイルを作成する

<?php
require_once realpath(dirname(__FILE__)) . '/../../require.php';
require_once CLASS_EX_REALDIR . 'page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Itemhistory_Ex.php';

$objPage = new LC_Page_FrontParts_Bloc_Itemhistory_Ex();
$objPage->blocItems = $params['items'];
$objPage->init();
$objPage->process();

■LC_Page_FrontParts_Bloc_Itemhistory_Ex.phpを作成する

<?php
require_once CLASS_REALDIR . 'pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Itemhistory.php';

/**
 * Itemhistory のページクラス(拡張).
 *
 * LC_Page_FrontParts_Bloc_Itemhistory をカスタマイズする場合はこのクラスを編集する.
 *
 * @package Page
 * @version $ $
 */
class LC_Page_FrontParts_Bloc_Itemhistory_Ex extends LC_Page_FrontParts_Bloc_Itemhistory
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    function init()
    {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    function process()
    {
        parent::process();
    }

    /**
     * Page のアクション.
     *
     * @return void
     */
    public function action()
    {
        $this->arrItemHistory = $this->getItemHistory();
    }

  /**
   * クッキーに保管されている閲覧履歴を取得
   */
  function getItemHistory()
  {
    $arrItemHistory = array();
    
    if(isset($_COOKIE['history']))
    {
      // 最近見た商品が上に来るように配列を逆にする
      $history = array_reverse($_COOKIE['history']);
      
      $obj_product = new SC_Product_Ex();
      
      foreach($history as $id)
      {
        // クッキーに保管された情報を元にデータを取得する
        $products = $obj_product->getDetail($id);
        
        if(is_null($products['product_id']) !== true)
        {
          // 存在したら商品情報をセット
          $arrItemHistory[] = $products;
        }
      }
    }
    
    return $arrItemHistory;
  }
}

■LC_Page_FrontParts_Bloc_Itemhistory.phpを作成する

<?php
require_once CLASS_EX_REALDIR . 'page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Ex.php';

/**
 * Itemhistory のページクラス.
 *
 * @package Page
 * @author LOCKON CO.,LTD.
 * @version $ $
 */
class LC_Page_FrontParts_Bloc_Itemhistory extends LC_Page_FrontParts_Bloc_Ex
{
    /**
     * Page を初期化する.
     *
     * @return void
     */
    public function init()
    {
        parent::init();
    }

    /**
     * Page のプロセス.
     *
     * @return void
     */
    public function process()
    {
        $this->action();
        $this->sendResponse();
    }
}

■データベースを修正する(phpMyAdminを利用する場合)
ec_cube_071

『phpMyAdmin』にログインして『dtb_bloc』をクリックする
block_nameが『最近見た商品』の行の『編集ボタンをクリック』

ec_cube_072

呼び出しファイルを設定する『php_path』に【frontparts/bloc/itemhistory.php】を設定する
『実行する』をクリックする

以上で全てのページに対して『最近見た商品』のブロックを表示することが出来る

■レイアウト設定から『最近見た商品』を全ページに適用
ec_cube_073

■適用後の画面(TOPページ)
ec_cube_074

■適用後の画面(当サイトについてページ)
ec_cube_075

■適用後の画面(かごの中身ページ)
ec_cube_076

次回はトップページに新規商品一覧を表示するブロックを作成する

Comments are closed.