Форум пользователей Impera CMS
Impera CMS - отличный движок для лёгкого создания интернет магазина.
Обладает невероятным количеством функций, необходимых в онлайн торговле.

Следить
Главная
12:20
11 фев
#
?
написал:

Здравствуйте!

Подскажите пожалуйста, как сделать CRON скрипт для периодического обновления цены товара и наличия.

А конкретно, как сделать легкий крон скрипт, который подключит класс работы с товарами, получит объект конкретного товара по SKU (или ID) и сохранит новую цену и наличие.

15:31
15 фев
#
?
написал:

Посмотреть как сделано в любом шаблоне с аякс поиском.

Например скачать шаблон Bexam и разобрать файл BexamDefault\js\ajax\search.php

17:16
15 фев
#
?
написал:

Приветствую! Спасибо за подсказку

Посмотрел, но тут по сути формируется обычный select запрос к базе для получения товаров удовлетворяющих запросу. Запросом (update) в базе и я сам могу изменить цену и наличие. Но хочется это делать "по уму", то есть средствами движка, через класс Product.

Как-то надо инициализировать окружение в моем cron скрипте, потом подключить этот класс, получить объект нужного мне товара через SKU, подправить там цену, и средствами класса их сохранить. Теоретически, я понимаю что так должно быть, а практически знаний не хватает (

Кто может помочь?

19:53
15 фев
#
написал:

Вот один из примеров - админский модуль, допустим назовём его MyCron. Создайте на сайте файл objects/mycron/MyCron.admin.php следующего содержания:

<?php
    // макет модуля
    require_once(dirname(__FILE__) . '/../.ref-models/BasicModel.php');

    /* ============================================================================
    |                                                                             |
    |  Теперь наш модуль.                                                         |
    |                                                                             |
    ============================================================================ */

    class MyCron extends BasicREFModel {

        /* ========================================================================
        |                                                                         |
        |  Рендеринг страницы модуля.                                             |
        |                                                                         |
        ======================================================================== */

        public function fetch ( & $parent = null ) {
            $data = $this->getStockData();
            $this->updateProducts($data);

            // что-нибудь напишем на странице модуля
            $this->body = '<div class="box">' .
                              '<p>Выполнено</p>' .
                          '</div>';
            return TRUE;
        }

        /* ========================================================================
        |                                                                         |
        |  Извлечение изменений на складе.                                        |
        |                                                                         |
        ======================================================================== */

        private function getStockData () {
            return array( 'sku-1' => array( 'amount' => 10, 'price' => 155 ),
                          'sku-2' => array( 'amount' => 3,  'price' => 134 ),
                          'sku-3' => array( 'amount' => 5,  'price' => 120 ) );
        }

        /* ========================================================================
        |                                                                         |
        |  Обновление товаров согласно изменениям склада.                         |
        |                                                                         |
        ======================================================================== */

        private function updateProducts ( $data ) {

            // перебираем данные склада
            $items = null;
            foreach ($data as $sku => $info) {

                // ищем товар по артикулу
                $filter = new stdClass;
                $filter->maxcount = 1;
                $filter->search = 'sku:' . $sku;
                $this->cms->db->products->get($items, $filter);
                $this->cms->db->products->unpackRecords($items, $filter);

                // если найден
                if (!empty($items)) {
                    $item = reset($items);

                    // крутим до варианта с таким артикулом
                    foreach ($item->variants as $variant) {
                        if ($variant->sku == $sku) {

                            // если изменился, обновляем в базе
                            if ($variant->stock != $info['amount'] || $variant->price != $info['price']) {
                                $item = new stdClass;
                                $item->variant_id = $variant->variant_id;
                                $item->stock = $info['amount'];
                                $item->price = $info['price'];
                                $this->cms->db->products->update_variant($item);
                            }

                            break;
                        }
                    }
                }
            }
        }
    }
?>

Теперь добавьте в Cron периодический вызов ссылки http://логин:пароль@ваш.сайт/admin?section=MyCron (ссылка действует для супер админов и тех, кому явно разрешён доступ к модулю MyCron).

23:00
15 фев
#
?
написал:

Огромное спасибо! То что доктор прописал!

Написание ответа

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


Обратите внимание! Для противодействия спаму новые посты форума проявляются с задержкой от нескольких минут, пока не пройдут модерацию.