Учебное пособие по Silverstripe DataObjects as Pages Part 2 - флажок Admin - PullRequest
0 голосов
/ 31 января 2012

Я использую код из DataObjects как страницы 2 , поэтому вы можете выбрать одну или несколько категорий для каждого продукта, который вы создали на вкладке «Продукт» в админке.

Мой вопрос: как я могу показать заголовки родительских страниц (они называются ProductsList.php) для категорий? Пожалуйста, смотрите изображение для деталей enter image description here

Или вот объяснение: потому что все мои страницы категорий принадлежат одному или нескольким родителям, а некоторые страницы категорий повторяются на сайте, например, Toyota и Honda. Мне бы хотелось, чтобы в заголовках родительской страницы отображались, например, флажки «Продажа и аренда» под флажками «Категория», чтобы администратор знал, какие категории следует выбирать.

Вот некоторый связанный код для поля флажков «Категории»:

 //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));

Я пытаюсь понять, как пройти через СС, поэтому любая помощь приветствуется.

Большое спасибо.

Sam

Редактировать / Update:

Мне удалось создать вкладку «Категории», чтобы она отображалась как «Родитель-ребенок», например, 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 Ответ

1 голос
/ 01 февраля 2012

вы можете создать один набор флажков для «родительской страницы» (убедитесь, что установлен правильный URLSegment):

$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

...