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

Добавление выбора картинки модуле в админ панели


Recommended Posts

Доброго времени суток.

 

Есть задача:

Необходимо настроить в админ панели выбор картинки для слайдера. Слайдер - отдельный модуль.

 

Код контроллера admin/controller/module/slider.php:

<?php
class ControllerModuleSlider extends Controller {
	private $error = array();  // используется для установки ошибки, если такая возникла

	public function index() {
		$this->load->language('module/slider'); //подключаем языковой файл

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

		$this->load->model('setting/setting');   //подключаем модель setting, он позволяет сохранять настройки модуля в БД

		if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) { // если мы нажали "Сохранить"  в панели, мы сохраняем текущие настройки
			$this->model_setting_setting->editSetting('slider', $this->request->post);   // анализ и передача данных в Setting Model для сохранения в базе данных
			$this->response->redirect($this->url->link('extension/module', 'token=' . $this->session->data['token'], 'SSL')); // редирект в Module Listing
		}
      
      // объявление переменных
      // формирование breadcrumbs
      // обработка ошибок из validate()
      // статус модуля
      // обработка текстовых полей
      
      // тут работа с изображением (пока что пробую сделать это с одним изображением)
      $this->load->model('tool/image');

		if (isset($this->request->post['config_image1'])) {
			$data['config_image1'] = $this->request->post['config_image1'];
		} else {
			$data['config_image1'] = $this->config->get('config_image1');
		}

		if (isset($this->request->post['config_image1']) && is_file(DIR_IMAGE . $this->request->post['config_image1'])) {
			$data['thumb1'] = $this->model_tool_image->resize($this->request->post['config_image1'], 100, 100);
		} elseif ($this->config->get('config_image1') && is_file(DIR_IMAGE . $this->config->get('config_image1'))) {
			$data['thumb1'] = $this->model_tool_image->resize($this->config->get('config_image1'), 100, 100);
		} else {
			$data['thumb1'] = $this->model_tool_image->resize('no_image.png', 100, 100);
		}

		$data['placeholder'] = $this->model_tool_image->resize('no_image.png', 100, 100);
      
      // далее завершающая часть (setOutput	)
      }
  
  protected function validate() {
    // проверка прав доступа пользователя для работы с модулем
		if (!$this->user->hasPermission('modify', 'module/category')) {
			$this->error['warning'] = $this->language->get('error_permission');
		}
    // проверка заданы ли текстовые поля
    
    if (!$this->request->post['config_image1']) {
			$this->error['code'] = $this->language->get('error_code');
		}

		return !$this->error;
	}
}

 

Кусок кода представления  admin/view/template/module/slider.tpl:

<div class="form-group">
  <label class="col-sm-2 control-label" for="input-image"><?php echo $entry_image; ?></label>
  <div class="col-sm-10"><a href="" id="thumb-image" data-toggle="image" class="img-thumbnail"><img src="<?php echo $thumb1; ?>" alt="" title="" data-placeholder="<?php echo $placeholder; ?>" /></a>
     <input type="hidden" name="config_image1" value="<?php echo $config_image1; ?>" id="input-image" />
   </div>
 </div>

 

Кусок кода catalog/controller/module/slider.php:

<?php  
class ControllerModuleSlider extends Controller {
	public function index() {

		$this->load->language('module/slider'); //подключаем любой языковой файл
		$data['heading_title'] = $this->language->get('heading_title'); //объявляем переменную heading_title с данными из языкового файла
		$data['slider_slide1_span'] = $this->config->get('slider_slide1_span');
		$data['slider_slide2_span'] = $this->config->get('slider_slide2_span');
		$data['slider_slide3_span'] = $this->config->get('slider_slide3_span');
		$data['slider_slide4_span'] = $this->config->get('slider_slide4_span');

		$data['slider_slide1_bold'] = $this->config->get('slider_slide1_bold');
		$data['slider_slide2_bold'] = $this->config->get('slider_slide2_bold');
		$data['slider_slide3_bold'] = $this->config->get('slider_slide3_bold');
		$data['slider_slide4_bold'] = $this->config->get('slider_slide4_bold');

		$data['config_image1'] = $this->config->get('config_image1');

		//стандартная процедура для контроллеров OpenCart, выбираем файл представления модуля для вывода данных
		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/slider.tpl')) {
			return $this->load->view($this->config->get('config_template') . '/template/module/slider.tpl', $data);
		}	
	}
}?>

 

Кусок кода catalog/view/template/module/slider.tpl:

<div class="main_title slide" >
<img src="<?php echo $config_image1; ?>" alt="<?php echo $slider_slide1_span . ' ' . $slider_slide1_bold; ?>">
  <div class="container--small">
    <div class="title_text">
      <span><?php echo $slider_slide1_span; ?></span>
      <h1><?php echo $slider_slide1_bold; ?></h1>
    </div>
  </div>
</div>

 

Проблема в том, что в представление catalog/view/module/slider.tpl $config_image1 передаётся как (unknown). Есть мысли, что это из-за модификации имён переменных, т.к. они участвуют в AJAX запросах. 

 

Подскажите, пожалуйста, почему приходит (unknown)?

Не использую модель, т. к. с текстовыми полями это работает и по аналогии (из setting.php) пытаюсь сделать с картинкой.

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


---

Цитата

Проблема в том, что в представление catalog/view/module/slider.tpl $config_image1 передаётся как (unknown).

 

unknown не может быть передано из контроллера в представление. В PHP несуществующая переменная будет null. Значит, скорее всего, ошибка в JS.

Покажите код, который выполняет AJAX, кажись именно там и надо искать ошибку.

 

Оффтоп.

---

$data['slider_slide1_span'] = $this->config->get('slider_slide1_span');

Вы можете использовать banner для своего модуля slider, как это сделано в extension/module/carousel.php

 

---

 

Поправьте проверку доступа:

// проверка прав доступа пользователя для работы с модулем
if (!$this->user->hasPermission('modify', 'module/category')) {
  $this->error['warning'] = $this->language->get('error_permission');
}

 

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

В 15.01.2020 в 15:41, SergeTkach сказал:

unknown не может быть передано из контроллера в представление. В PHP несуществующая переменная будет null. Значит, скорее всего, ошибка в JS.

Покажите код, который выполняет AJAX, кажись именно там и надо искать ошибку.

 

Код скриптов не менял совсем. Поэтому, наверное, и не работает.

Проверку поправил.

На Banner сейчас посмотрю, спасибо.

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


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

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

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

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

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

Вхід

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

Вхід зараз

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

Important Information

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