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

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

Добрый день, уважаемые форумчане!

Пожалуйста, помогите понять, почему я не могу получить $setting в контроллере фронта:

public function index($setting) {
var_dump($setting);

получаю ошибку...

 

в контроллере админки пытаюсь так:

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            if (!isset($this->request->get['module_id'])) {
                $this->model_extension_module->addModule('cats', $this->request->post);
            } else {
                $this->model_extension_module->editModule($this->request->get['module_id'], $this->request->post);
            }

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

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

и так 

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

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

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

по примеру соседних контроллеров.

В админке модуль нормально устанавливается, выводится на фронте, если не пытаться достучаться до $setting. В таблице oc_module модуль записывается, где в поле setting - записаны настройки модуля.

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

Может ли кто разъяснить, что я не правильно понимаю?

Изменено пользователем Raensul

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


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

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

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


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

модуль включен, он отображается во фронте, если я не использую $setting.

но в этом массиве по идее у меня limit для ограничения кол-ва вывода, и вот при попытке получить этот массив ничего не получается.

а какие пути смотреть? я все делал по аналогии с latest, вроде все так же прописано, только вместо latest пишу свой модуль

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


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

Смотрите catalog/controller/common/content_*.php

foreach ($modules as $module) {
...

$setting_info = $this->model_extension_module->getModule($part[1]);

 

Туда setting от модуля приходит?

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


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

хм...

да собсно если в стоковых latest сделать var_dump($setting) - то все тоже летит к чертям... при этом ниже:

$filter_data = array(
   'sort'  => 'p.date_added',
   'order' => 'DESC',
   'start' => 0,
   'limit' => $setting['limit']
);

и все работает....

но если попытаться написать хотя бы

echo $setting['limit']; - все тоже плохо

Изменено пользователем Raensul

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


Ссылка на сообщение
Поделиться на другие сайты
24 минуты назад, ibond сказал:

Туда setting от модуля приходит?

подскажите, плз, как посмотреть?

var_dump($setting_info);

тоже приводит к прекращению работы сайта...

 

 

@ArtemPitov в макете выведено. модуль ведь отображается как надо если не использовать $setting. Сайт перестает работать только при попытке обращения к этому массиву.

Изменено пользователем Raensul

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


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

так стоп, вы в админке хотите достучатся до  $setting ? 

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


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

@ArtemPitov нет, на фронте... по аналогии как в latest

Изменено пользователем Raensul

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


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

Ну тогда покажите контролеры 

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, ArtemPitov сказал:

Ну тогда покажите контролеры 

Спойлер

<?php
class ControllerModuleCats extends Controller {
	public function index($setting) {
        $this->load->language('module/cats');
        $this->document->addStyle('catalog/view/theme/default/stylesheet/cats.css');
        $this->load->model('tool/image');

		$data['heading_title'] = $this->language->get('heading_title');

		if (isset($this->request->get['path'])) {
			$parts = explode('_', (string)$this->request->get['path']);
		} else {
			$parts = array();
		}

		if (isset($parts[0])) {
			$data['category_id'] = $parts[0];
		} else {
			$data['category_id'] = 0;
		}

		if (isset($parts[1])) {
			$data['child_id'] = $parts[1];
		} else {
			$data['child_id'] = 0;
		}

		$this->load->model('catalog/category');

		$this->load->model('catalog/cats');

		$this->load->model('catalog/product');

		$data['categories'] = array();

		$categories = $this->model_catalog_cats->getHomeCategories(0);

		foreach ($categories as $category) {
			$filter_data = array(
				'filter_category_id'  => $category['category_id'],
				'filter_sub_category' => true
			);
            $category_info = $this->model_catalog_category->getCategory($category['category_id']);

			$data['categories'][] = array(
				'category_id' => $category['category_id'],
				'name'        => $category['name'] . ($this->config->get('config_product_count') ? ' (' . $this->model_catalog_product->getTotalProducts($filter_data) . ')' : ''),
				'href'        => $this->url->link('product/category', 'path=' . $category['category_id']),
                'icon'        => $category['keyword'],
                'image'       => $this->model_tool_image->resize($category_info['image'],$this->config->get('config_image_additional_width'), $this->config->get('config_image_additional_height'))

			);


		}

		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/cats.tpl')) {
			return $this->load->view($this->config->get('config_template') . '/template/module/cats.tpl', $data);
		} else {
			return $this->load->view('default/template/module/cats.tpl', $data);
		}
	}
}

 

 

 

Спойлер

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

	public function index() {
		$this->load->language('module/cats');

		$this->document->setTitle($this->language->get('heading_title'));

		$this->load->model('setting/setting');

        $this->load->model('extension/module');

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
            if (!isset($this->request->get['module_id'])) {
                $this->model_extension_module->addModule('cats', $this->request->post);
            } else {
                $this->model_extension_module->editModule($this->request->get['module_id'], $this->request->post);
            }
            
			$this->session->data['success'] = $this->language->get('text_success');

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

		$data['heading_title'] = $this->language->get('heading_title');

		$data['text_edit'] = $this->language->get('text_edit');
		$data['text_enabled'] = $this->language->get('text_enabled');
		$data['text_disabled'] = $this->language->get('text_disabled');

		$data['entry_status'] = $this->language->get('entry_status');

		$data['button_save'] = $this->language->get('button_save');
		$data['button_cancel'] = $this->language->get('button_cancel');
		$data['entry_name'] = $this->language->get('entry_name');
		$data['entry_limit'] = $this->language->get('entry_limit');

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

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

		$data['breadcrumbs'] = array();

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_home'),
			'href' => $this->url->link('common/dashboard', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('text_module'),
			'href' => $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')
		);

		$data['breadcrumbs'][] = array(
			'text' => $this->language->get('heading_title'),
			'href' => $this->url->link('module/cats', 'token=' . $this->session->data['token'], 'SSL')
		);
//
        if (!isset($this->request->get['module_id'])) {
            $data['action'] = $this->url->link('module/cats', 'token=' . $this->session->data['token'], 'SSL');
        } else {
            $data['action'] = $this->url->link('module/cats', 'token=' . $this->session->data['token'] . '&module_id=' . $this->request->get['module_id'], 'SSL');
        }

		$data['cancel'] = $this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL');
//
        if (isset($this->request->get['module_id']) && ($this->request->server['REQUEST_METHOD'] != 'POST')) {
            $module_info = $this->model_extension_module->getModule($this->request->get['module_id']);
        }
//
        if (isset($this->request->post['name'])) {
            $data['name'] = $this->request->post['name'];
        } elseif (!empty($module_info)) {
            $data['name'] = $module_info['name'];
        } else {
            $data['name'] = '';
        }
//
        if (isset($this->request->post['limit'])) {
            $data['limit'] = $this->request->post['limit'];
        } elseif (!empty($module_info)) {
            $data['limit'] = $module_info['limit'];
        } else {
            $data['limit'] = 5;
        }
//
        if (isset($this->request->post['status'])) {
            $data['status'] = $this->request->post['status'];
        } elseif (!empty($module_info)) {
            $data['status'] = $module_info['status'];
        } else {
            $data['status'] = '';
        }

		$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('module/cats.tpl', $data));
	}

	protected function validate() {
		if (!$this->user->hasPermission('modify', 'module/cats')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}
//
        if ((utf8_strlen($this->request->post['name']) < 3) || (utf8_strlen($this->request->post['name']) > 64)) {
            $this->error['name'] = $this->language->get('error_name');
        }

		return !$this->error;
	}
}

 

 

 

 

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


