diff --git a/public/admin/controller/catalog/product.php b/public/admin/controller/catalog/product.php index 6c45f23..7c2ee2c 100644 --- a/public/admin/controller/catalog/product.php +++ b/public/admin/controller/catalog/product.php @@ -1350,27 +1350,63 @@ if (isset($this->request->post['price_3'])) { // Attributes $this->load->model('catalog/attribute'); + $this->load->model('catalog/attribute_group'); + + $attribute_groups = $this->model_catalog_attribute_group->getAttributeGroups(); + + $saved_attributes = array(); if (isset($this->request->post['product_attribute'])) { - $product_attributes = $this->request->post['product_attribute']; + $saved_attributes_raw = $this->request->post['product_attribute']; + + foreach ($saved_attributes_raw as $attr_id => $attr_data) { + if (!empty($attr_data['product_attribute_description'])) { + $saved_attributes[] = array( + 'attribute_id' => $attr_id, + 'product_attribute_description' => $attr_data['product_attribute_description'] + ); + } + } } elseif (isset($this->request->get['product_id'])) { - $product_attributes = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']); - } else { - $product_attributes = array(); + $saved_attributes = $this->model_catalog_product->getProductAttributes($this->request->get['product_id']); } - $data['product_attributes'] = array(); + $data['attribute_groups'] = array(); - foreach ($product_attributes as $product_attribute) { - $attribute_info = $this->model_catalog_attribute->getAttribute($product_attribute['attribute_id']); + foreach ($attribute_groups as $attribute_group) { + $attributes = $this->model_catalog_attribute->getAttributes(array( + 'filter_attribute_group_id' => $attribute_group['attribute_group_id'], + 'sort' => 'a.sort_order', + 'order' => 'ASC' + )); - if ($attribute_info) { - $data['product_attributes'][] = array( - 'attribute_id' => $product_attribute['attribute_id'], - 'name' => $attribute_info['name'], - 'product_attribute_description' => $product_attribute['product_attribute_description'] + if (!$attributes) { + continue; + } + + $group_attributes = array(); + + foreach ($attributes as $attribute) { + $text_data = array(); + + foreach ($saved_attributes as $saved) { + if ($saved['attribute_id'] == $attribute['attribute_id']) { + $text_data = $saved['product_attribute_description']; + break; + } + } + + $group_attributes[] = array( + 'attribute_id' => $attribute['attribute_id'], + 'name' => $attribute['name'], + 'text' => $text_data ); } + + $data['attribute_groups'][] = array( + 'name' => $attribute_group['name'], + 'attribute' => $group_attributes + ); } // Options diff --git a/public/admin/model/catalog/product.php b/public/admin/model/catalog/product.php index 43d06d7..b802d9a 100644 --- a/public/admin/model/catalog/product.php +++ b/public/admin/model/catalog/product.php @@ -25,13 +25,12 @@ class ModelCatalogProduct extends Model { if (isset($data['product_attribute'])) { foreach ($data['product_attribute'] as $product_attribute) { if ($product_attribute['attribute_id']) { - // Removes duplicates - $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "'"); - foreach ($product_attribute['product_attribute_description'] as $language_id => $product_attribute_description) { - $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "' AND language_id = '" . (int)$language_id . "'"); + if (!empty($product_attribute_description['text'])) { + $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "' AND language_id = '" . (int)$language_id . "'"); - $this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'"); + $this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'"); + } } } } @@ -186,11 +185,10 @@ class ModelCatalogProduct extends Model { if (!empty($data['product_attribute'])) { foreach ($data['product_attribute'] as $product_attribute) { if ($product_attribute['attribute_id']) { - // Removes duplicates - $this->db->query("DELETE FROM " . DB_PREFIX . "product_attribute WHERE product_id = '" . (int)$product_id . "' AND attribute_id = '" . (int)$product_attribute['attribute_id'] . "'"); - foreach ($product_attribute['product_attribute_description'] as $language_id => $product_attribute_description) { - $this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'"); + if (!empty($product_attribute_description['text'])) { + $this->db->query("INSERT INTO " . DB_PREFIX . "product_attribute SET product_id = '" . (int)$product_id . "', attribute_id = '" . (int)$product_attribute['attribute_id'] . "', language_id = '" . (int)$language_id . "', text = '" . $this->db->escape($product_attribute_description['text']) . "'"); + } } } } diff --git a/public/admin/view/template/catalog/product_form.twig b/public/admin/view/template/catalog/product_form.twig index dba6078..1582a2b 100644 --- a/public/admin/view/template/catalog/product_form.twig +++ b/public/admin/view/template/catalog/product_form.twig @@ -492,39 +492,26 @@
| {{ entry_attribute }} | -{{ entry_text }} | -- |
| - | {% for language in languages %}
-
- |
- - |
| - | - | |
+
+