Перейти к содержанию
Spider84

Использование API Opencart во внешнем скрипте

Рекомендуемые сообщения

Всем привет.

У меня есть самописное  расширение для  импорта товаров. Возникла необходимость переделать  его в отдельный скрипт чтобы повесить его на cron. Как правильно инициализировать Api чтобы иметь к нему доступ?

Попробовал просто скопировать  инициализирующий код из index.php  и писать после  него, копируя туда классы из расширения которое надо переписать - получаю вот такую ошибку


Fatal error: Call to a member function get() on a non-object in /home/spider84/domains/spider84.com/public_html/system/engine/model.php on line 10

 

Можно ли както обойти?

 

Зар анеее всем спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть можно обойтись без переписывания скрипта? Пожалуйста расскажит как правильно наладить взаимодействие  модуля с cron?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

То есть можно обойтись без переписывания скрипта? Пожалуйста расскажит как правильно наладить взаимодействие  модуля с cron?

Так сделано в этом модуле

<?php
// Version
define('VERSION', '1.0.1');

// Config
require_once(dirname(__FILE__).'/../config.php');
   
// Startup
require_once(DIR_SYSTEM . 'startup.php');

// Application Classes
require_once(DIR_SYSTEM . 'library/currency.php');
require_once(DIR_SYSTEM . 'library/customer.php');
require_once(DIR_SYSTEM . 'library/tax.php');
require_once(DIR_SYSTEM . 'library/weight.php');
require_once(DIR_SYSTEM . 'library/length.php');
require_once(DIR_SYSTEM . 'library/cart.php');

// Registry
$registry = new Registry();

// Loader
$loader = new Loader($registry);
$registry->set('load', $loader);

// Config
$config = new Config();
$registry->set('config', $config);

// Database 
$db = new DB(DB_DRIVER, DB_HOSTNAME, DB_USERNAME, DB_PASSWORD, DB_DATABASE);
$registry->set('db', $db);

$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store");

if ($store_query->num_rows) {
	$config->set('config_store_id', $store_query->row['store_id']);
} else {
	$config->set('config_store_id', 0);
}
		
// Settings
$query = $db->query("SELECT * FROM " . DB_PREFIX . "setting WHERE store_id = '0' OR store_id = '" . (int)$config->get('config_store_id') . "' ORDER BY store_id ASC");

foreach ($query->rows as $setting) {
	if (!$setting['serialized']) {
		$config->set($setting['key'], $setting['value']);
	} else {
		$config->set($setting['key'], unserialize($setting['value']));
	}
}

if (!$store_query->num_rows) {
	$config->set('config_url', HTTP_SERVER);
	$config->set('config_ssl', HTTPS_SERVER);	
}

// Url
$url = new Url($config->get('config_url'), $config->get('config_ssl'));	
$registry->set('url', $url);

// Log 
$log = new Log($config->get('config_error_filename'));
$registry->set('log', $log);

// Request
$request = new Request();
$url_parts = parse_url(HTTP_SERVER);
$request->server = array(
    'HTTP_HOST' => $url_parts['host'],    
    'REQUEST_URI' => '',
    'SERVER_PROTOCOL' => 'HTTP/1.1'
);
$registry->set('request', $request);

// Response
$response = new Response();
$response->addHeader('Content-Type: text/html; charset=utf-8');
$registry->set('response', $response); 

// Session
$registry->set('session', new Session());

// Cache
$registry->set('cache', new Cache());

// Document
$registry->set('document', new Document());

// Customer
$registry->set('customer', new Customer($registry));

// Language
$languages = array();

$query = $db->query("SELECT * FROM " . DB_PREFIX . "language"); 

foreach ($query->rows as $result) {
	$languages[$result['code']] = array(
		'language_id' => $result['language_id'],
		'name'        => $result['name'],
		'code'        => $result['code'],
		'locale'      => $result['locale'],
		'directory'   => $result['directory'],
		'filename'    => $result['filename']
	);
}

$config->set('config_language_id', $languages[$config->get('config_admin_language')]['language_id']);

$language = new Language($languages[$config->get('config_admin_language')]['directory']);
$language->load($languages[$config->get('config_admin_language')]['filename']);	
$registry->set('language', $language);

// Currency
$currency = new Currency($registry);
// always RU
$currency->set('RUB');

//$symbol_right = trim($currency->getSymbolRight('RUB'));
//$currency->setSymbolRight('RUB', '<span class="ru"> Б</span>');
$registry->set('currency', $currency);

// Tax
$registry->set('tax', new Tax($registry));

// Weight
$registry->set('weight', new Weight($registry));

// Length
$registry->set('length', new Length($registry));

// Cart
$registry->set('cart', new Cart($registry));

// Front Controller 
$controller = new Front($registry);
		
// SEO URL's
if (!$seo_type = $config->get('config_seo_url_type')) {
	$seo_type = 'seo_url';
}
$controller->addPreAction(new Action('common/' . $seo_type));	

//Вот тут пишете свой route
$action = new Action('feed/yandex_yml/savetofile', array(dirname(__FILE__).'/yandex_yml.xml'));
$controller->dispatch($action, '');
?>

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внезапно возникла проблема другого характера. У меня интеерфейс  этого модуля импорта находится в админке. Можно ли както программно залогинится в админку или обязательно выносить модуль  из админки?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Внезапно возникла проблема другого характера. У меня интеерфейс  этого модуля импорта находится в админке. Можно ли както программно залогинится в админку или обязательно выносить модуль  из админки?

Не надо логиниться. Кладете этот скрипт в админку, защищаете от http-запуска htaccess

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо логиниться. Кладете этот скрипт в админку, защищаете от http-запуска htaccess

Большое спасибо за ваши ответы.

Потом ещее спрошу может быть.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Не надо логиниться. Кладете этот скрипт в админку, защищаете от http-запуска htaccess

А как правильно узнать route, который необходимо прописать? учитывавя что у этого модуля есть интерфейс в котором вводятся параметры импорта?

извините я еще не очень хорошо разбираюсь в основах opencart.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×

Важная информация

На нашем сайте используются файлы cookie и происходит обработка некоторых персональных данных пользователей, чтобы улучшить пользовательский интерфейс. Чтобы узнать для чего и какие персональные данные мы обрабатываем перейдите по ссылке. Если Вы нажмете «Я даю согласие», это означает, что Вы понимаете и принимаете все условия, указанные в этом Уведомлении о Конфиденциальности.