Jump to content

Recommended Posts

Приветствую всех!

 

Пишу скрипт для крона.

<?php
// Configuration
if (is_file('admin/config.php')) {
	require_once('admin/config.php');
}

// 
if (defined('DIR_APPLICATION')) {
	// Startup
	require_once(DIR_SYSTEM . 'startup.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
	if (isset($_SERVER['HTTPS']) && (($_SERVER['HTTPS'] == 'on') || ($_SERVER['HTTPS'] == '1'))) {
		$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`ssl`, 'www.', '') = '" . $db->escape('https://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
	} else {
		$store_query = $db->query("SELECT * FROM " . DB_PREFIX . "store WHERE REPLACE(`url`, 'www.', '') = '" . $db->escape('http://' . str_replace('www.', '', $_SERVER['HTTP_HOST']) . rtrim(dirname($_SERVER['PHP_SELF']), '/.\\') . '/') . "'");
	}

	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 $result) {
		if (!$result['serialized']) {
			$config->set($result['key'], $result['value']);
		} else {
			$config->set($result['key'], unserialize($result['value']));
		}
	}

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

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

	function error_handler($errno, $errstr, $errfile, $errline) {
		global $log, $config;

		// error suppressed with @
		if (error_reporting() === 0) {
			return false;
		}

		switch ($errno) {
			case E_NOTICE:
			case E_USER_NOTICE:
				$error = 'Notice';
				break;
			case E_WARNING:
			case E_USER_WARNING:
				$error = 'Warning';
				break;
			case E_ERROR:
			case E_USER_ERROR:
				$error = 'Fatal Error';
				break;
			default:
				$error = 'Unknown';
				break;
		}

		if ($config->get('config_error_display')) {
			echo '<b>' . $error . '</b>: ' . $errstr . ' in <b>' . $errfile . '</b> on line <b>' . $errline . '</b>';
		}

		if ($config->get('config_error_log')) {
			$log->write('PHP ' . $error . ':  ' . $errstr . ' in ' . $errfile . ' on line ' . $errline);
		}

		return true;
	}

	// Error Handler
	set_error_handler('error_handler');
	
	$loader->load->model('tool/myModule');
	
	$text_succ = $loader->model_tool_myModule->myModuleFunc($newfile, $options_xml);
				
	...

Строки 100 и 102 выдают ошибки.

В версии 1.5.5.1.2 такой код работал, а во 2-й версии - не работает.

 

Подскажите, что я сделал не так? Как можно загрузить модель и вызвать функцию модели в одном скрипте?

Edited by Master2KAZ

Share this post


Link to post
Share on other sites

Приветствую всех!

 

Пишу скрипт для крона.

<?php
// Configuration
if (is_file('admin/config.php')) {
	require_once('admin/config.php');
}

// 
if (defined('DIR_APPLICATION')) {
	// Startup
	require_once(DIR_SYSTEM . 'startup.php');

	// Registry
	$registry = new Registry();

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

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


Строки 100 и 102 выдают ошибки.

В версии 1.5.5.1.2 такой код работал, а во 2-й версии - не работает.

 

Подскажите, что я сделал не так? Как можно загрузить модель и вызвать функцию модели в одном скрипте?

 

И не забудьте по окончанию работы скрипта вернуть Loader и Config

Share this post


Link to post
Share on other sites


require_once("catalog/model/tool/myModule.php");

$my_model = new ModelCatalogmyModuleFunc();

Share this post


Link to post
Share on other sites

М-да...Видимо знаний мне хватает, чтобы разобраться.

 

А никто не может написать чуть подробнее вплоть до вызова функции модели??

 

P.S. Обычно с этого поста (когда просят почти готовое решение) посылают куда подальше (в худшем случае), в лучшем учить матчасть.

Тем не менее, ВСЕМ СПАСИБО! Всех вам благ и удачи! )))

Share this post


Link to post
Share on other sites

а зачем в этом скрипте загружать модель?

 

инициируйте контроллер

 

$controller = new Front($registry);


// Router
if (isset($request->get['route'])) {
    $action = new Action($request->get['route']);
} else {
    $action = new Action('common/dashboard');
}

// Dispatch
$controller->dispatch($action, new Action('error/not_found'));

// Output
$response->output();

Share this post


Link to post
Share on other sites

а зачем в этом скрипте загружать модель?

 

инициируйте контроллер

 

$controller = new Front($registry);

// Router

if (isset($request->get['route'])) {

    $action = new Action($request->get['route']);

} else {

    $action = new Action('common/dashboard');

}

// Dispatch

$controller->dispatch($action, new Action('error/not_found'));

// Output

$response->output();

Контроллер сам по себе ничего не запускает, он запускает функцию только после нажатия кнопки submit.

А тут мне нужно напрямую запустить функцию из модели с преднастройками.

Share this post


Link to post
Share on other sites

Вот пытаюсь разобраться по вашей ссылке и немножко недопонимаю.

<?php
abstract class OCApi {
  protected $config;
  public function __construct() {
    $configFileName = __DIR__ . '/etc/config.json';
    if(!file_exists($configFileName)) throw new Exception("Error loading config $configFileName");
    $this->config = json_decode(file_get_contents($configFileName));
    if(!is_object($this->config)) throw new Exception("Wrong config $configFileName");
    $this->config->apiDir = __DIR__;
  }
  public function __set($name, $val) {
    $this->config->opencart->{$name} = $val;
  }
  public function getConfig() {
    return $this->config;
  }
}

зачем в __construct() все эти махинации, если все сводится к тому чтобы определить путь к папке с опенкартом. Не легче ли использовать DIR_APPLICATION?? 

Share this post


Link to post
Share on other sites

 

Контроллер сам по себе ничего не запускает, он запускает функцию только после нажатия кнопки submit.

А тут мне нужно напрямую запустить функцию из модели с преднастройками.

Вы хоть поняли что вы написали?

Share this post


Link to post
Share on other sites

Вы хоть поняли что вы написали?

Возможно, я не понял, что вы написали. Что мне даст инициализация контроллера?

Share this post


Link to post
Share on other sites

1. Вы инициализируете все библиотеки

2. В конце - вы вызываете контроллер который будет дефолтным для вашего джоба

$action = new Action('tool/myjob');
}

// Dispatch
$controller->dispatch($action, new Action('error/not_found'));

Share this post


Link to post
Share on other sites

 

А тут мне нужно напрямую запустить функцию из модели с преднастройками.

Все делается в контроллере, в том числе и подключение нужных моделей

Share this post


Link to post
Share on other sites

 

1. Вы инициализируете все библиотеки

2. В конце - вы вызываете контроллер который будет дефолтным для вашего джоба

$action = new Action('tool/myjob');
}

// Dispatch
$controller->dispatch($action, new Action('error/not_found'));

Т.е. написать отдельный контроллер, в котором загружаю все настройки и по ним запускаю функцию из модели, а потом этот контроллер инициализирую в своем скрипте?

 

updated. Вы ответили раньше чем я задал вопрос))) Спасибо

Edited by Master2KAZ

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.