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

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

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

 

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

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

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


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


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

$my_model = new ModelCatalogmyModuleFunc();

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


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

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

 

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

 

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 пользователей онлайн

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

×

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

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