我在前面的.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

07-26 06:46