0

我的问题是:

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

我刚刚在视图文件中为此编写了一个函数,如下所示,但我不知道如何使用这个创建的链接来工作。(变量查询为 $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 要求的查看任务布局组件。一些用于过滤或搜索。所以我不能对表单使用 GET 方法:/

4

1 回答 1

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" ...

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

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

于 2013-09-12T07:10:36.530 回答