【问题标题】:joomla - How to show search query in link on addressbarjoomla - 如何在地址栏的链接中显示搜索查询
【发布时间】:2013-09-11 15:21:25
【问题描述】:

我的问题是:

点击搜索按钮后,如何让我的搜索/过滤/排序字段显示在链接中。我有我的模型控制器视图布局文件。在模型文件中,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 方法:/

【问题讨论】:

    标签: php jquery search joomla filter


    【解决方案1】:

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

    如果您直接从表单中调用视图,只需将表单方法更改为 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 来缩短您的网址。

    【讨论】:

    • 我正在使用主控制器和与视图相关的子控制器。我正在使用子控制器来查看特定任务。所以表单直接重定向页面,但有一些隐藏和不必要的字段不发送。这个功能在子控制器显示方式下有效吗?
    • 您可以混合使用:让表单方法为 POST,但在其操作中插入参数(我更新了答案)但它相当复杂
    • 我想当页面加载函数会生成像 index.php?option_component.JURI::buildQuery($params).'&Itemid='.$itemid 和一个 js 变量这样的 url 时我会使用 js将保留此内容并操作地址栏链接。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多