Calendar

<< 1月  
 1234
567891011
12131415161718
19202122232425
262728293031  
  • EC-CUBEで商品ステータス別に検索し一覧ページに表示する
  • 2015.07.04
  • ECCUBEバージョン:2.13.3

    対象ファイル
    data/class/pages/products/LC_Page_Products_List.php
    data/Smarty/templates/default/products/list.tpl

    変更箇所
    1)action関数内の配列にproduct_status_idを追加

    $this->arrSearchData = array(
    ‘category_id’ => $this->lfGetCategoryId(intval($this->arrForm[‘category_id’])),
    ‘maker_id’ => intval($this->arrForm[‘maker_id’]),
    ‘name’ => $this->arrForm[‘name’],
    ‘product_status_id’ => $this->arrForm[‘product_status_id’]
    );

    2)lfInitParam関数内に下記を追加

    $objFormParam->addParam(‘商品ステータスID’, ‘product_status_id’, INT_LEN, ‘n’, array(‘NUM_CHECK’, ‘MAX_LENGTH_CHECK’));

    3)lfGetSearchCondition関数内に下記を追加

    if ($arrSearchData[‘product_status_id’]) {
    $searchCondition[‘where’] .= ‘ AND product_id IN (SELECT product_id FROM dtb_product_status WHERE product_status_id = ? AND del_flg = 0)’;
    $searchCondition[‘arrval’][] = $arrSearchData[‘product_status_id’];
    }

    4)lfGetPageTitle内に下記を追加
    ※追加分のみ表示しています。カッコはきちんと閉じてください。

    } elseif ($this->arrSearchData[‘product_status_id’] > 0) {
    return $this->arrSTATUS[$this->arrSearchData[‘product_status_id’]];

    5)list.tpl内のform1内に下記を追加

    <input type=”hidden” name=”product_status_id” value=”<!--{$arrSearchData.product_status_id|h}-->” />

【この記事のタグ】
コメント&トラックバック(0)
  • EC-CUBEで商品コードで検索可能にする方法
  • 2015.07.03
  • 商品コードで検索する必要があったので対応方法をメモします。

    ECCUBEバージョン:2.13.3

    対象ファイル
    data/class/pages/products/LC_Page_Products_List.php

    対象関数
    上記ファイル内の以下の関数を変更するだけです。
    lfGetSearchCondition

    ●変更前
    // 分割したキーワードを一つずつwhere文に追加
    foreach ($names as $val) {
    if (strlen($val) > 0) {
    $searchCondition[‘where’] .= ‘ AND ( alldtl.name ILIKE ? OR alldtl.comment3 ILIKE ?) ‘;
    $searchCondition[‘arrval’][] = “%$val%”;
    $searchCondition[‘arrval’][] = “%$val%”;
    }
    }

    ●変更後
    // 分割したキーワードを一つずつwhere文に追加
    foreach ($names as $val) {
    if (strlen($val) > 0) {
    $searchCondition[‘where’] .= ‘ AND ( alldtl.name ILIKE ? OR alldtl.comment3 ILIKE ? OR product_id IN (SELECT product_id FROM dtb_products_class WHERE product_code ILIKE ? AND del_flg = 0) ) ‘;
    $searchCondition[‘arrval’][] = “%$val%”;
    $searchCondition[‘arrval’][] = “%$val%”;
    $searchCondition[‘arrval’][] = “%$val%”;

    }
    }

    管理画面の「商品管理>商品マスター」で商品コードでの検索機能があったので下記のファイルのsearch_product_codeの処理部分を参考に変更しました。
    (参考ファイル)data/class/pages/admin/products/LC_Page_Admin_Products.php

