dofus01

Привязка категорий в производителях

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

dofus01    0

Всем привет. Требуется, совет и пинок в нужную сторону.
Только начинаю постигать программирование и опенкарт, прошу сильно не пинать.
Попытаюсь расписать то что сделал в виде инструкции, вдруг кому то потом пригодится. Надеюсь на Вашу подсказку дамы и господа!
OcStore версия 1.5.3.1
 
Хочу привязать категории к брендам, делаю следующее:
 
Для начала выполняем запрос, дабы была таблица где будет формироваться связь

CREATE TABLE IF NOT EXISTS `manufacturer_to_category` (
 `manufacturer_id` int(11) NOT NULL,
 `category_id` int(11) NOT NULL,
 PRIMARY KEY (`manufacturer_id`,`category_id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Далее, открываем /admin/model/catalog/manufacturer.php и там добавляем в addManufacturer

		if (isset($data['manufacturer_category'])) {
			foreach ($data['manufacturer_category'] as $category_id) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "manufacturer_to_category SET manufacturer_id = '" . (int)$manufacturer_id . "', category_id = '" . (int)$category_id . "'");
			}
		}

в editManufacturer 

		$this->db->query("DELETE FROM " . DB_PREFIX . "manufacturer_to_category WHERE manufacturer_id = '" . (int)$manufacturer_id . "'");
		
		if (isset($data['manufacturer_category'])) {
			foreach ($data['manufacturer_category'] as $category_id) {
				$this->db->query("INSERT INTO " . DB_PREFIX . "manufacturer_to_category SET manufacturer_id = '" . (int)$manufacturer_id . "', category_id = '" . (int)$category_id . "'");
			}		
		}

в deleteManufacturer 

		$this->db->query("DELETE FROM " . DB_PREFIX . "manufacturer_to_category WHERE manufacturer_id = '" . (int)$manufacturer_id . "'");

ну и новую функцию 

	public function getManufacturerCategories($category_id) {
	  $manufacturer_category_data = array();

	  $query = $this->db->query("SELECT * FROM " . DB_PREFIX . "manufacturer_to_category WHERE manufacturer_id = '" . (int)$manufacturer_id . "'");

	  foreach ($query->rows as $result) {
	    $manufacturer_category_data[] = $result['category_id'];
	}

	return $manufacturer_category_data;
	}

с моделью все ок, идем дальше в /admin/controller/catalog/manufacturer.php ну и например после 

$this->data['stores'] = $this->model_setting_store->getStores();

добавляем 

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

		$this->data['categories'] = $this->model_catalog_category->getCategories();
		
		if (isset($this->request->post['manufacturer_category'])) {
			$this->data['manufacturer_category'] = $this->request->post['manufacturer_category'];
		} elseif (isset($this->request->get['manufacturer_id'])) {
			$this->data['manufacturer_category'] = $this->model_catalog_manufacturer->getManufacturerStores($this->request->get['manufacturer_id']);
		} else {
			$this->data['manufacturer_category'] = array();
		}		

теперь идем в /admin/view/template/catalog/manufacturer_form.tpl и добавляем 

            <tr>
              <td><?php echo $entry_category; ?></td>
              <td><div class="scrollbox">
                  <?php $class = 'odd'; ?>
                  <?php foreach ($categories as $category) { ?>
                  <?php print (in_array($category['category_id'], $manufacturer_category)); ?>
                  <?php $class = ($class == 'even' ? 'odd' : 'even'); ?>
                  <div class="<?php echo $class; ?>">
                    <?php if (in_array($category['category_id'], $manufacturer_category)) { ?>
                    <input type="checkbox" name="manufacturer_category[]" value="<?php echo $category['category_id']; ?>" checked="checked" />
                    <?php echo $category['name']; ?>
                    <?php } else { ?>
                    <input type="checkbox" name="manufacturer_category[]" value="<?php echo $category['category_id']; ?>" />
                    <?php echo $category['name']; ?>
                    <?php } ?>
                  </div>
                  <?php } ?>
                </div>
                <a onclick="$(this).parent().find(':checkbox').attr('checked', true);">выбрать все</a> / <a onclick="$(this).parent().find(':checkbox').attr('checked', false);">убрать выделение</a></td>
            </tr>

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

post-684031-0-99279000-1402735980_thumb.png





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

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


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

Хотя наверное основной вопрос все же будет в том как вывести эти привязанные категории на странице производителя, ну а потом почему в админке не отмечаются чекбоксы уже выбранных категорий после сохранения?

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


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

Видимо потому, что там не нужны чекбоксы?

В фильтрах внутри товара есть автозаполнение. Может стоит аналогично сделать для фильтра на странице производителя?

И зачем было замазывать НЕ конфиденциальную информацию?

Или у вас там категории типа "adult"?

По вашему скрину не понятно даже, где вы находитесь, что это за страница.

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


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

В функции getManufacturerCategories входной параметр $category_id , а выбираете по manufacturer_id ?

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


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

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

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

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

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

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

Войти

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

Войти


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

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