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

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


Recommended Posts

Всем привет. Требуется, совет и пинок в нужную сторону.
Только начинаю постигать программирование и опенкарт, прошу сильно не пинать.
Попытаюсь расписать то что сделал в виде инструкции, вдруг кому то потом пригодится. Надеюсь на Вашу подсказку дамы и господа!
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





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

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


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

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


  • 7 months later...

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

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

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

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

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

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


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

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

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

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

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

Вхід

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

Вхід зараз
  • Зараз на сторінці   0 користувачів

    • Ні користувачів, які переглядиють цю сторінку
×
×
  • Створити...

Important Information

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