Version: current

     1 <?php
     2 /**
     3  * Сопутствующие рубрики к рубрике
     4  *
     5  * @author menedem
     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 extraStatics() {
    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 extraStatics() {}
    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      * @return DataObjectSet
    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             // !! TODO возможно добавить точку расширения для where, чтоб на конкретном сайте можно изменить условия подбора связанных товаров
    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. -