Ремонт компьютера
Сборка, чистка, апгрейт ремонт любой техники.
Замена частей, установка ПО, установка Windows, антивируса.
Удаленная помощь без вызова на дом.
Создание сайта
Создание сайта с нуля, модулей, скриптов для сайта.
Движки Joomla, Wordpress, Opencart, Prestashop и тд.
SEO продвижение, ремонт, оптимизация сайта.

Как добавить в opencart вывод даты акции

Обновил опенкарт, своему начальнику, и захотелось ему вывод «даты до завершения» акции как в прошлой версии сайта. Тут я и опишу как это сделать подробно — Как добавить в opencart вывод даты акции:

Модуль акций special.tpl

Первое это правим файлик \catalog\model\catalog\product.php

Открываем и добавляем строку (1):

(SELECT date_end FROM ".DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '".(int)$customer_group_id."'   AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special_end,

Теперь мы получаем нужное, добавим в общий массив (2).

'special_end'       => $query->row['special_end'],

Теперь откроем контролер нашей акции \catalog\controller\module\specials.php, и добавим в массив product наше значение:

 

'special_end'       => $query->row['special_end'],

Ну а теперь его легко можно вывести в нашем файлике \catalog\view\theme\default\template\module\specials.php, где угодно, тут же можно и отформатировать его в наш формат:

 

<? $t = strtotime($special_end2); 
 echo date('d m Y',$t); ?>

Вот что вышло при выводе, оформить красиво уже потом легко можно, как и вставить где угодно. Вот что у меня вышло (без форматирования по дате, и с форматированием):


Если что то не вышло, пишите в коментах.

Если в вывод описания товара product.tpl

1) тот же запрос что и в первом случае:

Первое это правим файлик \catalog\model\catalog\product.php

Открываем и добавляем строку (1):

(SELECT date_end FROM ".DB_PREFIX . "product_special ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = '".(int)$customer_group_id."'   AND ((ps.date_start = '0000-00-00' OR ps.date_start < NOW()) AND (ps.date_end = '0000-00-00' OR ps.date_end > NOW())) ORDER BY ps.priority ASC, ps.price ASC LIMIT 1) AS special_end,

Теперь мы получаем нужное, добавим в общий массив (2).

'special_end'       => $query->row['special_end'],

2) Правим контроллер /catalog/controller/product:

 

3

$results = $this->model_catalog_product->getProduct($this->request->get['product_id']);
 $this->data['special_end2']=$results['special_end'];

Почти в любом месте можно вставить 2 строчки эти, они дополнительно делают выборку текущего продукта и получают нашу дату. Именно в таком порядке.

3) и собственно выводим где хотим :
2

тоже самое что и в первом случае:

<? $t = strtotime($special_end2); 
 echo date('d m Y',$t); ?>

P.s special_end2 и special_end — просто так назвал, вы можете называть как хотите переменную.

Если Акция не на все товары распостраняется

Делаем проверку на пустое значение:

меняем

<?php if ($special) { ?>

на

<?php if (($special)&&($special_end2!="0000-00-00")) { ?>

 

Если хочеться видеть дату формата 21 января 2016

вместо

<? $t = strtotime($special_end2); 
 echo date('d m Y',$t); ?>

пишем

$t = strtotime($special_end2); 
 echo $special_end2;
$monthes = array(
 1 => 'Января', 2 => 'Февраля', 3 => 'Марта', 4 => 'Апреля',
 5 => 'Мая', 6 => 'Июня', 7 => 'Июля', 8 => 'Августа',
 9 => 'Сентября', 10 => 'Октября', 11 => 'Ноября', 12 => 'Декабря'
);
 echo(date('d ',$t) . $monthes[(date('n',$t))] . date(' Y',$t));

 

Название статьи при не правильной раскладке клавиатуры: Rfr lj,fdbnm d opencart dsdjl lfns frwbb
Если вдруг появилось желание поблагодарить автора,просто нажмите на рекламу чуть ниже, этого будет достаточно :)

10 комментариев

  1. Причина была в том, что вместо product в строке strtotime($product нужно было поставить result, так strtotime($result тогда в карточке товара появиться правильная дата. Редактировать файлы по аналогии, только product.tpl(php) Ваш вывод акции для модуля правильный, но работает почему то только в боковых колонках сайта, а в верху или внизу не показывает дату окончания. Можно ещё добавить в карточку Вы экономите. Будет показываться сумма экономии акционная. Например Вы экономите 200.00 р. Я вам файл присоединил, опубликуйте, может кому пригодится.

    Прикреплен:
     economy.rar

  2. Короче по рисунку 3 только в product.tpl date(‘d.m.Y’,здесь с t) и тогда показывает 01.01.1970 и без t, date(‘d.m.Y’) тогда показывает текущую дату. Плохо, чт php не вставить в комент.

    • Chizi:

      Если что пиши мне на вк, быстрее отвечу, и прикрепишь файл. Просто изучи стандартную функцию date, вижу что у тебя только с ней проблеммы вот ссылка.
      Реализовал возможность крепить файлы, прикрепи изображения, и ссылки на сайт, и мы разберемся.

    • Chizi:

      PHP как обычный текст вставь, или прикрепи файлик с текстом твоим. или фото с экрана

  3. Не знаю как вам записать php

  4. Не отражается, пришлось поставить звездочки.
    Акция действует до:
    Акция действует до:

  5. В модуле акции все работает и дату показывает правильную. Но в карточку товара вставил Акция действует до: показывает дату 01.01.1970, а если вставить так: Акция действует до: то показывает дату сегодняшнего дня. Не подскажите почему в карточке товара не показывает дату окончания акции правильно. Заранее спасибо.

  6. Chizi:

    Допустил в первом действии, там где синтаксис SQL, ошибку. Если есть возможность отпиши вконте, или тут, полный вид твоего SQL, он либо отличаеться, либо ты допустил ошибку. Внимательнее будьте.

  7. Камиль:

    Попробовал, но выдется ошибка в запросе следующего вида:
    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ‘ps WHERE ps.product_id = p.product_id AND ps.customer_group_id = ‘1’ AND ((ps.da’ at line 1
    Error No: 1064

    В чем дело?
    Спасибо за ответ заранее

Добавить комментарий

Ваш e-mail не будет опубликован.

Вставьте верное число *