1

我已尽力搜索具有类似问题的现有问题,但找不到。这是我的情况

我有一个名为 search 的控制器,它接受参数“搜索词”,当直接从 URL(如 www.xyz.com/search/red+car)调用此控制器时,它会返回结果,并且浏览器地址栏中的 URL 是 www.xyz。 com/search/red+car 但是当用户从具有相同术语的网页中提交搜索时,结果很好,但 URL 不反映搜索词。

如果我进行重定向,则表单 POST 数据将丢失,尽管在我的情况下重新提交 POST 也不是解决方案。我需要一种方法来更改 URL,以便它显示搜索词。

提前感谢您的帮助,请温柔,因为这是我的第一个问题。

@Vlakarados - 我正在尝试使用相同的控制器来提供来自发布数据和控制器参数的搜索结果。两者都可以正常工作,但是在网页上使用搜索表单时,搜索参数不会反映在 URL 中。

@Rakesh Shetty - 实际方法很长,但这里是根据发布数据和传递参数的压缩格式构建查询。用结果填充视图 渲染视图

4

2 回答 2

2

感谢大家提出各种解决方案。

我使用 jquery 来更改表单操作参数,现在当下拉选择更改时,值将附加到操作参数。我还从发布数据的一部分中取出了下拉列表。

有 2 个下拉列表,一个用于区域,另一个用于邮政编码。这种新方法适用于机器人下拉菜单,我现有的控制器代码无需任何重大更改即可工作。

当用户更改区域时,我使用以下 javascript 代码创建新的操作参数。邮政编码也是如此。

$("#cityname").change(function(){
    var action = $(this).val();
    alert(action);
    $("#searchform").attr("action", "search/" + action);
});

我想我无法清楚地解释我的情况,否则你们很久以前就会提出这个建议。

于 2012-07-05T01:59:41.130 回答
0

更好的方法是在你的控制器中:

function search($search_query) {

    // .. use your query as you normally would - display products, posts, messages
    $data = array('search_query' => $search_query);
    $this->load->view('search', $data);
}

// use this method as the form action
function search_proxy() {
    $search_query = $this->input->post('search');
    // if needed urlencode or other search query manipulation
    redirect('controller/search/'.$search_query);
}

这样您就不会遇到任何问题,并且只会使用您的 url 中的数据。

编辑:第二个选项是使用 JavaScript - 当用户提交表单时,更改表单的操作以将搜索到的查询包含在表单操作中

于 2012-07-04T08:50:26.560 回答