【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にアクセスするとカートの情報が取得できると思います。
まとめ
ここまでの調査でもかなり時間かかりましたが、少しずつわかってきました。
いろいろカスタマイズしてみたいと思います。