【この記事のタグ】
コメント&トラックバック(0)
  • ECCUBEで注文完了メールに注文商品の画像を入れる
  • 2015.07.01
  • EC-CUBEバージョン:2.13.3

    対象ファイル
    data/class/helper/SC_Helper_Mail.php
    data/Smarty/templates/default/mail_templates/order_mail.tpl

    対象関数
    sfSendOrderMail

    ●変更前
    $objPage->tpl_header = $mailtemplate[‘header’];
    $objPage->tpl_footer = $mailtemplate[‘footer’];

    $arrTplVar->arrOrderDetail = $objQuery->select(‘*’, ‘dtb_order_detail’, $where, array($order_id));

    if ($send) {
    if ($objSendMail->sendMail()) {
    $this->sfSaveMailHistory($order_id, $template_id, $tosubject, $body);
    }
    }

    ●変更後
    //DBから読み込むメールテンプレートの改行をHTML用の改行に変換
    $objPage->tpl_header = nl2br($mailtemplate[‘header’]);
    $objPage->tpl_footer = nl2br($mailtemplate[‘footer’]);

    //画像のファイル名を取得
    $arrTplVar->arrOrderDetail = $objQuery->select(‘*,(SELECT main_image FROM dtb_products WHERE product_id = dtb_order_detail.product_id) as main_image ‘, ‘dtb_order_detail’, $where, array($order_id));

    //HTMLメールを送るように変更
    if ($send) {
    if ($objSendMail->sendHtmlMail()) {
    $this->sfSaveMailHistory($order_id, $template_id, $tosubject, $body);
    }
    }

    そしてHTMLメールに変更する為、メールテンプレートのorder_mail.tpl内の改行したい部分に<br />タグを挿入。
    また、sectionループ内で、画像を挿入したい部分に下記のように追加する。

    <img src="http://ドメイン名/upload/save_image/<!–{$arrOrderDetail[cnt].main_image}–>" />

【この記事のタグ】
コメント&トラックバック(0)
  • EC-CUBEで会員機能を無くし更に「お支払方法・お届け時間等の指定」ページも無くす
  • 2015.06.20
  • ECCUBEバージョン:2.13.3

    対象ファイル
    data/class/pages/shopping/LC_Page_Shopping.php
    data/Smarty/templates/default/shopping/confirm.tpl

    対象関数
    LC_Page_Shopping.php内のaction

    【以下変更箇所抜粋】

    ●変更前
    // お客様情報登録
    case ‘nonmember_confirm’:
    $this->tpl_mainpage = $nonmember_mainpage;
    $this->tpl_title = $nonmember_title;
    $this->lfInitParam($objFormParam);
    $objFormParam->setParam($_POST);
    $this->arrErr = $this->lfCheckError($objFormParam);

    if (SC_Utils_Ex::isBlank($this->arrErr)) {
    $this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam);

    $arrParams = $objFormParam->getHashArray();
    $shipping_id = $arrParams[‘deliv_check’] == ‘1’ ? 1 : 0;
    $objPurchase->setShipmentItemTempForSole($objCartSess, $shipping_id);

    $objSiteSess->setRegistFlag();

    SC_Response_Ex::sendRedirect(SHOPPING_PAYMENT_URLPATH);
    SC_Response_Ex::actionExit();
    }
    break;

    default:
    // 前のページから戻ってきた場合は, お客様情報入力ページ
    if (isset($_GET[‘from’]) && $_GET[‘from’] == ‘nonmember’) {
    $this->tpl_mainpage = $nonmember_mainpage;
    $this->tpl_title = $nonmember_title;
    $this->lfInitParam($objFormParam);
    } else {
    // 通常はログインページ
    $this->lfInitLoginFormParam($objFormParam);
    }

    $this->setFormParams($objFormParam, $objPurchase, $this->tpl_uniqid);
    break;

    ●変更後
    // お客様情報登録
    case ‘nonmember_confirm’:
    $this->tpl_mainpage = $nonmember_mainpage;
    $this->tpl_title = $nonmember_title;
    $this->lfInitParam($objFormParam);
    $objFormParam->setParam($_POST);
    $this->arrErr = $this->lfCheckError($objFormParam);

    if (SC_Utils_Ex::isBlank($this->arrErr)) {
    $this->lfRegistData($this->tpl_uniqid, $objPurchase, $objCustomer, $objFormParam);

    $arrParams = $objFormParam->getHashArray();
    $shipping_id = $arrParams[‘deliv_check’] == ‘1’ ? 1 : 0;
    $objPurchase->setShipmentItemTempForSole($objCartSess, $shipping_id);

    $objSiteSess->setRegistFlag();

    SC_Response_Ex::sendRedirect(SHOPPING_CONFIRM_URLPATH);
    // SC_Response_Ex::sendRedirect(SHOPPING_PAYMENT_URLPATH);
    SC_Response_Ex::actionExit();
    }
    break;

    default:
    // 前のページから戻ってきた場合は, お客様情報入力ページ
    // if (isset($_GET[‘from’]) && $_GET[‘from’] == ‘nonmember’) {
    $this->tpl_mainpage = $nonmember_mainpage;
    $this->tpl_title = $nonmember_title;
    $this->lfInitParam($objFormParam);
    // } else {
    // 通常はログインページ
    // $this->lfInitLoginFormParam($objFormParam);
    // }

    $this->setFormParams($objFormParam, $objPurchase, $this->tpl_uniqid);
    break;

    メンテナンス性を考え、実際には「LC_Page_Shopping_Ex.php」に変更箇所だけ記述して上書きしています。
    まず、defaultの所で、ログインページを表示するのをやめゲスト購入だけ表示するようにしました。
    またサイト内ではMyページ等へのリンクも全て削除する必要があります。

    次にnonmember_confirmの所でリダイレクト先をSHOPPING_CONFIRM_URLPATHに変更しています。

    最後にconfirm.phpの「戻る」ボタンのリンク先を<a href="./payment.php">から<a href="payment.php?mode=return">に変更して戻り先をお客様情報入力画面に変更しました。

