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