在php运行时期间将片段添加到url

时间:2013-03-11 20:28:05

标签: php fragment

好的,这就是我的情况:我有一个带有5个jquery-ui标签的页面,其中3个包含一个表格,每个表格都是由php为数据生成的,每个表格都有一组输入要根据日期,每个表都有自己的表单和更新按钮。现在我想要实现的是,一旦我刷新并返回控制器,我想根据我按下的按钮添加相应的片段。

例如:如果我点击第一个标签中的更新按钮,我想添加#tabs-1,如果是第二个,那么我想添加#tabs-2。

现在我知道我能做到:

$_SERVER['SCRIPT_URI'] = $_SERVER['SCRIPT_URI'] . "#tabs-2";

很好,它给了我正确的网址,但如何让浏览器在运行时去那里?有没有办法做到这一点?

这是我的控制器的一部分,主要是控制器。

class PageOptimisationV2C {

public static function main() {
    $class = __CLASS__;
    $c = new $class;

    $c->get();
}

public function get() {
    $this->display();
}

private function display() {
    $tpl = new PageOptimisationV2V();

    $client = ConsulterClient::getClientByNoClient(isset($_GET['cid']) ? $_GET['cid'] : 0);
    $tpl->client = $client;

    if(isset($_GET['cid'])){

        $tpl->StatsLignesCellulaire = self::buildCellStatsReport();
    }

    $_SERVER['SCRIPT_URI'] = $_SERVER['SCRIPT_URI'] . "#tabs-2";


    $tpl->display();
} 
}

然后它继续显示页面。根据按下的提交按钮,获取页面片段的最佳解决方案是什么。

我试图让一个jsFiddle向你展示页面看起来如何,但它太乱了,无法使CSS正常工作。

感谢信息的每一个细节。

2 个答案:

答案 0 :(得分:1)

我知道用PHP执行此操作的唯一方法是进行重定向。

header('Location: ' . $_SERVER['REQUEST_URI'] .'#tabs-2');

这当然会导致另一个请求,并要求您对流程进行一些解决方法,但这是将新网址发送回浏览器的唯一方法。

虽然它不是运行时PHP方法,但您也可以只嵌入选择Javascript,例如:

var index = $.index($(<?PHP echo $tab; ?>));
$('#tabs ul').tabs('select', index);

并允许它完成正常的选择过程。

你也可以嵌入一个隐藏的元素,比如

<input type="hidden" name="tab-selected" id="tab-selected" value="tabs-2" />

并使用一些Javascript检查元素是否存在且是否有值,然后选择如下选项卡:

$(function() {
    if ($('#tab-selected').val()) {
        var index = $.index($('#tab-selected').val()));
        $('#tabs ul').tabs('select', index);
    }
});

答案 1 :(得分:0)

今天,凭借一种清新的头脑,我在阅读MWJump的答案时想到了别的事情......为什么不使用表单的action属性!这是有原因的!因此,对于我的每个表单(我的每个选项卡中都有一个),我将action属性作为相应选项卡的片段,以便第一个选项卡action="#tabs-1"和第二个action="#tabs2"等等...

我发现这个解决方案在这种特殊情况下是最简单和最简单的。