我的问题是:
单击搜索按钮后,如何在链接中显示搜索/过滤/排序字段。我有我的模型 - 控制器 - 视图 - 布局文件。在模型文件中,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方法用于表单:/
答案 0 :(得分:0)
搜索从表单开始。现在你有两个案例。
如果您直接从表单调用视图,只需将表单方法更改为GET(而不是默认的POST),这样您的表单将如下所示
<form method="GET" ....
如果您正在调用控制器,而控制器又重定向到表单,则可能需要更改某些逻辑。在后一种情况下,使用POST或GET调用控制器并不重要;但控制器不能设置用户状态变量,而是将参数添加到要重定向到的URL
setRedirect(JRoute::_("index.php?option=com_something&view=results¶m1=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来缩短网址。