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

Call to a member function on null


Recommended Posts

Доброго дня.

Помогите разобраться, сил нет уже.

 

Не могу подключить контроллер своего модуля в файл admin/controller/catalog/product.php

 

Сам код подключения:

$this->load->controller('extension/module/yoagift');
$tmp = $this->controller_extension_module_yoagift->getProductGift($this->request->get['product_id']);
var_dump($tmp);

Результат:

Fatal error: Call to a member function getProductGift() on null in /test/system/storage/modification/admin/controller/catalog/product.php on line 1316

Еще больше путаницы добавляет тот факт, что если вместо контроллера подключить модель, а обработку возвращаемых значений из БД перенести из модуля в product.php -  то проблем нет, все работает. Т.е. со следующим кодом проблем нет:

$this->load->model('extension/module/yoagift');
$tmp = $this->model_extension_module_yoagift->getProductGift($this->request->get['product_id']);
// Разбираем и отправляем на view

Вот структура файлов модуля: 

769465815_ScreenShot2018-10-21at17_05_45.thumb.png.92c7e6b606a3615ba9293d6b68b3505a.png

 

Содержимое контроллера:

 

<?php
class ControllerExtensionModuleYoagift extends Controller {
	private $error = array();

	public function install() {
		$this->db->query("CREATE TABLE IF NOT EXISTS `" . DB_PREFIX . "product_gift` (
			`product_id` int(11),
			`gift_id` int(11),
			PRIMARY KEY (`product_id`, `gift_id`)
		) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=0;");
	}

	public function index() {

		// Initial
		$this->load->model('extension/module/yoagift');
		$this->load->language('extension/module/yoagift_product');

		// For settings page
		if ($this->request->get['route'] == "extension/module/yoagift") {

			$data = array();
			$data = array_merge($data, $this->load->language('extension/module/yoagift'));

			$this->document->setTitle($this->language->get('heading_title'));
			$this->load->model('setting/setting');

			if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
				$this->model_setting_setting->editSetting('yoagift', $this->request->post);
				$this->session->data['success'] = $this->language->get('text_success');
				$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true));
			}

			if (isset($this->error['warning'])) {
				$data['error_warning'] = $this->error['warning'];
			} else {
				$data['error_warning'] = '';
			}

			$data['breadcrumbs'] = array();
			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_home'),
				'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], true)
			);
			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('text_extension'),
				'href' => $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true)
			);
			$data['breadcrumbs'][] = array(
				'text' => $this->language->get('heading_title'),
				'href' => $this->url->link('extension/module/yoagift', 'token=' . $this->session->data['token'], true)
			);

			$data['action'] = $this->url->link('extension/module/yoagift', 'token=' . $this->session->data['token'], true);
			$data['cancel'] = $this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true);
			$data['yoagift_status'] = $this->config->get('yoagift_status');

			if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
				$this->model_setting_setting->editSetting('yoagift', $this->request->post);

				$this->session->data['success'] = $this->language->get('text_success');

				$this->response->redirect($this->url->link('extension/extension', 'token=' . $this->session->data['token'] . '&type=module', true));
			}

			$data['header'] = $this->load->controller('common/header');
			$data['column_left'] = $this->load->controller('common/column_left');
			$data['footer'] = $this->load->controller('common/footer');

			$this->response->setOutput($this->load->view('extension/module/yoagift', $data));

		}
		else {
			return false;
		}

	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'extension/module/yoagift')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}

		return !$this->error;
	}

	public function getProductGift($product_id) {
		$this->load->model('catalog/product');

		$data = array();

		$data['help_gift'] = $this->language->get('help_gift');
		$data['entry_gift'] = $this->language->get('entry_gift');
		$data['entry_select_gift'] = $this->language->get('entry_select_gift');

		$products = $this->model_extension_module_yoagift->getProductGift($product_id);

		$data['product_gifts'] = array();
		foreach ($products as $product) {
			$gift = $this->model_catalog_product->getProduct($product);

			$data['product_gifts'][] = array(
				'product_id' => $gift['product_id'],
				'name'       => $gift['name']
			);
		}	
		return $data;
	}

}

Значения свойства тоже передать не могу, такое чувство что тупо не создается экземпляр класса ControllerExtensionModuleYoagift.

Собственно вопрос: какого черта?

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

5 часов назад, element100500 сказал:

Собственно вопрос: какого черта?

посмотрите в классе Loader методы  controller  и model   и все станет понятно

с контроллером, так не выйдет  

5 часов назад, element100500 сказал:

$tmp = $this->controller_extension_module_yoagift->getProductGift($this->request->get['product_id']);

метод contгоller,    ничего не пишет в реестр, что бы можно было дальше работать как с моделью

  • +1 2
Надіслати
Поділитися на інших сайтах

3 hours ago, fanatic said:

метод contгоller,    ничего не пишет в реестр, что бы можно было дальше работать как с моделью

не нашел как поставить плюс в репу, поэтому дай тебе бог здоровья, добрый человек.

P.S. ООП, которое мы заслужили

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

  • 2 years later...

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

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

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

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

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

Вхід

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

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

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

×
×
  • Створити...

Important Information

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