yii\bootstrap\Tabs и активные вкладки

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

yii\bootstrap\Tabs и активные вкладки

Сообщение Akulenok »

Полдскажите пожалуйста с реализацией активных вкладок
Использую этот виджет для вывода различных своих настроек.

Код: Выделить всё

<?= Tabs::widget([
                        'encodeLabels' => false,
                        'items' => [
                            [
                                'label' => 'Данные',
                                'content' => $this->render('settings/_data', ['model' => $model, 'form' => $form]),
                            ],
                            [
                                'label' => 'SEO',
                                'content' => $this->render('settings/_seo', ['model' => $model, 'form' => $form]),
                            ],
                            [
                                'label' => 'Соц. сети',
                                'content' => $this->render('settings/_social', ['model' => $model, 'form' => $form]),
                            ],
                        ],
                    ]
                ) ?>
Вопрос:
Как находясь например на вкладке SEO, после сохранение (пост запрос) остаться на этой же вкладке
я понимаю что во вкладку SEO мне надо послать active= true

То что я смог сделать, мне кажется очень кривым решением, наверняка вы можете подсказать лучше

что сделал я:
на каждой вьюхе настроек я добавил кнопку сохранить и прописал туда 'value' => 'в данном примере SEO' с именем вкладки

потом в контроллере отлавливаю и делаю
$post = Yii::$app->request->post('btn');
$active[$post] = true;
и после сохранения редиректю на 'active' => $post

далее отлавливаю гет

Код: Выделить всё

 if (!empty(Yii::$app->request->get('active'))) {
            $get = Yii::$app->request->get('active');
            $active[$get] = true;
        }
и отправляю в главную вьюху с табами
где у каждой вкладки
'active' => $active['SEO'], и тд....
ничего более разумного я придумать не смог, а Вы?
ភាសាខ្មែរ Yii2 - это кайф!
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение caHek2x »

может просто использовать pjax :-)
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Akulenok »

caHek2x писал(а): 2017.03.01, 13:33 может просто использовать pjax :-)
Попробовал сейчас, что-то у меня все равно кидает на первую вкладку.
Вы не могли показать простенький примерчик?
ភាសាខ្មែរ Yii2 - это кайф!
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение caHek2x »

эм я надеюсь вы же не додумались весь Tabs::widget обернуть в pjax ... вы же поняли зачем он нужен, куда его пихать и что он будет делать ... ?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Akulenok »

через pjax не хочу, а через локалсторадж..да ну нафиг. чем этот вариант проще чем у меня? помоему такие же кастыли, ладно думал может есть более красивое решение :\
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
futbolim
Сообщения: 2051
Зарегистрирован: 2012.07.08, 19:28

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение futbolim »

Почему при клике на табе не устанавливать в скрытое поле его значение?
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Onotole »

Akulenok писал(а): 2017.03.01, 23:09 через pjax не хочу, а через локалсторадж..да ну нафиг. чем этот вариант проще чем у меня? помоему такие же кастыли, ладно думал может есть более красивое решение :\

Код: Выделить всё

<?php Pjax::widget()?>

// content

<?php Pjax::end()?>
Чем это плохо?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение yiijeka »

Есть вот такой код, при клике якорь добавляется к текущему url. Помогает даже когда, нажимаем F5.

Код: Выделить всё

$('.nav-tabs a').click(function (e) {
            $(this).tab('show');
            var scrollmem = $('body').scrollTop() || $('html').scrollTop();
            window.location.hash = this.hash;
            $('html,body').scrollTop(scrollmem);
          });
Т.к. якорь запросом не передать, его можно, дополнив этот код, сохранять в localStorage, а потом от туда доставать.
Loveorigami
Сообщения: 977
Зарегистрирован: 2014.08.27, 21:54

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Loveorigami »

Akulenok писал(а): 2017.03.01, 23:09 через pjax не хочу, а через локалсторадж..да ну нафиг. чем этот вариант проще чем у меня? помоему такие же кастыли, ладно думал может есть более красивое решение :\
по второй ссылке есть и другие варианты.
и че тогда спрашивал, если нафиг?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Akulenok »

Onotole писал(а): 2017.03.02, 00:32

Код: Выделить всё

