Автоматическое отключение товара по истечении срока спец цены

Тема в разделе "Общие вопросы", создана пользователем koshsh, 16 июл 2015.

  1. koshsh

    koshsh Новичок

    Сообщения:
    10
    Симпатии:
    1
    Здравствуйте, не могу понять как сделать на опенкарте 2.0 так чтобы после того как заканчивается срок назначенной специальной цены товара он автоматически отключался, подскажите пожалуйста куда копать

    Буду признателен за любую помощь.
    С уважением, Константин
     
  2. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    чтобы товар отключался??
     
  3. koshsh

    koshsh Новичок

    Сообщения:
    10
    Симпатии:
    1
    Да, именно так, просто у меня на сайте все товары имеют свой таймер, который показывает сколько осталось до конца специальной цены, после чего я вручную его отключаю, думаю как это сделать автоматически
     
  4. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    задачка ведь для программирования. Просто так не сделать.
    Надо сначала составить запрос на получения id товаров у которых закончилась акции.
    А потом имея данные, уже след запросов выполнить обновление статусов товара...
     
  5. koshsh

    koshsh Новичок

    Сообщения:
    10
    Симпатии:
    1
    Окей, я сделаю запрос, можете подсказать в какой файл системы его закинуть?

    Мне подсказали с запросом:

    UPDATE oc_product SET status =0 WHERE product_id IN (SELECT product_id FROM oc_product_special WHERE `date_end`!='0000-00-00' and`date_end`< now())
     
    Ален нравится это.
  6. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    Отлично. Запрос рабочий.

    Теперь надо решить как обновлять.
    Если вручную, то можно эту строку записать в файлик sql и просто вручную раз в день восстанавливать в админке через бекап\восстановление

    Если автоматически надо, то вам надо настроить cron на запуск определенного урла, например ваш-магазин/iindex.php?route=common/home/special

    А далее подскажу....
     
  7. koshsh

    koshsh Новичок

    Сообщения:
    10
    Симпатии:
    1
    спасибо за помощь, да, хочется сделать автоматическое решение, думаю что скрыть товары с окончившимся сроком я смогу с ветрины поправив вывод, но сделать отключить их в базе можно действительно только через Crone...

    Нашел такой код примерного скрипта подключаемого к базе:

    <?php
    $sql_host='localhost'; /// Хост
    $sql_id=''; /// Логин
    $sql_pass=''; /// Пароль
    $sql_db=''; /// База
    $link = mysql_connect("$sql_host", "$sql_id", "$sql_pass") or $error.="<b>Clean MySQL. Connect Error</b>: ".mysql_error()."<br />";$link2 = mysql_select_db("$sql_db") or $error.="<b>Clean MySQL. Select DB Error</b>:".mysql_error()."<br />";//вписать своё название таблицы
    mysql_query("DELETE FROM таблица WHERE hits <= 2 )");$del = mysql_affected_rows();
    if ($del > 1) echo 'DEL rows - '.$del.'<br>';

    if (isset($error)) echo $error;
    mysql_close($link);
    unset($error, $del);
    ?>


    и способ вывода

    /usr/bin/wget -O - http://вашсайт.ру/папка/скрипт.php

    Буду пробовать....
     
  8. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    Пользуйтесь тегами code для оформления кода. Удобнее ведь...

    нет это неправильно. Я же выше написал что нужно! Зачем через одно место делать ;) ??

    Сейчас напишу что сделать для запуска запроса из опенкарта.
     
  9. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    в файле, например \catalog\controller\common\home.php

    добавить новую функцию (добавлять перед последней скобкой } )
    PHP:
        public function cron() {
            
    $this->load->model('catalog/cron');
            
    $this->model_catalog_cron->cron1();
        }
    и в директории catalog\model\catalog создать файл cron.php вот с таким содержимым
    PHP:
    <?php
    class ModelCatalogCron extends Model {

        public function 
    cron1() {
        
            
    $query $this->db->query("UPDATE " DB_PREFIX "product SET status =0 WHERE product_id IN (SELECT product_id FROM " DB_PREFIX "product_special WHERE `date_end`!='0000-00-00' and`date_end`< now())" );

            return 
    $query;
        }
    }
    Вызов происходит по урль ваш-сайт/index.php?route=common/home/cron
    Вот этот урль и добавьте в расписание крон.
    как то так
    Код:
    /usr/local/bin/wget -O /dev/null -q http://ваш-сайт/index.php?route=common/home/cron
    или так.. почитайте доку
    Код:
    /usr/local/bin/wget -O - -q -t 1 http://ваш-сайт/index.php?route=common/home/cron
     
    Последнее редактирование: 17 июл 2015
    Ravilr, Vlad и koshsh нравится это.
  10. koshsh

    koshsh Новичок

    Сообщения:
    10
    Симпатии:
    1
    У меня крон запускается немного по другому, он требует указать ему путь к файлу, ок, указал, запустил, но результат такой

    Fatal error: Class 'Model' not found in /home/memphis/www/skanka2/catalog/model/catalog/cron.php on line 3
     
  11. Ален

    Ален Эксперт

    Сообщения:
    2.055
    Симпатии:
    634
    крон запускает ся по разному. Не надо указывать путь файлу... это вам не однофайловый движок же.. это система почти MVC

    Запускается крон у всех почти одинаково, а в качестве файла указываете wget как и писал выше.
    Точное местонахождение узнайте у хостера. Да он и поможет запустить. Еще раз повторяюсь!!!!

     
    SergeTkach нравится это.
  12. jareck

    jareck Новичок

    Сообщения:
    2
    Симпатии:
    0
    Все отлично работает.
    Но если в соседней вкладке авторизоваться в админке.
    А если не авторизован, показывает главную страницу.
    OC 2.3
    Вот совсем лыжи не едут, почему так.
    Надеюсь на ответ, хоть и прошло 5 лет уже.
     
  13. Ravilr

    Ravilr Специалист

    Сообщения:
    3.158
    Симпатии:
    874
    Выше указанный код никак не связан с админкой.
     
  14. Ravilr

    Ravilr Специалист

    Сообщения:
    3.158
    Симпатии:
    874
    или попробуйте создать отдельный контроллер там же, с название cron.php

    ну и код
    PHP:
    <?php
    class ControllerCommonCron extends Controller {
        public function 
    index() {
            
            
    $this->load->model('catalog/cron');
            
    $this->model_catalog_cron->cron1();

        }
    }
     
  15. jareck

    jareck Новичок

    Сообщения:
    2
    Симпатии:
    0
    Абсолютно.
    Собака зарылась в "режиме обслуживания".
    А тут связь есть, а я не знал этого.
    При включенном режиме без авторизации в админке ваще никудой не ходит.
    Магазин на польском, я даже не вникал, чтоо написано было, что не главная это страница.
    Спасибо за ответ.
    Краснею, стыдно :)