我在前面的.html或.tpl页面中有以下内容:
<select name="" id="selectBox" class="fancyDrop" onchange="showFunc()">
<option selected></option>
<option value="20"><?php echo $this->translate('по 20');?></option>
<option value="50"><?php echo $this->translate('по 50');?></option>
<option value="100"><?php echo $this->translate('по 100');?></option>
<option value="<?php echo $this->totalValue;?>"><?php echo $this->translate('Text');?></option>
</select>
..........................................................................
<script type="text/javascript">
function showFunc() {
var selectBox = document.getElementById("selectBox");
var selectedValue = selectBox.options[selectBox.selectedIndex].value;
window.location.href = "<?php echo $this->url(); ?>?perPage=" + selectedValue;
}
</script>
我试图重定向到当前的控制器和操作,还设置了perPage的值,并在控制器中
$perPage = $this->_getParam('perPage', 25);
。上面的方法有效,但是很简单,例如在用户的浏览器http://website.net/index?perPage=25中显示。问题是用户可以更改此值,页面的行为也将更改。我试过使用
$this->_forward('route');
,但是这给了我一个重定向循环,而且_redirect($url, array $options = array())
我也想创建一个重定向循环。问题要从前端.html / .tpl文件重定向到特定的动作/控制器/模块,当选择1选项并设置参数
perPage
时,当前使用相同的动作/模块/控制器,以便用户看不到该值。 最佳答案
我认为将showFunc()
更新为window.location.href = window.location.href+"?perPage=" + selectedValue;
会将请求转发给
perPage作为选定选项的当前页面。但是这个方法有一些问题
当用户再次从转发的页面中选择选项时,将再次附加perPage
。因此,您必须首先删除perPage参数。
为此,您可以使用这些SO帖子中的任何方法。How can I delete a query string parameter in JavaScript?
,这样用户就不会看到此值。” =>据我了解,您不希望用户看到perPage值。然后您可以将所选值存储在Cookie中
并且可以从php使用$_COOKIE['perPage']
访问perPage值。 showFunc()将像
function showFunc() {
var selectBox = document.getElementById("selectBox");
var selectedValue = selectBox.options[selectBox.selectedIndex].value;
var d = new Date();
d.setTime(d.getTime() + (1*24*60*60*1000));
document.cookie = "perPage=" + selectedValue + "; " + "expires=" + d.toUTCString();;
window.location.href = window.location.href;
}
但是您将无法通过
$this->_getParam('perPage)
访问它。您必须使用$_COOKIE
。