diff --git a/src/Controller/ProductsController.php b/src/Controller/ProductsController.php index 50b077e..3b1b63b 100644 --- a/src/Controller/ProductsController.php +++ b/src/Controller/ProductsController.php @@ -107,9 +107,16 @@ class ProductsController extends AppController public function edit($id = null) { $productsTable = $this->getTable(); - $product = $productsTable->get($id, contain: []); + $product = $productsTable->get($id, contain: [ + 'ProductAttributes', + 'ProductAttributes.ProductCategoryAttributes', + 'ProductAttributes.ProductCategoryAttributes.ProductCategoryAttributeOptions', + ]); if ($this->request->is(['patch', 'post', 'put'])) { - $product = $productsTable->patchEntity($product, $this->request->getData()); + $saveOptions = [ + 'associated' => ['ProductAttributes'], + ]; + $product = $productsTable->patchEntity($product, $this->request->getData(), $saveOptions); if ($productsTable->save($product)) { $this->Flash->success(__('The product has been saved.')); @@ -122,6 +129,7 @@ class ProductsController extends AppController $productCategory = $product->product_category_id ? $productsTable->ProductCategories->find()->where(['internal_id' => $product->product_category_id])->first() : null; $productCatalogs = $productsTable->ProductCategories->ProductCatalogs->find('list')->toArray(); $this->set(compact('product', 'productCatalogs', 'productCategory')); + } /** diff --git a/templates/element/ProductCategoryAttributes/product_form.php b/templates/element/ProductCategoryAttributes/product_form.php new file mode 100644 index 0000000..6d9b76c --- /dev/null +++ b/templates/element/ProductCategoryAttributes/product_form.php @@ -0,0 +1,42 @@ +Form->hidden('product_attributes.' . $cnt . '.id', ['value' => $productAttribute->id]); +} +echo $this->Form->hidden('product_attributes.' . $cnt . '.product_category_attribute_id', [ + 'value' => $productCategoryAttribute->id, +]); +$inputType = 'text'; +$options = []; +if ($productCategoryAttribute->attribute_type_id === ProductCategoryAttributeTypeId::Integer) { + $inputType = 'number'; +} +if ($productCategoryAttribute->attribute_type_id === ProductCategoryAttributeTypeId::Constrained) { + echo $this->Form->hidden('product_attributes.' . $cnt . '.attribute_value', [ + 'value' => '', + ]); + $options = !empty($productCategoryAttribute->product_category_attribute_options) ? + Hash::combine($productCategoryAttribute->product_category_attribute_options, '{n}.id', '{n}.attribute_label') : + []; + echo $this->Form->control('product_attributes.' . $cnt . '.product_category_attribute_option_id', [ + 'type' => 'select', + 'label' => $productCategoryAttribute->name, + 'options' => $options, + 'value' => $productAttribute->product_category_attribute_option_id ?? '', + ]); +} else { + echo $this->Form->control('product_attributes.' . $cnt . '.attribute_value', [ + 'type' => $inputType, + 'label' => $productCategoryAttribute->name, + ]); +} +?> diff --git a/templates/element/Products/form.php b/templates/element/Products/form.php index be2a6a2..4cc5ed3 100644 --- a/templates/element/Products/form.php +++ b/templates/element/Products/form.php @@ -40,15 +40,32 @@ echo $this->Form->control('product_type_id'); ?>