1

我想知道 atk 4.2 中是否有一种方法可以根据提交搜索表单后找到的搜索结果选择特定选项卡。

如果有一个简单的搜索表单(搜索用户给出的关键字或条件),它会更新许多 GRID,每个 GRID 在其自己的选项卡下。
这些 GRID 在用户提交表单后得到更新,如下所述:实现更新网格或列表的搜索表单

现在,当网格没有搜索结果时,它会显示“未找到记录”,这对用户来说有点混乱,最好自动向用户显示一个确实有搜索结果的网格......

这个想法是选择带有结果的网格的第一个选项卡,并可能隐藏返回空搜索结果的网格的选项卡,这可能吗?

谢谢

4

2 回答 2

2

看看这个——也许它对你有用。

/**
 * Set specific tab as selected
 * $id  is zero-based index of the tab to be selected or the id selector
 *      of the panel the tab is associated with (the tab's href fragment
 *      identifier, e.g. hash, points to the panel's id).
 */
function setSelect($id){
    $this->js(true)->tabs('select',$id);
}

您可以使用这种新方法扩展 /atk4/lib/View/Tabs/jUItabs.php 或简单地自己使用一行 JS。

于 2012-10-04T22:09:27.577 回答
0

是的,我认为这是可能的,但是通过事件触发可能很难通过搜索条件。

  1. 创建一个页面“我的/搜索”
  2. 添加搜索表单$form=..
  3. 添加标签$tabs=..
  4. 提交表单后,您将需要重新加载选项卡:

    if($form->isSubmitted()){ $q=$form->get('search'); $tabs->js()->reload(array('q'=>$q))->execute(); }

5 接下来填充选项卡,但您需要先获取结果。

$tab1_data = $this->add('Model_Data1');
$tab1_data ->addCondition('name','like','%'.$_GET['q'].'%');
$tab1_count = $tab1_data->count()->getOne();
if($tab1_count){
    $tabs->addTab('Data1 ('.$tab1_count.')')
        ->add('CRUD')->setModel($tab1_data);
}

如果没有找到结果,您可能需要检查并添加至少一个选项卡以显示消息。您还可以使用选项卡内的计数,非常方便。

于 2012-09-04T00:44:04.370 回答