1 <?php
2 3 4 5 6
7 class CatalogCatalogLinkedDecorator extends DataObjectDecorator {
8 static function add_extension() {
9 Object::add_extension('Product', 'ProductCatalogCatalogLinkedDecorator');
10 Object::add_extension('Catalog', 'CatalogCatalogLinkedDecorator');
11 }
12
13 function () {
14 return array(
15 'many_many' => array(
16 'LinkedCatalogs' => 'Catalog',
17 )
18 );
19 }
20
21 function updateCMSFields(FieldSet &$fields) {
22 if ($this->owner->ClassName == 'Catalog') {
23 $m = new ManyManyComplexTableField(
24 $this->owner,
25 'LinkedCatalogs',
26 'Catalog',
27 array('Title' => 'Каталог'),
28 null,
29 '"ClassName" = \'Catalog\' AND "SiteTree"."ID" <> ' . $this->owner->ID
30 );
31 $m->setPermissions(array());
32 $m->setPageSize(300);
33 $fields->findOrMakeTab('Root.Content.LinkedCatalogs', 'Связанные рубрики');
34 $fields->addFieldToTab("Root.Content.LinkedCatalogs", $m);
35 }
36 }
37 }
38
39 class ProductCatalogCatalogLinkedDecorator extends DataObjectDecorator {
40
41 function () {}
42
43 static $showProductCount = 10;
44
45 static function setShowProductCount($value) {
46 self::$showProductCount = $value;
47 }
48
49 static function getShowProductCount() {
50 return self::$showProductCount;
51 }
52
53 54 55 56 57
58 function LinkedProducts() {
59 $rs = false;
60 if (($rubrics = $this->owner->Parent()->LinkedCatalogs()) && $rubrics->Count()) {
61 $IDs = array();
62 foreach($rubrics as $rubric) {
63 $IDs[] = $rubric->ID;
64 $descendantIDs = $rubric->getDescendantIDList();
65 $IDs = array_merge($IDs, $descendantIDs);
66 }
67 $IDs = array_unique($IDs);
68
69 $rs = Dataobject::get('Product', "ParentID IN (".implode(',', $IDs).")", 'RAND()', "", self::$showProductCount);
70 }
71 return $rs;
72 }
73 }
[Raise a SilverStripe Framework issue/bug](https://github.com/silverstripe/silverstripe-framework/issues/new)
- [Raise a SilverStripe CMS issue/bug](https://github.com/silverstripe/silverstripe-cms/issues/new)
- Please use the
Silverstripe Forums to ask development related questions.
-