Jump to content
Sign in to follow this  
element100500

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.

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

Share this post


Link to post
Share on other sites
5 часов назад, element100500 сказал:

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

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

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

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

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

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

  • +1 2

Share this post


Link to post
Share on other sites
3 hours ago, fanatic said:

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

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

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

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.