2014-02-15 88 views
0

我想弄清楚如何將我的.ss頁面的值傳遞給我的控制器,以實現我構建的自定義搜索過濾器。這個想法是你點擊這個圖像或一個表單按鈕,然後頁面將設置一個會話變量並刷新自己。在頁面加載時,頁面根據會話變量中的內容加載不同的信息。我可以通過URL參數完成同樣的事情,但是在線沒有任何示例,我可以發現它們會告訴我如何執行此操作。Silverstripe會話或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中檢索它們。

回答

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>