OpenCart - PHP - Проверьте, если продукт (загрузка) уже куплен - PullRequest
0 голосов
/ 16 ноября 2018

Относительно магазина OpenCart, продающего цифровые загрузки.

Я пытаюсь добавить скрипт на страницу продукта, чтобы предупредить клиента, если этот конкретный продукт (загрузка) уже куплен и существует в разделе «Учетная запись»> «Загрузки». Причина в том, чтобы клиенты не покупали один и тот же продукт дважды.

Ценю вашу помощь.

Edit: Я пытался получить идентификаторы продуктов всех заказов клиентом с помощью SQL-запроса, и он прекрасно работает снаружи, но внутри OpenCart у меня возникают проблемы. Запрос, такой как:

SELECT product_id
FROM ocuk_order_product
WHERE order_id IN (
    SELECT order_id
    FROM ocuk_order
    WHERE customer_id = 'xxxx'
)

Моя главная проблема - не знать, как получить похожие результаты на странице продукта OpenCart. (Какие именно страницы и пути и где находятся файлы)

Пробовал и этот пост: Opencart скачать продукт Но это не совсем работает на странице продукта (product.php)

Opencart версии 3.0.2.0

1 Ответ

0 голосов
/ 16 ноября 2018

Хорошо, я попробую это сделать, но давайте уточним несколько вещей:

1) DB_PREFIX - это просто константа php, объявленная в вашем файле config.php.Исходя из предоставленного вами запроса, он, вероятно, равен ocuk.Дело в том, что вы пишете запросы, используя эту константу, и они становятся переносимыми между установками независимо от выбранного пользователем префикса базы данных.

2) Opencart основан на MCVL (расширение MVC который включает в себя языковые файлы) структуру.Место для выполнения запросов находится в модели .Место для вызова методов модели находится в controller .Контроллер передает вывод в представление и часто использует языковые переменные из файлов language .

Итак, я бы написал функцию и поместил ее в модель вашего продукта -в этом случае это catalog/model/catalog/product.php.Эта функция называется метод , поскольку теперь она является частью вашего класса модели.Функция выведет в вашу таблицу строки о том, что зарегистрированный клиент приобрел данный продукт.Также важно проверить (а), что клиент вошел в систему и (б) что заказы, с которыми вы запрашиваете, являются реальными заказами - с order_status_id> 0. Мы можем пойти на это, но достаточно сказатьчто вам всегда нужно проверять order_status_id, если вы хотите знать о фактически выполненных заказах.Такой метод может выглядеть примерно так:

public function getOrderProductHistory($product_id) {
    $result = [];
    if ($customer_id = $this->customer->getId()) {
        $sql = "
            SELECT *
            FROM " . DB_PREFIX . "order o
            JOIN " . DB_PREFIX . "order_product op USING (order_id)
            WHERE o.order_status_id > 0
                AND o.customer_id = '" . (int)$customer_id . "'
        ";
        $query = $this->db->query($sql);
        $result = $query->rows;
    }
    return $result;
}

Теперь в вашем контроллере (на странице продукта это catalog/controller/product/product.php) вы можете вызвать этот метод, чтобы получить такие результаты:

$order_product_history = $this->model_catalog_product->getOrderProductHistory($product_id);

А затем сделайте что-нибудь на основе вывода:

if ($order_product_history) {
    $data['has_been_ordered'] = true;
} else {
    $data['has_been_ordered'] = false;
}

Теперь $has_been_ordered - это логическое значение, к которому вы можете обратиться в своем представлении , чтобы отобразить сообщение для клиента.Для вас есть еще немного кода для написания, но, надеюсь, это поможет вам хорошо начать.

...