Session Silverstripe会话或URL参数

Session Silverstripe会话或URL参数,session,silverstripe,Session,Silverstripe,我正在尝试找出如何将.ss页面中的值传递给我的控制器,以便生成自定义搜索筛选器。这个想法是你点击这个图像或者一个表单按钮,然后页面将设置一个会话变量并刷新自己。页面加载时,页面根据在会话变量中读取的内容加载不同的信息。我可以用URL参数完成同样的事情,但是我在网上找不到任何例子来说明如何做到这一点 基本上,我将此作为我的php: class ArticleHolder_Controller extends Page_Controller { public function ValidateTyp

我正在尝试找出如何将.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 &quot;{$Title}&quot;">$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>