Jump to content
Sign in to follow this  
dofus01

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

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





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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
You are posting as a guest. If you have an account, please sign in.
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

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.