product attributes on edit product
This commit is contained in:
parent
f0f9ebeb8c
commit
25cb12d810
|
@ -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'));
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -0,0 +1,42 @@
|
|||
<?php
|
||||
|
||||
/**
|
||||
* @var int $cnt
|
||||
* @var \App\Model\Entity\ProductCategoryAttribute|\Cake\Datasource\EntityInterface $productCategoryAttribute
|
||||
* @var \App\Model\Entity\ProductAttribute|\Cake\Datasource\EntityInterface|null $productAttribute
|
||||
*/
|
||||
|
||||
use Cake\Utility\Hash;
|
||||
use CakeProducts\Model\Enum\ProductCategoryAttributeTypeId;
|
||||
|
||||
if (($productAttribute ?? false)) {
|
||||
echo $this->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,
|
||||
]);
|
||||
}
|
||||
?>
|
|
@ -40,15 +40,32 @@ echo $this->Form->control('product_type_id');
|
|||
?>
|
||||
<hr>
|
||||
<h4 class="mb-4">Product Attributes</h4>
|
||||
<div id="product-attributes-container" class="container">
|
||||
<?php if (false && $product->hasValue('product_attributes')) : ?>
|
||||
<?php
|
||||
<div
|
||||
id="product-attributes-container"
|
||||
class="container"
|
||||
<?php if ($product->isNew()) : ?>
|
||||
|
||||
hx-get="<?= $this->Url->build([
|
||||
'controller' => 'ProductCategoryAttributes',
|
||||
'action' => 'form',
|
||||
]); ?>"
|
||||
hx-trigger="change target:#product_category_id from:body"
|
||||
hx-target="this"
|
||||
hx-include="#form, #product_category_id"
|
||||
hx-swap="innerHTML"
|
||||
<?php endif; ?>
|
||||
>
|
||||
<?php if ($product->hasValue('product_attributes')) : ?>
|
||||
<?php
|
||||
$cnt = 0;
|
||||
foreach ($product->product_attributes as $productAttribute) {
|
||||
$prefix = 'product_attributes.' . $cnt . '.';
|
||||
|
||||
echo '<hr class="my-2">';
|
||||
|
||||
echo $this->element('ProductCategoryAttributes/product_form', [
|
||||
'productCategoryAttribute' => $productAttribute->hasValue('product_category_attribute') ? $productAttribute->product_category_attribute : null,
|
||||
'productAttribute' => $productAttribute,
|
||||
'cnt' => $cnt,
|
||||
]);
|
||||
$cnt++;
|
||||
} ?>
|
||||
<?php endif; ?>
|
||||
|
|
Loading…
Reference in New Issue