Здравствуйте, не могу понять как сделать на опенкарте 2.0 так чтобы после того как заканчивается срок назначенной специальной цены товара он автоматически отключался, подскажите пожалуйста куда копать Буду признателен за любую помощь. С уважением, Константин
Да, именно так, просто у меня на сайте все товары имеют свой таймер, который показывает сколько осталось до конца специальной цены, после чего я вручную его отключаю, думаю как это сделать автоматически
задачка ведь для программирования. Просто так не сделать. Надо сначала составить запрос на получения id товаров у которых закончилась акции. А потом имея данные, уже след запросов выполнить обновление статусов товара...
Окей, я сделаю запрос, можете подсказать в какой файл системы его закинуть? Мне подсказали с запросом: 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())
Отлично. Запрос рабочий. Теперь надо решить как обновлять. Если вручную, то можно эту строку записать в файлик sql и просто вручную раз в день восстанавливать в админке через бекап\восстановление Если автоматически надо, то вам надо настроить cron на запуск определенного урла, например ваш-магазин/iindex.php?route=common/home/special А далее подскажу....
спасибо за помощь, да, хочется сделать автоматическое решение, думаю что скрыть товары с окончившимся сроком я смогу с ветрины поправив вывод, но сделать отключить их в базе можно действительно только через 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 Буду пробовать....
Пользуйтесь тегами code для оформления кода. Удобнее ведь... нет это неправильно. Я же выше написал что нужно! Зачем через одно место делать ?? Сейчас напишу что сделать для запуска запроса из опенкарта.
в файле, например \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: <?phpclass 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
У меня крон запускается немного по другому, он требует указать ему путь к файлу, ок, указал, запустил, но результат такой Fatal error: Class 'Model' not found in /home/memphis/www/skanka2/catalog/model/catalog/cron.php on line 3
крон запускает ся по разному. Не надо указывать путь файлу... это вам не однофайловый движок же.. это система почти MVC Запускается крон у всех почти одинаково, а в качестве файла указываете wget как и писал выше. Точное местонахождение узнайте у хостера. Да он и поможет запустить. Еще раз повторяюсь!!!!
Все отлично работает. Но если в соседней вкладке авторизоваться в админке. А если не авторизован, показывает главную страницу. OC 2.3 Вот совсем лыжи не едут, почему так. Надеюсь на ответ, хоть и прошло 5 лет уже.
или попробуйте создать отдельный контроллер там же, с название cron.php ну и код PHP: <?phpclass ControllerCommonCron extends Controller { public function index() { $this->load->model('catalog/cron'); $this->model_catalog_cron->cron1(); }}
Абсолютно. Собака зарылась в "режиме обслуживания". А тут связь есть, а я не знал этого. При включенном режиме без авторизации в админке ваще никудой не ходит. Магазин на польском, я даже не вникал, чтоо написано было, что не главная это страница. Спасибо за ответ. Краснею, стыдно