Silverstripe会话或URL参数

时间:2014-02-15 19:19:58

标签: session silverstripe

我正在尝试弄清楚如何将我的.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 %>

此代码按原样运行。我无法弄清楚如何在.ss页面上添加一个可点击的按钮,它将重新加载页面并设置会话变量值。

如果我可以使用url参数实现这一点,那么它也可以工作,我只需要知道如何在.ss页面中设置它们以及如何在php中检索它们。

1 个答案:

答案 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>