Починил редактирование товара
This commit is contained in:
parent
33cc3efc7b
commit
3ec9b920d2
|
@ -100,7 +100,7 @@ $config = [
|
|||
'<_key:[0-9]+>/<action:(accept|decline|data)>' => 'account/<action>',
|
||||
'product/<prod:[^/]+>/<catn:[^/]+>' => 'product/index',
|
||||
'product/<prod:[^/]+>/<catn:[^/]+>/<action:(write|delete|connect|disconnect|status)>' => 'product/<action>',
|
||||
'<section:(product|cart)>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|dscr|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',
|
||||
'<section:(product|cart)>/<prod:[^/]+>/<catn:[^/]+>/<action:(read|write|edit|delete)>/<target:(title|catn|name|dscr|prod|dmns|wght|image|cover|comm)>' => '<section>/<action>-<target>',
|
||||
'products/<action:(read)>/<stts:[^/]+>/' => 'product/<action>',
|
||||
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
|
||||
'profile/panel/<panel:(suppliers)>/<block:(requests)>/<action:(search)>' => 'profile/panel-<panel>-<block>-<action>',
|
||||
|
|
|
@ -50,6 +50,8 @@ class ProductController extends Controller
|
|||
'disconnect',
|
||||
'edit-title',
|
||||
'edit-catn',
|
||||
'edit-prod',
|
||||
'edit-name',
|
||||
'edit-dscr',
|
||||
'edit-dmns',
|
||||
'edit-wght',
|
||||
|
@ -634,6 +636,120 @@ class ProductController extends Controller
|
|||
}
|
||||
}
|
||||
|
||||
public function actionEditProd(string $catn, string $prod): array|string|null
|
||||
{
|
||||
// Инициализация
|
||||
$return = [
|
||||
'_csrf' => yii::$app->request->getCsrfToken()
|
||||
];
|
||||
|
||||
if (empty($catn) || empty($prod)) {
|
||||
// Не получен артикул
|
||||
|
||||
yii::$app->response->statusCode = 500;
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||
// Товар найден
|
||||
|
||||
// Инициализация
|
||||
$text = yii::$app->request->post('text') ?? yii::$app->request->get('text') ?? 'Без названия';
|
||||
|
||||
$model->prod = $text;
|
||||
|
||||
if ($model->save()) {
|
||||
// Товар обновлён
|
||||
|
||||
$return['main'] = $this->renderPartial('index', compact('model'));
|
||||
$return['redirect'] = "/product/$model->prod/$model->catn";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Конец алгоритма
|
||||
*/
|
||||
end:
|
||||
|
||||
if (yii::$app->request->isPost) {
|
||||
// POST-запрос
|
||||
|
||||
yii::$app->response->format = Response::FORMAT_JSON;
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
||||
|
||||
// Возврат на страницу товара
|
||||
return $this->redirect("/product/$prod/$catn");
|
||||
} else {
|
||||
// Старый товар не существует (подразумевается, что его артикул успешно изменён)
|
||||
|
||||
// Переадресация на новую страницу товара
|
||||
return $this->redirect("/product/$model->catn");
|
||||
}
|
||||
}
|
||||
|
||||
public function actionEditName(string $catn, string $prod): array|string|null
|
||||
{
|
||||
// Инициализация
|
||||
$return = [
|
||||
'_csrf' => yii::$app->request->getCsrfToken()
|
||||
];
|
||||
|
||||
if (empty($catn) || empty($prod)) {
|
||||
// Не получен артикул
|
||||
|
||||
yii::$app->response->statusCode = 500;
|
||||
|
||||
goto end;
|
||||
}
|
||||
|
||||
if ($model = Product::searchByCatnAndProd($catn, $prod)) {
|
||||
// Товар найден
|
||||
|
||||
// Инициализация
|
||||
$text = yii::$app->request->post('text') ?? yii::$app->request->get('text') ?? 'Без названия';
|
||||
|
||||
$model->name = $text;
|
||||
|
||||
if ($model->save()) {
|
||||
// Товар обновлён
|
||||
|
||||
$return['main'] = $this->renderPartial('index', compact('model'));
|
||||
$return['redirect'] = "/product/$model->prod/$model->catn";
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Конец алгоритма
|
||||
*/
|
||||
end:
|
||||
|
||||
if (yii::$app->request->isPost) {
|
||||
// POST-запрос
|
||||
|
||||
yii::$app->response->format = Response::FORMAT_JSON;
|
||||
|
||||
return $return;
|
||||
}
|
||||
|
||||
if (Product::searchByCatnAndProd($catn, $prod)) {
|
||||
// Старый товар ещё существует (подразумевается, что произошла ошибка)
|
||||
|
||||
// Возврат на страницу товара
|
||||
return $this->redirect("/product/$prod/$catn");
|
||||
} else {
|
||||
// Старый товар не существует (подразумевается, что его артикул успешно изменён)
|
||||
|
||||
// Переадресация на новую страницу товара
|
||||
return $this->redirect("/product/$model->catn");
|
||||
}
|
||||
}
|
||||
|
||||
public function actionEditDscr(string $catn, string $prod): array|string|null
|
||||
{
|
||||
// Инициализация
|
||||
|
|
|
@ -76,6 +76,7 @@ class Product extends Document
|
|||
parent::attributes(),
|
||||
[
|
||||
'catn',
|
||||
'name',
|
||||
// В библеотеке есть баг на название DESC (неизвестно в моей или нет)
|
||||
'dscr',
|
||||
'prod',
|
||||
|
@ -98,6 +99,7 @@ class Product extends Document
|
|||
parent::attributeLabels(),
|
||||
[
|
||||
'catn' => 'Каталожный номер (catn)',
|
||||
'name' => 'Название (name)',
|
||||
'dscr' => 'Описание (dscr)',
|
||||
'prod' => 'Производитель (prod)',
|
||||
'dmns' => 'Габариты (dmns)',
|
||||
|
@ -135,8 +137,11 @@ class Product extends Document
|
|||
'string',
|
||||
'message' => '{attribute} должен быть строкой'
|
||||
],
|
||||
[
|
||||
[
|
||||
'prod',
|
||||
'name'
|
||||
],
|
||||
'string',
|
||||
'length' => [2, 80],
|
||||
'message' => '{attribute} должен быть строкой от 3 до 80 символов'
|
||||
|
|
|
@ -138,12 +138,15 @@ use app\models\Product;
|
|||
&& (yii::$app->user->identity->type === 'administrator'
|
||||
|| yii::$app->user->identity->type === 'moderator')
|
||||
) : ?>
|
||||
<h2 id="name_<?= $model['catn'] ?>" class="mt-auto my-0 w-100 mb-1 product_name" role="button" onclick="return product_panel_name_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this);">
|
||||
<?= $model['name'] ?? 'Неизвестно' ?>
|
||||
</h2>
|
||||
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto pointer-event product_catn" role="button" onclick="return product_panel_catn_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, true);">
|
||||
<?= $model['catn'] ?? '' ?>
|
||||
</h1>
|
||||
<h2 id="prod_<?= $model['catn'] ?>" class="mt-auto my-0 product_prod" role="button" onclick="return product_panel_prod_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, true);">
|
||||
<h3 id="prod_<?= $model['catn'] ?>" class="mt-auto my-0 product_prod" role="button" onclick="return product_panel_prod_edit('<?= $model['catn'] ?>', '<?= $model['prod'] ?>', this, true);">
|
||||
<?= $model['prod'] ?? 'Неизвестно' ?>
|
||||
</h2>
|
||||
</h3>
|
||||
<?php else : ?>
|
||||
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto product_catn">
|
||||
<?= $model['catn'] ?>
|
||||
|
|
|
@ -81,10 +81,14 @@
|
|||
}
|
||||
|
||||
#page_product article h1.product_catn {
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
#page_product article h2.product_name {
|
||||
font-size: larger;
|
||||
}
|
||||
|
||||
#page_product article h2.product_prod {
|
||||
#page_product article h3.product_prod {
|
||||
font-size: small;
|
||||
}
|
||||
|
||||
|
|
|
@ -96,6 +96,47 @@ function product_panel_catn_save(catn, prod, element, redirect = false) {
|
|||
return true;
|
||||
};
|
||||
|
||||
function product_panel_name_edit(catn, prod, element, redirect = false) {
|
||||
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_name_save(\'' + catn + '\', \'' + prod + '\', this.parentElement, ' + redirect + ')" aria-invalid="false">';
|
||||
|
||||
element.removeAttribute('onclick');
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
function product_panel_name_save(catn, prod, element, redirect = false) {
|
||||
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||
// Инициализация
|
||||
let text = element.children[0].value;
|
||||
|
||||
// Обновление заголовка (предзагрузка)
|
||||
element.innerHTML = text;
|
||||
|
||||
// Запись аттрибута (предзагрузка)
|
||||
element.setAttribute('onclick', 'return product_panel_name_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||
|
||||
$.ajax({
|
||||
url: '/product/' + prod + '/' + catn + '/edit/name',
|
||||
type: 'post',
|
||||
dataType: 'json',
|
||||
data: {
|
||||
'_csrf': yii.getCsrfToken(),
|
||||
'text': text
|
||||
},
|
||||
success: product_response_success,
|
||||
error: product_response_error
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
|
||||
return true;
|
||||
};
|
||||
|
||||
function product_panel_prod_edit(catn, prod, element, redirect = false) {
|
||||
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
||||
element.innerHTML = '<input class="form-control text-center" type="text" value="' + element.innerText + '" onchange="return product_panel_prod_save(\'' + catn + '\', \'' + prod + '\', this.parentElement, ' + redirect + ')" aria-invalid="false">';
|
||||
|
@ -117,7 +158,7 @@ function product_panel_prod_save(catn, prod, element, redirect = false) {
|
|||
element.innerHTML = text;
|
||||
|
||||
// Запись аттрибута (предзагрузка)
|
||||
element.setAttribute('onclick', 'return product_panel_catn_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||
element.setAttribute('onclick', 'return product_panel_prod_edit(\'' + catn + '\', \'' + prod + '\', this);');
|
||||
|
||||
$.ajax({
|
||||
url: '/product/' + prod + '/' + catn + '/edit/prod',
|
||||
|
|
Reference in New Issue