taral
@taral
php программист

Yii2. Как регистрировать css при использовании pjax?

Вопрос касается исключительно при работе на yii2 фреймворке.
Максимально кратко излагаю кодом. Это код представления.
\yii\widgets\Pjax::begin(['id' => 'pjax-container']);
if(Yii::$app->request->isPjax) {
    echo \yii\jui\DatePicker::widget([
        'name' => 'date',
        'value' => '',
    ]);
} else {
    echo \yii\helpers\Html::button('Load Pjax', ['onclick' => "$.pjax.reload({container:'#pjax-container'});"]);
}
\yii\widgets\Pjax::end();

Суть в том что при загрузке страницы css jquery-ui не загрузится потому что не проходит условие Yii::$app->request->isPjax.
Потому в хедере страницы не будет соответствующих стилей. Далее когда я делаю перезагрузку через pjax условие проходит. И стили должны загрузится. Но подключаются только js файлы и js код.
Причем если я делаю без использования pjax и в контроллере вызываю renderAjax. То в этом случае все работает нормально.
Еще более простой пример
\yii\widgets\Pjax::begin(['id' => 'pjax-container']);
if(Yii::$app->request->isPjax) {
    $this->registerCssFile('http://test.css'); // не регистрируется...
    $this->registerJsFile('http://test.js'); // регистрируется
}
echo \yii\helpers\Html::button('Load Pjax', ['onclick' => "$.pjax.reload({container:'#pjax-container'});"]);
\yii\widgets\Pjax::end();
  • Вопрос задан
  • 928 просмотров
Пригласить эксперта
Ответы на вопрос 1
webinar
@webinar Куратор тега Yii
Учим yii: https://youtu.be/-WRMlGHLgRg
1. Yii::$app->request->isPjax - это должно быть в контроллере, а не в view.
2. PJAX не для того придумали, что бы скрывать блоки. Зачем тут pjax. Делайте обычный рендер и используйте js для показа блока с datepiker-om или бутстраповский collapse getbootstrap.com/javascript/#collapse
3.
Причем если я делаю без использования pjax и в контроллере вызываю renderAjax. То в этом случае все работает нормально.
- потому что подобное делается без использования PJAX, Вы вообще понимаете зачем он и чем отличается от AJAX?
4. У Вас все работает именно так как должно. Просто Вы хотите через жопу нос почесать, а авторы фреймворка не думали, что кому-то придет в голову подобная идея.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы