2016-02-27 66 views
0

我試圖將搜索結果返回到比執行搜索操作的位置更新的控制器。問題是Results永遠不可從CustomSearchResultPage.ss訪問。我已經爲我所認爲的事情添加了內聯評論,我在這裏想到了什麼?Silverstripe定製控制器數據/變量

// Customise content with results 
    $response = $this->customise(array(
     'Results' => $results ? $results->getResults() : '', 
    )); 

    if ($results) { 
     $response = $response->customise($results); 
    } 

    // Use CustomSearchResultPage.ss template 
    $templates = array('CustomSearchResultPage', 'Page'); 

    // Create a new CustomSearchResultPage page 
    $page = CustomSearchResultPage::get_one('CustomSearchResultPage'); 

    // Build a controller using the CustomSearchResultPage 
    $controller = CustomSearchResultPage_Controller::create($page); 

    // Add the custom data to the newly minted controller 
    $result = $controller->customise($response); 

    // Return the controller and tell it how to render 
    return $result->renderWith($templates); 

該網頁似乎呈現如預期只是變量始終是空的......

回答

0

你的解釋是有點難以遵循我害怕。所以,我正在回答我可以確定如下:

  1. 執行搜索。這需要加載一個控制器來這樣做。
  2. 定製當前控制器的結果
  3. RE - 自定義電流控制器。
  4. 設置當前(雙定製)控制器的模板。
  5. 無視以上所有。
  6. 獲取隨機頁面(或空記錄)。
  7. 爲空頁面創建控制器。
  8. 用自定義的當前控制器的定製控制器自定義新控制器。
  9. 返回該頁面,該頁面沒有顯示任何結果。

您只需要在步驟4停止(跳過步驟3),並返回自定義($ response)。

如果出於某種原因,您認爲您需要另一個控制器(但看起來很誇張,但是誰知道),那麼在返回之前創建並自定義這一個(僅)會更好。

由於您只使用了第二個控制器來呈現結果,因此該URL將不會發生任何更改或任何內容。整個事情似乎超出了要求。

一個更簡單的方式來呈現這一行動的結果很可能是:

return $this ->customise(['Results' => $results ? $results->getResults() : null]) ->renderWith(['CustomSearchResultPage', 'Page']);

(從我的頭頂,可能需要一點精煉)。

+0

糾正我,如果我錯了,但通過上面的方法,搜索結果將總是返回在'''Page_Controller'''上,最終我在'''CustomSearchResultPage_Controller'上返回結果相反 –