Session Silverstripe会话或URL参数
我正在尝试找出如何将.ss页面中的值传递给我的控制器,以便生成自定义搜索筛选器。这个想法是你点击这个图像或者一个表单按钮,然后页面将设置一个会话变量并刷新自己。页面加载时,页面根据在会话变量中读取的内容加载不同的信息。我可以用URL参数完成同样的事情,但是我在网上找不到任何例子来说明如何做到这一点 基本上,我将此作为我的php:Session Silverstripe会话或URL参数,session,silverstripe,Session,Silverstripe,我正在尝试找出如何将.ss页面中的值传递给我的控制器,以便生成自定义搜索筛选器。这个想法是你点击这个图像或者一个表单按钮,然后页面将设置一个会话变量并刷新自己。页面加载时,页面根据在会话变量中读取的内容加载不同的信息。我可以用URL参数完成同样的事情,但是我在网上找不到任何例子来说明如何做到这一点 基本上,我将此作为我的php: class ArticleHolder_Controller extends Page_Controller { public function ValidateTyp
class ArticleHolder_Controller extends Page_Controller {
public function ValidateType(){
if(isset($_SESSION['mySearchTag']) && !empty($_SESSION['mySearchTag'])) {
$tag = $_SESSION['mySearchTag'];
}
else{
$tag='News';
}
$filter = $this::get()->filter('Filters:PartialMatch', $tag)->First();
if ($filter == NULL){
return NULL;
}
else{
$_SESSION['mySearchTag']=$tag;
return $this->PaginatedPages();
}
}
public function PaginatedPages(){
$paginatedItems = new PaginatedList($this->filterArticles($_SESSION['mySearchTag']), $this->request);
$paginatedItems->setPageLength(3);
return $paginatedItems;
}
public function filterArticles($tag){
return ArticlePage::get()->filter('category:PartialMatch', $tag)->sort('Date DESC');
}
}
我的.ss看起来像这样:
<% if ValidateType() %>
<ul>
<% loop $PaginatedPages %>
<li>
<div class="article">
<h2><a href="$Link" title="Read more on "{$Title}"">$Title</a></h2>
<h3>$Date</h3>
<img class="indent" src="$Photo.link" alt="image"/>
<p class="indent">$Teaser</p>
</div>
</li>
<% end_loop %>
</ul>
<% include Pagination %>
<% else %>
<p>SORRY NO RESULTS WERE FOUND</p>
<% end_if %>
-
$Date
$trister
抱歉,未找到任何结果
此代码按原样工作。我现在不知道如何在.ss页面上添加一个可单击的按钮,该按钮将重新加载页面并设置会话变量值
如果我可以通过url参数实现这一点,那么这也可以实现,我只需要知道如何在.ss页面中设置它们,以及如何在php中检索它们。创建一个
SetFilter
函数,该函数将获取url参数ID并将其设置为会话变量:
public function SetFilter() {
if($this->request->param('ID')) {
$_SESSION['mySearchTag'] = $this->request->param('ID');
}
return array();
}
确保将SetFilter
功能添加到控制器的$allowed\u actions
:
static $allowed_actions = array (
'SetFilter'
);
此函数由页面链接调用,后跟/SetFilter/[your filter]
在模板中,您可以创建一个链接来创建此过滤器,如下所示:
<a href="{$Link}SetFilter/example" title="Filter articles by example">Filter articles by example</a>