<?php Pjax::widget()?>
// content
<?php Pjax::end()?>
Чем это плохо?
да потому что у меня не получается его сделать, у вас на словах все просто ) в гуглах примеры на beginForm и задачи ни как у меня.
Мне надо сразу все поля сохранять. ибо в контроллере я сериализую массив и кладу его в одно поле. Может кто-нибудь поможет на конкретном моем примере.
Вот что я сделал
контроллер

Код: Выделить всё

 public function actionSettings()
    {
        if ($model->load(Yii::$app->request->post())) {
              //тут сериализую и сохраняю  serialize($model->getAttributes())
               Yii::$app->getSession()->setFlash('success', 'Настройки сохранены.');
            	return $this->redirect(['settings']);
        }
    }

дальше вьюха

Код: Выделить всё

<?php
use yii\widgets\ActiveForm;
use yii\bootstrap\Tabs;

$this->title = 'Настройки сайта';
$this->params['breadcrumbs'][] = $this->title;

$form = ActiveForm::begin(
    ['id' => 'site-settings-form'],
    ['options' => ['data-pjax' => true]],
    ['enableClientValidation' => false],
    ['enableAjaxValidation' => true],
    ['validateOnChange' => false]
);
?>
    <div class="row">
        <div class="col-md-12">

            <div class="well">
                <?= Tabs::widget([
                        'encodeLabels' => false,
                        'items' => [
                            [
                                'label' => 'Данные',
                                'content' => $this->render('settings/_data', ['model' => $model, 'form' => $form]),
                            ],
                            [
                                'label' => 'SEO',
                                'content' => $this->render('settings/_seo', ['model' => $model, 'form' => $form]),
                            ],
                            [
                                'label' => 'Соц. сети',
                                'content' => $this->render('settings/_social', ['model' => $model, 'form' => $form]),
                                'active' => '',
                            ],
                        ],
                    ]
                ) ?>
            </div>

        </div>
    </div>

<?php ActiveForm::end(); ?>


и приведу шаблон _seo.php

Код: Выделить всё

<?php
use yii\widgets\Pjax;
use yii\helpers\Html;

?>

<?php Pjax::begin(); ?>

    <div class="box">
        <?= $form->field($model, 'title'); ?>
        <?= $form->field($model, 'keywords'); ?>
        <?= $form->field($model, 'description')->textArea(['rows' => 4]); ?>
    </div>

<?= Html::a('<i class="fa fa-floppy-o fa-fw"></i> Сохранить', ['/backend/settings'], ['class' => 'btn btn-primary',
    'data' => [
        'data-method' => 'post'
    ],]) ?>

<?php Pjax::end(); ?>

<script>
    вт тут загвоздка,  как все поля послать?    понимаю что не тем путем иду
</script>
.
ភាសាខ្មែរ Yii2 - это кайф!
caHek2x
Сообщения: 1240
Зарегистрирован: 2016.04.12, 20:41

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение caHek2x »

кто так делает ... на каждой вкладке форма и сохранение ... живой вам пример vk ... человек зашел на вкладку отредактировал сохранил ... в таком как у вас случае тогда точно pjax не пойдет ....

да и вообще что происходит ... форма вокруг всех вкладок .. но в каждой вкладке есть ссылка сохранить ?) а если я не ошибаюсь data-method' => 'post генерирует форму с одной кнопкой или ajax посылает ? что это за велосипеды ?
Аватара пользователя
Akulenok
Сообщения: 437
Зарегистрирован: 2014.05.05, 18:32
Откуда: localhost

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Akulenok »

я и хочу сделать чтобы была одна форма и одна кнопка сохранить, тк у меня и было раньше, без pjax, максимально просто ибо все поля сохраняются в одно поле.

Поэтому мне надо делать без всяких аяксов, сохраняю и попасть на нужную вкладку, вопрос теперь как после сохранени и редиректа попасть на ту вкладку где я был
ភាសាខ្មែរ Yii2 - это кайф!
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение yiijeka »

как как, писал уже выше как
Onotole
Сообщения: 1808
Зарегистрирован: 2012.12.24, 12:49

Re: yii\bootstrap\Tabs и активные вкладки

Сообщение Onotole »

В контроллере не делайте редирект или рефреш
Закрыто