0

我将DataObjects 中的代码用作 Pages 2,因此您可以为您在管理员的 Product 选项卡下创建的每个产品选择一个到多个类别。

我的问题是如何显示类别的父页面(称为 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')));

谢谢:)

4

1 回答 1

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

于 2012-02-01T08:55:02.843 回答