joomla - 如何在地址栏上的链接中显示搜索查询

时间:2013-09-11 15:21:26

标签: php jquery search joomla filter

我的问题是:

单击搜索按钮后,如何在链接中显示搜索/过滤/排序字段。我有我的模型 - 控制器 - 视图 - 布局文件。在模型文件中,requred字段在populateState函数中设置为状态变量,并由buildWhereQuery函数检索,以使其在querystring中可用。到目前为止,一切都是正确的。但是从现在开始,我的问题就是如果用户想要将列表链接发送到他/她的边缘以显示相同的列表。我需要设置此门户的链接,但我不知道该怎么做。

我刚刚在视图文件中为此编写了一个函数,但我无法弄清楚如何使用此创建的链接工作。 (变量查询是$ query = $ this-> get('state');格式为JObject。

protected function preQuery($query){
    $params = array();
    foreach ($query as $key => $value) {
        if(!isset($query->$key) || empty($value) || $value == ''){
            unset($query->$key);
        }else{
            if(strpos($key,'filter') || in_array($key, array('limit','limitstart','order','order_Dir'))){
                $params[$key] = $value;
            }else{
                unset($query->$key);
            }                    
        }
    }
    $que = JURI::buildQuery($params);
    $cur = JURI::current();
    return (strpos($cur,'?') ? ($cur.'&'. $que) : ($cur.'?'.$que));
}

修改

布局文件包含的表单包含所有用于重定向的输入,例如视图任务布局组件为joomla requred。一些用于过滤或搜索。所以我无法将GET方法用于表单:/​​

1 个答案:

答案 0 :(得分:0)

搜索从表单开始。现在你有两个案例。

如果您直接从表单调用视图,只需将表单方法更改为GET(而不是默认的POST),这样您的表单将如下所示

<form method="GET" ....

如果您正在调用控制器,而控制器又重定向到表单,则可能需要更改某些逻辑。在后一种情况下,使用POST或GET调用控制器并不重要;但控制器不能设置用户状态变量,而是将参数添加到要重定向到的URL

setRedirect(JRoute::_("index.php?option=com_something&view=results&param1=SOMETHING etc.

评论后的最后一个选择:只在URL中包含一些字段,假设您直接指向视图:

<form method="POST" action="<?php echo JRoute::_("index.php?option=com_yourcomponent&view=yourview&explicit_param_1=something&explicit_param_2=somethingelse
<input type="hidden" ...

但这会带来更多问题,因为页面应该能够在有和没有额外参数的情况下运行,如果用户共享网址则不会出现。你可能最好在没有重定向的(子)控制器中处理它(只是在调用控制器函数中实例化视图及其显示方法)。

请记住,您可以使用语法task = subcontroller.task来缩短网址。