我正在使用DataObjects as Pages 2中的代码,因此您可以为在admin中的“产品”标签下创建的每个产品选择一个到多个类别。
我的问题是如何显示类别的父母页面(称为ProductsList.php)标题?有关详细信息,请参阅图像
或者这里是解释:因为我的所有类别页面都在一个或多个父母的下面,并且一些类别页面在网站上重复,例如丰田和本田。我希望在“类别”复选框下显示父母页面的标题,例如“销售和租赁”,以便管理员知道要选择的重复类别。
以下是“类别”复选框字段的一些相关代码:
//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')));
感谢:)
答案 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