Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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-й версии - не работает.

 

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

Змінено користувачем Master2KAZ
Надіслати
Поділитися на інших сайтах


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

 

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

<?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

Надіслати
Поділитися на інших сайтах

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

 

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

 

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

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

Надіслати
Поділитися на інших сайтах


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

 

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

 

$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();

Надіслати
Поділитися на інших сайтах

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

 

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

 

$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.

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

Надіслати
Поділитися на інших сайтах


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

<?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?? 

Надіслати
Поділитися на інших сайтах


 

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

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

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

Надіслати
Поділитися на інших сайтах

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

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

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

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

Надіслати
Поділитися на інших сайтах

 

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

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

Надіслати
Поділитися на інших сайтах

 

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

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

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

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

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

 

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

Змінено користувачем Master2KAZ
Надіслати
Поділитися на інших сайтах


Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.