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=讲师计划
您是否在使用tabyii\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