Починил редактирование товара
This commit is contained in:
parent
33cc3efc7b
commit
3ec9b920d2
|
@ -100,7 +100,7 @@ $config = [
|
||||||
'<_key:[0-9]+>/<action:(accept|decline|data)>' => 'account/<action>',
|
'<_key:[0-9]+>/<action:(accept|decline|data)>' => 'account/<action>',
|
||||||
'product/<prod:[^/]+>/<catn:[^/]+>' => 'product/index',
|
'product/<prod:[^/]+>/<catn:[^/]+>' => 'product/index',
|
||||||
'product/<prod:[^/]+>/<catn:[^/]+>/<action:(write|delete|connect|disconnect|status)>' => 'product/<action>',
|
'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>',
|
'products/<action:(read)>/<stts:[^/]+>/' => 'product/<action>',
|
||||||
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
|
'profile/geolocation/<action:(init|write)>' => 'profile/geolocation-<action>',
|
||||||
'profile/panel/<panel:(suppliers)>/<block:(requests)>/<action:(search)>' => 'profile/panel-<panel>-<block>-<action>',
|
'profile/panel/<panel:(suppliers)>/<block:(requests)>/<action:(search)>' => 'profile/panel-<panel>-<block>-<action>',
|
||||||
|
|
|
@ -50,6 +50,8 @@ class ProductController extends Controller
|
||||||
'disconnect',
|
'disconnect',
|
||||||
'edit-title',
|
'edit-title',
|
||||||
'edit-catn',
|
'edit-catn',
|
||||||
|
'edit-prod',
|
||||||
|
'edit-name',
|
||||||
'edit-dscr',
|
'edit-dscr',
|
||||||
'edit-dmns',
|
'edit-dmns',
|
||||||
'edit-wght',
|
'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
|
public function actionEditDscr(string $catn, string $prod): array|string|null
|
||||||
{
|
{
|
||||||
// Инициализация
|
// Инициализация
|
||||||
|
|
|
@ -76,6 +76,7 @@ class Product extends Document
|
||||||
parent::attributes(),
|
parent::attributes(),
|
||||||
[
|
[
|
||||||
'catn',
|
'catn',
|
||||||
|
'name',
|
||||||
// В библеотеке есть баг на название DESC (неизвестно в моей или нет)
|
// В библеотеке есть баг на название DESC (неизвестно в моей или нет)
|
||||||
'dscr',
|
'dscr',
|
||||||
'prod',
|
'prod',
|
||||||
|
@ -98,6 +99,7 @@ class Product extends Document
|
||||||
parent::attributeLabels(),
|
parent::attributeLabels(),
|
||||||
[
|
[
|
||||||
'catn' => 'Каталожный номер (catn)',
|
'catn' => 'Каталожный номер (catn)',
|
||||||
|
'name' => 'Название (name)',
|
||||||
'dscr' => 'Описание (dscr)',
|
'dscr' => 'Описание (dscr)',
|
||||||
'prod' => 'Производитель (prod)',
|
'prod' => 'Производитель (prod)',
|
||||||
'dmns' => 'Габариты (dmns)',
|
'dmns' => 'Габариты (dmns)',
|
||||||
|
@ -136,7 +138,10 @@ class Product extends Document
|
||||||
'message' => '{attribute} должен быть строкой'
|
'message' => '{attribute} должен быть строкой'
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'prod',
|
[
|
||||||
|
'prod',
|
||||||
|
'name'
|
||||||
|
],
|
||||||
'string',
|
'string',
|
||||||
'length' => [2, 80],
|
'length' => [2, 80],
|
||||||
'message' => '{attribute} должен быть строкой от 3 до 80 символов'
|
'message' => '{attribute} должен быть строкой от 3 до 80 символов'
|
||||||
|
|
|
@ -138,12 +138,15 @@ use app\models\Product;
|
||||||
&& (yii::$app->user->identity->type === 'administrator'
|
&& (yii::$app->user->identity->type === 'administrator'
|
||||||
|| yii::$app->user->identity->type === 'moderator')
|
|| 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);">
|
<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'] ?? '' ?>
|
<?= $model['catn'] ?? '' ?>
|
||||||
</h1>
|
</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'] ?? 'Неизвестно' ?>
|
<?= $model['prod'] ?? 'Неизвестно' ?>
|
||||||
</h2>
|
</h3>
|
||||||
<?php else : ?>
|
<?php else : ?>
|
||||||
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto product_catn">
|
<h1 id="catn_<?= $model['catn'] ?>" class="mr-auto my-auto product_catn">
|
||||||
<?= $model['catn'] ?>
|
<?= $model['catn'] ?>
|
||||||
|
|
|
@ -81,10 +81,14 @@
|
||||||
}
|
}
|
||||||
|
|
||||||
#page_product article h1.product_catn {
|
#page_product article h1.product_catn {
|
||||||
|
font-size: small;
|
||||||
|
}
|
||||||
|
|
||||||
|
#page_product article h2.product_name {
|
||||||
font-size: larger;
|
font-size: larger;
|
||||||
}
|
}
|
||||||
|
|
||||||
#page_product article h2.product_prod {
|
#page_product article h3.product_prod {
|
||||||
font-size: small;
|
font-size: small;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -96,6 +96,47 @@ function product_panel_catn_save(catn, prod, element, redirect = false) {
|
||||||
return true;
|
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) {
|
function product_panel_prod_edit(catn, prod, element, redirect = false) {
|
||||||
if (catn !== null && catn !== undefined && prod !== null && prod !== undefined && element !== null && element !== undefined) {
|
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">';
|
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.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({
|
$.ajax({
|
||||||
url: '/product/' + prod + '/' + catn + '/edit/prod',
|
url: '/product/' + prod + '/' + catn + '/edit/prod',
|
||||||
|
|
Reference in New Issue