Jump to content

Recommended Posts

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

 

Делаю модуль блоков для OP2

 

Структура такая:

 

1. Картинка  || 2. Заголовок || 3. Текст || 4. Ссылка || 5. Сортировка 

 

Соответствен создал таблицу в БД

 

box_img_id  int(3)

box_id int(3)

link varchar(255)

image varchar(255)

title varchar(255)

description varchar(255)

sort int(3)

 

 

Сам ступор у меня с моделями и передачей в  БД  в какой папке писать модель для модуля 

Edited by ArtenPitov

Share this post


Link to post
Share on other sites

В модулях используется коробочная модель extension/module. Смотрите модуль HTML, он маленький и там все понятно. 

Edited by halfhope

Share this post


Link to post
Share on other sites

В модулях используется коробочная модель extension/module. Смотрите модуль HTML, он маленький и там все понятно. 

Если я правильно понял, тогда логика такая =>

 

Добавляем свою модель =>  admin\model\extension\my_box.php 

Потом подключаем в контроллере => $this->load->model('extension/my_box'); 

 

Ну и оставляем сами действия с модулем 

$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('html', $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'));
		}

Строго не судите я только учусь )

Share this post


Link to post
Share on other sites

Никто не судит) Нет, все не так. Сейчас попытаюсь объяснить.

Share this post


Link to post
Share on other sites

UPD Боже мой, походу я так давно не спал. Вы все правильно подумали и правильно сделали с model/module/my_box.php. Я же как-то пропустил мимо глаз весь текст . Подумал, что нужно создать обычный модуль OpenCart, для которого не используется модель. Ну раз уж я написал я отправлю:

 

В OpenCart (в админке) у модуля есть всего 2 файла - файл контроллера и файл шаблона причем создание и редактирование происходит тоже с помощью них.

 

Контроллер как мы уже знаем, обрабатывает инфу из моделей и передает/выводит в шаблон. Контроллер модуля админки должен:

  1. сохранить настройки 
  2. получить данные для модуля, чтобы потом передать их в view (при редактировании)
  3. сгенерировать данные "по умолчанию" (при создании нового модуля)

Все это делается в одной функции index используя встроенные модели.

 

1. Для сохранения данных используется вот такой стандартный код (на примере модуля my_box):

if (($this->request->server['REQUEST_METHOD'] == 'POST') && $this->validate()) {
	if (!isset($this->request->get['module_id'])) {
		$this->model_extension_module->addModule('my_box', $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'));
} 

При отправке формы на этот же адрес он создаст новый модуль или отредактирует существующий, если передан module_id

 

2, 3. Получение данных модуля(редактирование) и установка данных "по умолчанию", если данные модуля не были получены(создание нового).

 

Создание нового модуля и редактирование отличается лишь тем, что в при редактировании в адресной строке передается module_id. Если module_id объявлен, то идет получение данных модуля с этим module_id. И в шаблон передаются данные модуля для формы. Если не объявлен, то ставим данные по умолчанию вместо данных модуля. Это все можно сделать вот так:

// Проверка module_id и получение данных модуля
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']; //В случае ошибки (если они у вас обрабатываются в функции validate) ставим в форму данные, которые отправили, чтобы их не потерять
} elseif (!empty($module_info)) {
	$data['name'] = $module_info['name']; //Если данные модуля получены, то ставим их
} else {
	$data['name'] = ''; //Если не получены, то ставим данные по умолчанию
}

Надеюсь понятно объяснил.

 

Создайте модель model/module/my_box.php, обычно туда все модели для модулей кладем. Потом можно будет загрузить:

$this->load->model('module/my_box');
Edited by halfhope
  • +1 1

Share this post


Link to post
Share on other sites

Спасибо) да знакомое чувство работать до утра)

Share this post


Link to post
Share on other sites

так и хочется сказать:

- чувак, расчехлись, собери мыслишки и СКЛЕПАЙ ОДНУ ТЕМУ по проблемам в процессе разработки своего модуля, вместо тысячи отдельных с невнятными вопросами по выдернутому из контекста коду.

Share this post


Link to post
Share on other sites

Все-все )) я уже все сам )) не буду создавать больше дурацких тем, просто познаю что куда и какие переменные, функции откуда ))

Share this post


Link to post
Share on other sites
Guest
This topic is now closed to further replies.
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.