Silverstripe DataObjects as Pages第2部分教程 - 管理员复选框

时间:2012-01-30 23:09:46

标签: php content-management-system silverstripe

我正在使用DataObjects as Pages 2中的代码,因此您可以为在admin中的“产品”标签下创建的每个产品选择一个到多个类别。

我的问题是如何显示类别的父母页面(称为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,所以任何帮助都表示赞赏。

非常感谢。

萨姆

修改/更新

我设法使用以下代码将“类别”选项卡显示为“亲子”,例如Sale-Toyota,Sale-Honda,Rental-BMW,Rental-Toyota。然而,它们都是无序/随机显示的。有关如何正确分组的任何建议,例如所有销售都在一起,所有租赁在一起吗?

代码:将以下代码添加到CategoryPage.php

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

并将$ Categories-> map('ID','CheckboxSummary')添加到Product.php中复选框的选项

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

感谢:)

1 个答案:

答案 0 :(得分:1)

您可以为每个“父页面”构建一个复选框(确保设置正确的URLSegment):

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

<强>更新

关于使用你在更新的问题中提到的'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