Ссылка на сообщение
Поделиться на другие сайты
34 минуты назад, Raensul сказал:

подскажите, плз, как посмотреть?


var_dump($setting_info);

тоже приводит к прекращению работы сайта...

не должно давать 500ую, попробуйте

print_r($setting_info);

или в лог записать
$this->log->write(print_r($setting_info, true));

 

также в начале контролера можно включить вывод ошибок:

ini_set("display_errors",1);
error_reporting(E_ALL);

 

  • +1 1

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


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

проблема в том, что ошибку пых не выдает, страница ложится с ошибкой:

НЕТ СВЯЗИ С САЙТОМ

ERR_CONTENT_DECODING_FAILED

Если бы пых выдал ошибку - хотя бы понятно было, откуда ноги растут...

а может я не правильно этот массив использовать пытаюсь?

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


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

удали все методы и оставь в теле индекс только вар думп

  • +1 1

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


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

Уровень GZIP сжатия: 0 в настройках магазина 

 

 

  • +1 2

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


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, ibond сказал:

print_r($setting_info);

то же самое...

 

9 минут назад, ibond сказал:

также в начале контролера можно включить вывод ошибок:

ini_set("display_errors",1);
error_reporting(E_ALL);

включал тоже...

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


Ссылка на сообщение
Поделиться на другие сайты
3 минуты назад, ArtemPitov сказал:

Уровень GZIP сжатия: 0 в настройках магазина 

 

 

спасибо, это помогло.

можете подсказать, в чем была проблема?

там не так много данных для сжатия было... или дело в самом архиваторе?

и как избежать этого для магазинов, где включено сжатие?

Изменено пользователем Raensul

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


Ссылка на сообщение
Поделиться на другие сайты
9 минут назад, Raensul сказал:

можете подсказать, в чем была проблема?

Заголовки ушли что контент кодируется а он не кодируется.

добавьте в php.ini zlib.output_compression = On и включите сжатия на сайте, попробуйте отработает или нет 

  • +1 2

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


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

@ArtemPitov это тоже сработало, спасибо.

 

4 минуты назад, ArtemPitov сказал:

Заголовки ушли что контент кодируется а он не кодируется.

это можно исправить в контроллере, чтобы не трогать php.ini?

 

или все же тут вопрос в правильном использовании $setting в контроллере?

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


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

это можно исправить в контроллере, чтобы не трогать php.ini?

У вас попросту сжатия выключено, правильнее всего его там править http://php.net/manual/ru/zlib.configuration.php 

  • +1 3

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


Ссылка на сообщение
Поделиться на другие сайты
6 минут назад, ArtemPitov сказал:

У вас попросту сжатия выключено, правильнее всего его там править http://php.net/manual/ru/zlib.configuration.php 

Спасибо.

это локальный сервер.

на хостинге, наверное, я бы и не заметил, т.к. там обычно включено.

всем спасибо за пополнение копилки в голове!

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


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

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

  • Последние посетители   0 пользователей онлайн

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

×

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

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