私はopencartに特別価格のjqueryカウントダウンタイマーを入れようとしています。
オープンカート管理パネルに特別価格の開始日と終了日があるので、
残りを表示するためにjqueryカウントタイマーが欲しい
(days:Hours:Min:SEC)
その特別価格で。
jqueryカウントダウンのコードを取得し、製品のテンプレートファイルに入れましたが、機能せず、インターネット上のヘルプやコードがありません。
ありがとう
素晴らしい質問です。ご指摘のとおり、表示したいデータはすでに OpenCart の管理/バックエンドの一部ですが、フロントエンドでは利用できません。追加する方法を紹介します。
OpenCart のMVCアーキテクチャにより、3 箇所を変更する必要があります。モデル、ビュー、およびコントローラー。まず最初に、データベースからデータを取得する必要があります。フロントエンドに変更を加えようとしているため、すべてがカタログディレクトリに含まれます。コードを見ると、catalog/model/catalog/product.phpが見つかります。ここで、最初の変更を行います。ModelCatalogProduct で特別価格を利用できますが、特別価格の終了日はありません。既存の getProduct() メソッドを変更するか、独自のメソッドを作成できます。後者を紹介しますが、前者はユーザーの演習として残します。
カタログ/モデル/カタログ/product.php
class ModelCatalogProduct extends Model {
...
// Return an array containing special (price, date_start, date_end).
// or false if no special price exists.
public function getSpecialPriceDates($product_id) {
if ($this->customer->isLogged()) {
$customer_group_id = $this->customer->getCustomerGroupId();
} else {
$customer_group_id = $this->config->get('config_customer_group_id');
}
$query = $this->db->query("SELECT price, date_start, date_end FROM " . DB_PREFIX . "product_special WHERE product_id = '" . (int)$product_id . "' AND customer_group_id = '" . (int)$customer_group_id . "' AND ((date_start = '0000-00-00' OR date_start < NOW()) AND (date_end = '0000-00-00' OR date_end > NOW())) ORDER BY priority ASC, price ASC LIMIT 1");
if ($query->num_rows) {
return array(
'special' => $query->row['price'],
'date_start' => $query->row['date_start'],
'date_end' => $query->row['date_end'],
);
} else {
return false;
}
}
...
}
これで、getSpecialPriceDates() 関数を呼び出して、製品のスペシャルがいつ終了するかを確認できるようになりました。このデータをビューで利用できるようにしましょう。そのためには、それをコントローラーに追加する必要があります。「特別な」変数が設定されている場所については、ControllerProductProduct を調べます。
カタログ/コントローラー/製品/製品.php
...
if ((float)$product_info['special']) {
$this->data['special'] = $this->currency->format($this->tax->calculate($product_info['special'], $product_info['tax_class_id'], $this->config->get('config_tax')));
// +++ NEW CODE
$special_info = $this->model_catalog_product->getSpecialPriceDates($product_id);
if ($special_info) {
$this->data['special_date_end'] = $special_info['date_end'];
} else {
$this->date['special_date_end'] = false;
}
// +++ END NEW CODE
} else {
$this->data['special'] = false;
}
...
最後のタスクは、製品ビューにタイマーを実装することです。これは、catalog/view/theme/default/template/product/product.tplのような場所にあります (独自のテーマがある場合は、defaultを{your-theme}に置き換えてください)。jQuery にはさまざまなカウントダウン タイマー ソリューションがたくさんあります。お気に入りを選んでください。
カタログ/ビュー/テーマ/デフォルト/テンプレート/製品/product.tpl
<?php if (!$special) { ?>
<?php echo $price; ?>
<?php } else { ?>
<span class="price-old"><?php echo $price; ?></span> <span class="price-new"><?php echo $special; ?></span>
<?php if ($special_date_end): ?>
<!-- TIMER CODE HERE -->
<div class="timer"></div>
<?php endif; ?>
<?php } ?>