2012-01-30 31 views
0

我使用的代碼來自DataObjects as Pages 2,因此您可以爲admin中的產品選項卡下創建的每個產品選擇一個到多個類別。Silverstripe DataObjects as Pages第2部分教程 - 管理複選框

我的問題是如何顯示家長頁面(它被稱爲ProductsList.php)類別的標題?請看詳細圖片enter image description here

或者這裏是解釋:因爲我的所有分類頁面都在一個或多個父母下,並且有些分類頁面在網站上重複,例如豐田和本田。我希望父母頁面的標題在類別複選框下顯示出售和出租,以便管理員知道選擇哪些重複類別。

下面是一些相關的代碼,類別複選框場:

//Relate to the category pages 
    static $belongs_many_many = array(
    'Categories' => 'CategoryPage' 
); 

//Categories 
    $Categories = DataObject::get('CategoryPage'); 
    $fields->addFieldToTab("Root.Categories", new CheckboxsetField('Categories', 'Categories', $Categories)); 

我試圖通過SS算出我的方式,所以任何幫助表示讚賞。

非常感謝。

山姆

編輯/更新:

我設法讓類別標籤顯示爲親子如銷售豐田,出售本田,租賃,寶馬,租賃豐田使用的代碼下面。然而,它們都是無序/隨機顯示的。關於如何正確分組他們的任何建議,例如,所有的銷售都在一起,所有的租賃在一起?

代碼:添加以下代碼CategoryPage.php

function CheckboxSummary(){ 
    return $this->Parent()->Title . ' - ' . $this->Title; 
} 

並添加$分類 - >地圖( 'ID', 'CheckboxSummary'),以在Product.php

$Categories = DataObject::get('CategoryPage'); 
$fields->addFieldToTab("Root.Categories", new CheckboxsetField('Categories', 'Categories', $Categories->map('ID', 'CheckboxSummary'))); 
的checkboxset選項

謝謝:)

回答

1

你可以建立每個 '父頁面'(確保有適當的URLSegment集)一個checkboxset:

$salePage = DataObject::get_one('Page', "URLSegment = 'sale'"); 
$Categories = $salePage->Children(); 
$fields->addFieldToTab("Root.Categories", new CheckboxsetField('Categories', 'Sale', $Categories)); 

UPDATE

使用「CheckboxSummary」你在更新的問題提到關於解決方案,最簡單的解決方案是使用「ASORT()」到你喂到CheckboxSetField數組排序:

$Categories = DataObject::get('CategoryPage'); 
$map = $Categories->map('ID', 'CheckboxSummary'); 
asort($map); 
$fields->addFieldToTab("Root.Categories", new CheckboxsetField('Categories', 'Categories', $map)); 

什麼ASORT()不,見http://php.net/manual/en/function.asort.php

+0

感謝Schellmax。我試過你的代碼,但是它出現了一個錯誤:「Uncaught Exception:Object - > __ call():xxx \ sapphire \ core \ Object的第724行的'DataObjectSet'中不存在方法'children'。 php我在你的代碼中添加的頁面是在Product Product.php的Product extends DataObject {}類中的。我該如何解決這個問題?還有人建議使用函數CheckboxSummary(){return $ this-> Parent() - > Title。 ' - '。 $ this-> Title;}但我不確定如何實現它。如果類別顯示如Sale-Toyota,Rental-Toyota如果更容易,我不介意。非常感謝您的幫助! :) – grumpypanda 2012-02-02 01:58:35

+0

我的錯,對不起。你必須通過DataObject :: get_one替換DataObject :: get - 我已經更新了上面的代碼。 – schellmax 2012-02-02 07:26:49

+0

謝謝S,我試過你的新代碼,但它只會顯示一個父代和它的子代類別(取決於我把代碼放在最後),例如只顯示Sale和它的子代,但不代表所有的父母和子代。但我設法展示父母子女,例如Sale-Toyota,Rental-Toyota,請參閱上面的編輯,但所有父母和類別都顯示無序,想法如何分組?不要擔心,如果它太複雜了,我只能忍受它。無論如何,非常感謝你的幫助!我非常感謝你爲我省下了你的時間。再次感謝! – grumpypanda 2012-02-03 01:57:12