попытка добавить таймер обратного отсчета jquery по специальной цене в opencart


Я пытаюсь поставить таймер обратного отсчета jquery по специальной цене в opencart.

Поскольку у нас есть дата начала и дата окончания для специальной цены в панели администратора open cart,

Я хочу, чтобы таймер jQuery count показывал оставшиеся

(days:Hours:Min:SEC)

За эту особую цену.

Я получаю код для jQuery countdown и помещаю в файл шаблона продукта, но он не работает и не помогает или код в интернете.

Спасибо

2 3

2 ответа:

Отличный вопрос. Как вы заметили, данные, которые вы хотите отобразить, уже являются частью админки / бэкенда OpenCart, но они недоступны на интерфейсе. Я покажу вам, как его добавить.

Из-за архитектуры MVC OpenCart вам придется внести изменения в 3 местах. Модель, Вид и контроллер. Прежде всего, вам нужно будет получить данные из базы данных. Поскольку мы хотим внести изменения во внешний интерфейс, все будет содержаться в каталог каталог. Если вы посмотрите на код, вы найдете каталог/модель/каталог/продукт.php . Именно здесь мы собираемся сделать наше первое изменение. Специальная цена доступна в ModelCatalogProduct, но дата окончания специальной цены отсутствует. Вы можете либо изменить существующий метод getProduct (), либо создать свой собственный метод. Я собираюсь показать вам последнее, в то время как первое оставлено в качестве упражнения для пользователь.

Каталог / модель / каталог / продукт.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, выберите свой любимый .

Каталог / вид / тема / по умолчанию / шаблон / продукт / продукт.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 } ?>

Проверьте , что у меня есть для вас

Также проверьте это

Еще один вариант над здесь