Php Yii2使用url哈希(#)或片段从控制器重定向到特定选项卡

Php Yii2使用url哈希(#)或片段从控制器重定向到特定选项卡,php,twitter-bootstrap,yii2,Php,Twitter Bootstrap,Yii2,这是我表格中的相关代码: <?php $form = ActiveForm::begin ( [ 'id' => 'dynamic-form' , 'layout' => 'horizontal' , 'enableClientValidation' => true , 'enableAjaxValidation' => true ] ); ?> <div class="panel panel-default"> <div class

这是我表格中的相关代码:

<?php $form = ActiveForm::begin ( [ 'id' => 'dynamic-form' , 'layout' => 'horizontal' , 'enableClientValidation' => true , 'enableAjaxValidation' => true ] ); ?>
<div class="panel panel-default">
    <div class="panel-body nav-tabs-animate nav-tabs-horizontal">
        <ul class="nav nav-tabs nav-tabs-line" data-plugin="nav-tabs" role="tablist">
            <li class="active" role="presentation"><a data-toggle="tab" href="#information" aria-controls="information" role="tab">
                    <?= Yii::t ( 'app' , 'Information' ); ?></a></li>    
            <li role="presentation"><a data-toggle="tab" href="#rest_days" aria-controls="rest_days" role="tab">
                    <?= Yii::t ( 'app' , 'Rest Days' ); ?></a></li>
            <li role="presentation"><a data-toggle="tab" href="#instructor_schedule" aria-controls="instructor_schedule" role="tab">
                    <?= Yii::t ( 'app' , 'Instructor Schedule' ); ?></a></li>
        </ul>
    </div>
</div>
我想重定向到选项卡-
讲师计划
,它将正确重定向到
用户/更新讲师
,但不会转到特定选项卡,而是第一个选项卡

我怎样才能做到这一点

更新 查看文件-
update\u讲师.php

use yii\widgets\Pjax;
/* @var $this yii\web\View */
/* @var $model app\models\User */
$tab='';
if (isset($_GET["tab"])){
$tab= $_GET['tab'];
}
if(!empty($tab)){
$this->registerJs ( "$('#dynamic-form .nav-tabs a[href=\"#".$tab."\"]').tab('show');" , yii\web\View::POS_READY );
}

$this->title = $title . ' ' . $model->first_name . ' ' . $model->last_name;
$this->params['breadcrumbs'][] = ['label' => 'Instructors', 'url' => ['instructor']];
//$this->params['breadcrumbs'][] = ['label' => $model->first_name.' '.$model->last_name, 'url' => ['view', 'id' => $model->id]];
$this->params['breadcrumbs'][] = $this->title;
$manager = User::find()->where(['user_role' => 'manager'])->andwhere(['status' => 10])->all();
$manager_array = ArrayHelper::map($manager, 'id',
    function ($model) {
        return $model->first_name . ' ' . $model->last_name . '(' . $model->manager->location['location_title'] . ')';
    });
?>



<?php $form = ActiveForm::begin(['id' => 'dynamic-form', 'layout' => 'horizontal', 'enableClientValidation' => true, 'enableAjaxValidation' => true]);?>
  <div class="panel panel-default">
      <div class="panel-body nav-tabs-animate nav-tabs-horizontal">
      <ul class="nav nav-tabs nav-tabs-line" data-plugin="nav-tabs" role="tablist">
        <li class="active" role="presentation"><a data-toggle="tab" href="#information" aria-controls="information" role="tab">
          <?=Yii::t('app', 'Information');?>
        </a></li>

        <li role="presentation"><a data-toggle="tab" href="#rest_days" aria-controls="rest_days" role="tab">
          <?=Yii::t('app', 'Rest Days');?>
        </a></li>
        <li role="presentation"><a data-toggle="tab" href="#instructor_schedule" aria-controls="instructor_schedule" role="tab">
          <?=Yii::t('app', 'Instructor Schedule');?>
        </a></li>
        <li role="presentation"><a data-toggle="tab" href="#custom_break_time" aria-controls="custom_break_time" role="tab">
          <?=Yii::t('app', 'Break Time');?>
        </a></li>


......

<div class="tab-content"> <br clear="all">
        <!-- start information tab -->
        <div class="tab-pane active animation-slide-left" id="information" role="tabpanel">
.....

<?php
if (!$model->isNewRecord) {
    ?>
        <div class="tab-pane animation-slide-left" id="rest_days" role="tabpanel">
          <?php DynamicFormWidget::begin([
....

<?php
if (!$model->isNewRecord) {
    ?>
          <div class="tab-pane animation-slide-left" id="instructor_schedule" role="tabpanel">
              <?php $this->title = Yii::t('app', 'Class Durations');
              $this->params['breadcrumbs'][] = $this->title;
            ?>

......

<?php
if (!$model->isNewRecord) { ?>
<div class="tab-pane animation-slide-left" id="custom_break_time" role="tabpanel">
 <?php   $this->title = Yii::t('app', 'Custom Break Times');
$this->params['breadcrumbs'][] = $this->title;
?>

.....
public function actionUpdate($id,$tab='information') {
        $model = $this->findModel($id);

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            Yii::$app->getSession()->setFlash('successClass');

            // return $this->redirect(['view', 'id' => $model->id]);
                        return $this->redirect(['user/update-instructor', 'id' => $model->instructor_id, 'tab' => 'instructor_schedule']);
        }

        return $this->render('update', [
            'model' => $model,                        
        ]);
    }

如果控制器知道要打开哪个选项卡,请将其作为参数传递给视图:

return $this->render('update', [
        'model' => $model,
        'activeTab' => ...
    ]);
然后在你看来,按照

<li class="<?= $activeTab == 'xyz' ? 'active' : '' ?>" ...

最重要的是,您的散列
#
片段
在浏览器中解析,并且从未发送到服务器,但可以通过javascript访问

如果可以将
片段
更改为
参数
,请执行以下操作

我假设您使用的是引导选项卡

  • 将您的
    actionUpdate($id)
    更改为
    actionUpdate($id,$tab='information')

  • 更改重定向到的代码

    return $this->redirect(
        [
            'user/update-instructor', 
            'id' => $model->instructor_id, 
            'tab' => 'instructor_schedule'
        ]
    );
    
  • 然后在视图文件中添加以下内容

    $js=<<<JS 
         $('#dynamic-form .nav-tabs a[href=\"#".$tab."\"]').tab('show');        
    JS;
    
    $this->registerJs ( $js , yii\web\View::POS_READY );
    
    账单呢

    <div class="tab-pane active animation-slide-left" id="information" role="tabpanel">
    

    除了@Muhammed.Omer.Aslam answer,由于JQUERY的不同版本,您可能会得到如下控制台错误:

    Error: Syntax error, unrecognized expression: ....
    
    我自己在用

    $js=<<<JS 
              $('#dynamic-form .nav-tabs a[href="#$tab\\"]').tab('show');
     JS;
    
    Reference  https://github.com/jquery/jquery/issues/2885
    

    $js=不,我认为有一些误解。我的初始视图是tab3中的gridview。从那里我点击编辑,表单显示在另一个窗口中。当我点击submit/update时,它会重定向回tab3<代码>$this->重定向(['用户/更新讲师','id'=>$model->讲师id'.'''=>'讲师计划'])
    那么实际上tab3=
    讲师计划
    您是否在使用tab
    yii\jui\Tabs
    小部件?您好,Omer-是的,这确实有效,但有一个小问题,比如-当它重定向时,它会立即显示第一个选项卡,然后在预期的选项卡上移动。要访问
    $tab
    我使用了-
    $tab=$\u GET['tab']
    是否可以解决此问题。是否可以添加所有代码(包括javascript),因为我认为您正在使用
    .show()
    激活第一个选项卡,然后根据
    $tab
    值调用第二个选项卡,当我测试它时,它没有显示除所选的@JoshiOk之外的任何其他选项卡,我已经更新了查看所有相关部分以及控制器操作。如果你需要更多的信息,请告诉我。谢谢你。太棒了。这正确地解决了问题。嗨,奥马尔,我在另一个例子中遇到了类似的问题。你能看一下吗-
    Error: Syntax error, unrecognized expression: ....
    
    $js=<<<JS 
              $('#dynamic-form .nav-tabs a[href="#$tab\\"]').tab('show');
     JS;
    
    Reference  https://github.com/jquery/jquery/issues/2885