我正在尝试弄清楚如何将我的.ss页面中的值传递给我的控制器以获取我构建的自定义搜索过滤器。您的想法是单击此图像或表单按钮,然后页面将设置会话变量并刷新自身。在页面加载时,页面根据它在会话变量中读取的内容加载不同的信息。我可以使用URL参数完成同样的事情,但是我没有找到可以找到如何执行此操作的在线示例。
基本上我有这个作为我的php:
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 %>
此代码按原样运行。我无法弄清楚如何在.ss页面上添加一个可点击的按钮,它将重新加载页面并设置会话变量值。
如果我可以使用url参数实现这一点,那么它也可以工作,我只需要知道如何在.ss页面中设置它们以及如何在php中检索它们。
答案 0 :(得分:0)
创建一个SetFilter
函数,该函数将获取URL参数ID并将其设置为会话变量:
public function SetFilter() {
if($this->request->param('ID')) {
$_SESSION['mySearchTag'] = $this->request->param('ID');
}
return array();
}
确保您的SetFilter
功能已添加到控制器的$allowed_actions
:
static $allowed_actions = array (
'SetFilter'
);
此功能由您的页面链接调用,后跟/SetFilter/[your-filter]
。
在您的模板中,您将创建一个链接来创建此过滤器,如下所示:
<a href="{$Link}SetFilter/example" title="Filter articles by example">Filter articles by example</a>