пытается добавить таймер обратного отсчета jquery по специальной цене в opencart - PullRequest
3 голосов
/ 13 октября 2011

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

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

Я хочуесть таймер подсчета jquery, чтобы показать оставшиеся

(days:Hours:Min:SEC)

по этой специальной цене.

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

спасибо

Ответы [ 2 ]

5 голосов
/ 14 октября 2011

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

Из-за архитектуры MVC OpenCart вам придется вносить изменения в 3 местах. Модель, Вид и Контроллер. Перво-наперво, вам нужно будет получить данные из базы данных. Поскольку мы хотим внести изменения во внешний интерфейс, все будет содержаться в каталоге catalog . Если вы посмотрите на код, вы найдете 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, где установлена ​​специальная переменная.

каталог / контроллер / продукт / product.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;
}

...

Последняя задача - внедрить ваш таймер в представлении продукта. Это будет находиться где-то вроде каталог / вид / тема / по умолчанию / шаблон / продукт / product.tpl (если у вас есть собственная тема, замените default на {your- тема} ). Существует множество различных решений для таймера обратного отсчета для 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 } ?>
1 голос
/ 13 октября 2011

Проверьте что я получил для вас

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

Больше опций над здесь

...