Илья Folg, так не должно быть, но это не должно вызывать ошибку исполнения, это ошибка использования. В OpenCart код разделен на модель, отображение и контроллер (MVC). Работа с базой данных вынесена в модель, контроллер вызывает модель, формирует структуру для отображения и передает ее в него. То есть в отображении не должно быть кода отвечающего за взаимодействие с БД, там должен быть только код отвечающий за отображение и форматирование.
Кроме того, в OpenCart есть интерфейс для работы с БД, никаких mysql_query вообще быть не должно.
То есть вы неправильно используете OpenCart, хотя это и не связано напрямую с ошибкой.
Не нужно выкладывать неформатированные листинги. У вас ошибка написано в 48 строке, смотрите что передается там в mysql_query().
JhaoDa, они постоянно актуализируют перевод. Можете порекомендовать сайт с более актуальным переводом? На офф сайт ссылаться не хочу, для многих новичков разобраться на русском проблема, остальные прекрасно понимают что по свежим версиям надо смотреть аналогичный раздел в офф доке.
Борис Белов, чтобы сделать поиск сперва все распарсить надо, составить индекс артикулов и потом по нему поискать. Или парсить подряд пока не найдется запись с нужным айди. Это все не эффективно, если критична скорость и нагрузка или большие объемы. В этом случае вам нужно использовать СУБД, распарсить XML и поместить данные в БД, для быстрых выборок.
ilovemaryjane, в вашем варианте описана полная выборка с последующей фильтрацией на серверной стороне. Правильно оставить выборку целиком на совести БД, это эффективный способ, поскольку выборка по такому условию очень простая и не создаст никаких проблем с производительностью.
Попробуйте провести замеры, чтобы в этом убедиться. Добавьте индекс для поля PublishAt.
Еще был предложен вариант с кроном, но заметьте, что там всё равно будет дополнительное условие для выборки, хоть и немного более простое, но добавляется необходимость в кроне и могут возникнуть проблемы в случае если по какой то причине крон не отработал.
Artem0071, как я и сказал обработать request до контроллера, в сервис провайдере или в middleware и поместить значение в какое то хранилище, самое элементарное в конфиг.
Artem0071, я понял, но суть в том, что это неправильный подход - проталкивать язык в контроллер и там чесать репу как дальше это разрулить. Язык должен быть доступен в модели, не из реквеста, а вообще всегда, как, например, конфигурационное значение. И когда вопрос получения языка в модели разрешен не препятствий для использования мутатора https://laravel.ru/docs/v5/eloquent-mutators#%D1%8...