Jump to content
Sign in to follow this  
Spider84

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

Recommended Posts

Всем привет.

У меня есть самописное  расширение для  импорта товаров. Возникла необходимость переделать  его в отдельный скрипт чтобы повесить его на 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

 

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

 

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

Share this post


Link to post
Share on other sites

То есть можно обойтись без переписывания скрипта? Пожалуйста расскажит как правильно наладить взаимодействие  модуля с 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, '');
?>

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.