【この記事のタグ】
コメント&トラックバック(0)
  • EC-CUBEでスマートフォンからのアクセスでPCサイトを表示する
  • 2015.03.18
  • 最近、EC-CUBE案件が増えてます。
    予算等の関係でPCサイトのみのECサイトを制作する場合、
    スマートフォンからのアクセスの際にPC用のサイトを表示する必要がありましたのでその方法をまとめておきます。
    ※EC-CUBEのバージョンは2.13.3です。

    ●対象ファイル
    /data/class_extends/SC_Display_Ex.php

    ●変更箇所
    /data/class/SC_Display.phpのファイルのdetectDevice関数をコピーして
    SC_Display_Ex.phpのclass内にペーストします。

    public static function detectDevice($reset = FALSE)
    {
    if (is_null(SC_Display_Ex::$device) || $reset) {
    $nu = new Net_UserAgent_Mobile();
    $su = new SC_SmartphoneUserAgent_Ex();
    if ($nu->isMobile()) {
    SC_Display_Ex::$device = DEVICE_TYPE_MOBILE;
    // } elseif ($su->isSmartphone()) {
    // SC_Display_Ex::$device = DEVICE_TYPE_SMARTPHONE;
    } else {
    SC_Display_Ex::$device = DEVICE_TYPE_PC;
    }
    }

    return SC_Display_Ex::$device;
    }

    これで、スマートフォンの時でもPCサイトを表示するようになります。
    ちなみに、スマートフォンと携帯のいずれのアクセスの時もPCサイトを表示するようにするには
    下記のようになると思います。

    public static function detectDevice($reset = FALSE)
    {
    if (is_null(SC_Display_Ex::$device) || $reset) {
    $nu = new Net_UserAgent_Mobile();
    $su = new SC_SmartphoneUserAgent_Ex();
    // if ($nu->isMobile()) {
    // SC_Display_Ex::$device = DEVICE_TYPE_MOBILE;
    // } elseif ($su->isSmartphone()) {
    // SC_Display_Ex::$device = DEVICE_TYPE_SMARTPHONE;
    // } else {
    SC_Display_Ex::$device = DEVICE_TYPE_PC;
    // }
    }

    return SC_Display_Ex::$device;
    }

    要するに、SC_Display_Ex::$device = DEVICE_TYPE_PC;だけにするという事ですね。

【この記事のタグ】
コメント&トラックバック(0)

▲ PAGE TOP