Closed temirovgroup closed 4 years ago
@temirovgroup Most likely the problem is on the side of your scripts. After reloading the form, dom model of page changes and all js event handler bindings are lost. Verify handlers persist across page reloads.
@temirovgroup Most likely the problem is on the side of your scripts. After reloading the form, dom model of page changes and all js event handler bindings are lost. Verify handlers persist across page reloads.
The bottom line is that if you disable concatJS, everything works. And I didn't write the handlers myself, everything works on the standard Yii2 form + Pjax.
If you load the script inside an ajax request, then it won't work in script concatenation. Without a demo stand, I can do nothing more to help.
If you load the script inside an ajax request, then it won't work in script concatenation. Without a demo stand, I can do nothing more to help.
I'm sorry, this is project
http://partner.eda.menu/admin phone: 8888888888 pass: admin
next step: http://partner.eda.menu/stock/testovaa-akcia
Help me :(
this code:
` /**
@throws HttpException */ public function actionView($url) { if (empty($data = Post::findOne(['url' => $url]))) { throw new HttpException(404); }
$this->setMeta(
$data->title,
$data->meta_description,
$data->meta_keyword
);
$session = Yii::$app->getSession();
// Модель комментария
$model = new Comment();
// Модель подтверждения через СМС
$modelConfirmation = new Confirmation();
if (Yii::$app->getRequest()->isPjax && $model->load(Yii::$app->getRequest()->post()) && $model->validate()) {
// Если гость, то сохраняем номер телефона в сессию и модель в кэш, направляем на подтверждение в СМС.
if (Yii::$app->getUser()->isGuest) {
// Layout change
$this->layout = false;
$session->set('phone', $model->phone);
$session->set('modelComment', $model);
if (empty($user = User::findOne(['phone' => $model->phone]))) {
(new User())->createUser($model);
} else {
(new Collector())->sendConfrimSms($user);
}
Yii::$app->getSession()->setFlash('info', 'Введите код из СМС');
return $this->renderAjax('_confirmation-view', [
'data' => $data,
'modelConfirmation' => $modelConfirmation,
]);
} else {
if ($model->save()) {
Yii::$app->getSession()->setFlash('success', 'Комментарий успешно добавлен!');
}
}
}
if (Yii::$app->getRequest()->isPjax && $modelConfirmation->load(Yii::$app->getRequest()->post())) {
// Если код неверный
if (!$modelConfirmation->confirm()) {
// Layout change
//$this->layout = false;
Yii::$app->getSession()->setFlash('warning', 'Неверный код из СМС!');
$modelConfirmation->sms_code = '';
return $this->render('_confirmation-view', [
'data' => $data,
'modelConfirmation' => $modelConfirmation,
]);
} else {
// Модель из сессии
$modelComment = $session->remove('modelComment');
// Модель комментария
$model = new Comment();
$model->name = $modelComment->name;
$model->phone = $modelComment->phone;
$model->text = $modelComment->text;
$model->target_id = $modelComment->target_id;
$model->pid = $modelComment->pid;
$model->type = $modelComment->type;
if ($model->save()) {
Yii::$app->getSession()->setFlash('success', 'Комментарий успешно добавлен!');
}
}
}
// Комментарии к записи
$comment = Comment::find()->where([
'pid' => $data->id,
'type' => (new Collector())->getClassName($data),
'target_id' => 0,
])->orderBy(['created_at' => SORT_DESC])
->with(['user', 'targetComment'])
->all();
// Акции
$stock = Stock::find()->where(['is_active' => '1'])
->andWhere(['>=', 'lifetime', time()])
->all();
// Новости и статьи
$post = Post::find()->where(['is_active' => '1'])
->andWhere(['!=', 'id', $data->id])
->orderBy(['created_at' => SORT_DESC])
->limit(10)
->all();
// Сброс блока комментария
$model->text = '';
$model->target_id = '';
return $this->render('view', [
'data' => $data,
'stock' => $stock,
'post' => $post,
'model' => $model,
'comment' => $comment,
]);
}`
VIEW
`<?php
/**
use yii\helpers\Html; use yii\helpers\Url; use yii\widgets\ActiveForm; use yii\widgets\Pjax;
/ @var $this \yii\web\View / / @var $data \app\modules\admin\models\Stock|null / / @var $model \app\modules\admin\models\Comment / / @var $comment array|\yii\db\ActiveRecord[] / / @var $stock \app\modules\admin\models\Stock|[] / / @var $post \app\modules\admin\models\Post|[] /
$collector = new \app\models\Collector(); ?>
<?php $defaultUrl = $collector->imageUrl(null, 75, 75, 58) ?>
<?php Pjax::begin(['id' => 'comment-list']) ?>
<?php foreach ($comment as $item) : ?>
<?php endforeach; ?> <?php Pjax::end() ?>
`
If disable concatJS, comment work..
when concatJS is disabled, the page does not reload when adding 2 comments. Please excuse my English.
Please format your code. Or give read access to the repository.
this controller, model, view.
`$("#comment-form").on("pjax:end", function() { $.pjax.reload({ container: "#comment-list" });
// Lozad
myLozad(200);
});`
this js code reload comment-list
https://i.imgur.com/GijaBJE.png Your handler will respond with a new minified script that specifically addresses this form. Make sure that the initialization of the script after loading is correct. But it is better to remove scripts from ajax transmission.
The script must be initialized on the page once and process any specific form.
Thank You! I'll check it out.
Hello!
Pjax does not work with the current configuration. It is used for adding comments to the site, so the first time it is added without reloading, and the second time it reloads the page. This happens if the 'concatJs' parameter is true.
Please help solve this problem. I've already broken my head.. there are no errors in the console, but the page is reloaded if you try to use the form a second time (in one session). There is no redirect on the server side, the comment is added successfully but with a reboot.
I apologize for my English.
`<?php 'view' => [ 'class' => '\rmrevin\yii\minify\View', 'enableMinify' => !YII_DEBUG, // 'enableMinify' => YII_DEBUG, 'concatCss' => true, // concatenate css 'minifyCss' => true, // minificate css 'concatJs' => true, // concatenate js - if 'false' - Pjax worked. 'minifyJs' => true, // minificate js 'minifyOutput' => true, // minificate result html page 'webPath' => '@web', // path alias to web base 'basePath' => '@webroot', // path alias to web base 'minifyPath' => '@webroot/source', // path alias to save minify result 'jsPosition' => [ \yii\web\View::POS_END, ], // positions of js files to be minified 'forceCharset' => 'UTF-8', // charset forcibly assign, otherwise will use all of the files found charset 'expandImports' => true, // whether to change @import on content 'compressOptions' => ['extra' => true], // options for compress 'excludeFiles' => [ // 'jquery.js', // exclude this file from minification // 'app-[^.].js', // you may use regexp ], 'excludeBundles' => [ \mihaildev\ckeditor\Assets::class,
// \app\helloworld\AssetBundle::class, // exclude this bundle from minification ], ], ?> `