Скрипт для единоразового запуска в opencart

118
18 февраля 2022, 16:50

Как создать php-скрипт для единоразового запуска, допустим нужно сделать одну запись в базу данных, без создания модуля.
Также нужно создать новое подключение к бд mysql.
т.е. нужно использовать все возможности opencart mvc, но с новым подключением к бд
что то нужно типа такого: new \mysqli($hostname, $username, $password, $database) и выполнить скрипт

Answer 1

Минимально для взаимодействия с базой с использованием контроллера и модели opencart (проверено на версии 3), из кастомного скрипта, не пренадлежащего ни к admin, ни к catalog, необходимо следующее:

require_once('config.php'); // будет использован конфиг catalog, но это не принципиально
require_once(DIR_SYSTEM . 'startup.php');
// Registry
$registry = new Registry();
// Config
$config = new Config();
$config->load('catalog');
$registry->set('config', $config);
// Log
$log = new Log('custom_log');
$registry->set('log', $log);
date_default_timezone_set('UTC');
// Event
$event = new Event($registry);
$registry->set('event', $event);
// Event Register
if ($config->has('action_event')) {
    foreach ($config->get('action_event') as $key => $value) {
        foreach ($value as $priority => $action) {
            $event->register($key, new Action($action), $priority);
        }
    }
}
// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);
// Database
$registry->set('db', new DB(
    $config->get('db_engine'),
    $config->get('db_hostname'),
    $config->get('db_username'),
    $config->get('db_password'),
    $config->get('db_database'),
    $config->get('db_port'))
);
// данные сеты необходимы для использования стандартных методов моделей
$config->set('config_customer_group_id', 1);
$config->set('config_language_id', 1);
$config->set('config_store_id', 0);

Теперь минимально фреймворк собран, сдледующий шаг - контроллер. Он наследует system/engine/controller, что бы вся эта магия выполнялась.

// для примера, тащим все товары
class MyControllerCatalogProduct extends Controller
{
    public function getList() {
        $this->load->model('catalog/product');
        $results = $this->model_catalog_product->getProducts([]);
        return $results;
    }
}

Собственно, инициализация и использование

$product = new MyControllerCatalogProduct($registry); // $registry = new Registry();
$product->getList();
READ ALSO
PHP Fatal error: Call to a member function find() on a non-object - SimpleHmlDom

PHP Fatal error: Call to a member function find() on a non-object - SimpleHmlDom

В цикле у меня перебираются страницы и загружаются

102
Как получить статус "в наличии"?

Как получить статус "в наличии"?

Собственно сабж в заголовкеВывожу товары через каталог, надо этот статус вывести

87
Неверный sql запрос, как я понимаю

Неверный sql запрос, как я понимаю

Заношу новые данные пользователей в БД по их запросу

116