ArtemPitov

[Решено] Новый модуль

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

ArtemPitov    386

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

 

Делаю модуль блоков для 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)

 

 

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

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

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


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

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

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

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


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

В модулях используется коробочная модель 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'));
		}

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

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


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

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

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


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

Буду очень признательный

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


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

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');
Изменено пользователем halfhope

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


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

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

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


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

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

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

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


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

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

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


Ссылка на сообщение
Поделиться на другие сайты
Гость
Эта тема закрыта для публикации ответов.

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

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