【CS-Cart】サブディレクトリのCS-Cartからカート情報を取得する

【CS-Cart】サブディレクトリのCS-Cartからカート情報を取得する

こんにちわ。kyamashitaです。

今回はCS-Cartの調査している中で発見したことをご紹介します。

調査内容

CS-Cartをサブディレクトリにインストールし動作させている状態で、別の階層からでもカートを取得できるか調査しました。

いくつか対応方法はありそうでしたが、下記の方法を採用しました。

方針

バージョンアップを考え本体に影響がないようにする。

コントローラと対応するテンプレートを追加する。

サンプルの構成

DocumentRoot
/var/www/html

/var/www/html/
 - sample.html ★ここでもカートの内容を表示させる
 - cscart/

実装

URL、コントローラ、テンプレートの関係は下記のようになっているので、それぞれ実装しました。

  • URL

    http://domain/cscart/index.php?dispatch=[コントローラ名].[モード名]

  • コントローラ

    /DocumentRoot/cscart/app/addons/[アドオン名]/controllers/frontend/[コントローラ名].php

  • テンプレート

    /DocumentRoot/cscart/design/themes/[テーマ名]/templates/addons/[アドオン名]/views/[コントローラ名]/[モード名].tpl

アドオンは用意されているMyChangesを利用します。

管理画面で対象のアドオンを有効にします。

コントローラを作ります。

# mkdir -p /var/www/html/cscart/app/addons/my_changes/controllers/frontend
# vim /var/www/html/cscart/app/addons/my_changes/controllers/frontend/sample.php
<?php
if ($mode === 'get') {
  $products = [];
  foreach(Tygh::$app['session']['cart']['products'] as $product){
    $products[] = [
        'product_id'   => $product['product_id'],
        'product_code' => $product['product_code'],
        'product'      => $product['product'],
        'amount'       => $product['amount'],
        'price'        => $product['price']
    ];
  }
  Tygh::$app['view']->assign('products',  json_encode($products, JSON_UNESCAPED_UNICODE));
}

テンプレートを作ります。

# mkdir -p /var/www/html/cscart/design/themes/bright_theme/templates/addons/my_changes/views/sample/
# vim /var/www/html/cscart/design/themes/bright_theme/templates/addons/my_changes/views/sample/get.tpl
{$products}

別階層のsample.htmlで取得します。

<script>
$.get('/cscart/index.php?dispatch=sample.get', function(data){
  data = data.replace(/"/g,'"');
  console.log(data);
});
</script>

結果

カートに商品を入れた状態で、sample.htmlにアクセスするとカートの情報が取得できると思います。

kyamashita_201910_01.png

まとめ

ここまでの調査でもかなり時間かかりましたが、少しずつわかってきました。

いろいろカスタマイズしてみたいと思います。

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