public function onCacheCallback($row)
 {
     if ($row instanceof Kwf_Db_Table_Row && $row->getTable() instanceof Kwc_Directories_CategoryTree_Directory_ItemsToCategoriesModel) {
         $info = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData(get_class($row->getTable()), $schema = 'Category');
         $table = new $info['refTableName']();
         $parentRow = $table->find($row->category_id)->current();
         do {
             foreach ($this->_getRemoveCacheViewComponents() as $c) {
                 $cacheId = $c->getItemCountCacheId($parentRow);
                 Kwc_Directories_CategoryTree_View_Component::getItemCountCache()->remove($cacheId);
             }
             $parentRow = $parentRow->findParentRow($info['refTableName']);
         } while ($parentRow);
     } else {
         if ($row instanceof Kwf_Db_Table_Row && $row->getTable() instanceof Kwc_Directories_CategoryTree_Directory_Model) {
             $parentRow = $row;
             do {
                 foreach ($this->_getRemoveCacheViewComponents() as $c) {
                     $cacheId = $c->getItemCountCacheId($parentRow);
                     Kwc_Directories_CategoryTree_View_Component::getItemCountCache()->remove($cacheId);
                 }
                 $parentRow = $parentRow->findParentRow($row->getTable()->info(Zend_Db_Table_Abstract::NAME));
             } while ($parentRow);
         } else {
             // Todo: wenn item in der admin bearbeitet wird (zB visible auf 0),
             // dann müsste man es neu berechnen. wird atm durch die cacheLifetime kompensiert
         }
     }
 }
 public static function getSettings($param = null)
 {
     $ret = parent::getSettings($param);
     $ret['generators']['child']['component']['view'] = 'Kwc_Shop_Products_View_Component';
     $ret['generators']['addToCart'] = array('class' => 'Kwf_Component_Generator_Table', 'component' => 'Kwc_Shop_Products_Directory_AddToCart_Component', 'model' => 'Kwc_Shop_Products');
     return $ret;
 }
 public function getSelect()
 {
     $ret = parent::getSelect();
     $categoryDirectory = $this->getItemDirectory()->getComponent();
     $refData = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData(Kwc_Abstract::getSetting(get_class($categoryDirectory), 'categoryToItemModelName'), 'Category');
     $ret->join($refData['tableName'], "{$refData['refTableName']}.{$refData['refItemColumn']} = " . "{$refData['tableName']}.{$refData['itemColumn']}", array());
     $refDataItem = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData(Kwc_Abstract::getSetting(get_class($categoryDirectory), 'categoryToItemModelName'), 'Item');
     $ret->where($refDataItem['tableName'] . '.' . $refDataItem['itemColumn'] . ' = ?', $this->_getItemDetail()->row->id);
     return $ret;
 }
 /**
  * @return array $relatedEntries
  */
 private function _getRelatedCompaniesLinks()
 {
     if (!is_null($this->_relatedCache)) {
         return $this->_relatedCache;
     }
     $itemRow = $this->getData()->parent->row;
     $categoryDirectory = $this->_getCategoryDirectory();
     $connectTableName = Kwc_Abstract::getSetting($categoryDirectory->componentClass, 'categoryToItemModelName');
     $linkLimit = $this->_getSetting('linkLimit');
     $categoryReference = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData($connectTableName, 'Category');
     $categoryIds = array();
     $categoryIdsRowset = $itemRow->getRow()->findDependentRowset($connectTableName);
     foreach ($categoryIdsRowset as $categoryIdRow) {
         $categoryIds[] = $categoryIdRow->{$categoryReference['itemColumn']};
     }
     if ($categoryIds) {
         $itemReference = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData($connectTableName, 'Item');
         // anzahl holen
         $s = new Zend_Db_Select(Kwf_Registry::get('db'));
         $s->from($itemReference['tableName'], $itemReference['itemColumn']);
         $s->where($categoryReference['itemColumn'] . ' IN(' . implode(',', $categoryIds) . ')');
         $s->order($itemReference['tableName'] . '.id ASC');
         $rowset = $s->query()->fetchAll();
         // eigene position ermitteln und rauslöschen
         $selfPos = 0;
         $i = 0;
         foreach ($rowset as $k => $row) {
             if ($row[$itemReference['itemColumn']] == $itemRow->id) {
                 if (!$selfPos) {
                     $selfPos = $i;
                 }
                 unset($rowset[$k]);
             }
             $i++;
         }
         $rowset = array_values($rowset);
         $categoryRowCount = count($rowset);
         $itemIds = $ret = array();
         if ($categoryRowCount) {
             for ($i = 0; $i < $linkLimit; $i++) {
                 $offset = ($selfPos + floor($categoryRowCount / $linkLimit) * $i) % $categoryRowCount;
                 $itemIds[] = $rowset[$offset][$itemReference['itemColumn']];
             }
             $itemDirectory = $this->getData()->parent->parent;
             $select = $itemDirectory->getGenerator('detail')->select($itemDirectory);
             $select->where('id IN(' . implode(',', $itemIds) . ')');
             $ret = $itemDirectory->getChildComponents($select);
         }
         $this->_relatedCache = $ret;
         return $ret;
     }
     $this->_relatedCache = array();
     return array();
 }
 public function getSelect()
 {
     $select = parent::getSelect();
     if (!$select) {
         return null;
     }
     $s = new Kwf_Component_Select();
     $s->whereGenerator('categories');
     $tableName = Kwc_Abstract::getSetting($this->getItemDirectory()->getChildComponent($s)->componentClass, 'categoryToItemModelName');
     $refData = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData($tableName, 'Item');
     $select->join($refData['tableName'], $refData['tableName'] . '.' . $refData['itemColumn'] . '=' . $refData['refTableName'] . '.' . $refData['refItemColumn'], array());
     $ids = $this->getCategoryIds();
     if (!$ids) {
         return null;
     }
     $select->where($refData['tableName'] . '.category_id IN (' . implode(',', $ids) . ')');
     return $select;
 }
 protected function _getItems($select = null)
 {
     $items = parent::_getItems($select);
     $cache = self::getItemCountCache();
     foreach ($items as &$item) {
         $cacheId = $this->getItemCountCacheId($item->row);
         if (($item->listCount = $cache->load($cacheId)) == false) {
             if (!isset($itemDirectory)) {
                 $itemDirectory = $this->getData()->parent->getComponent()->getItemDirectory();
             }
             if (!isset($connectData)) {
                 $tableName = Kwc_Abstract::getSetting($itemDirectory->componentClass, 'categoryToItemModelName');
                 $connectData = Kwc_Directories_Category_Detail_List_Component::getTableReferenceData($tableName, 'Item');
             }
             if (!isset($directoryComponent)) {
                 $directoryComponent = $this->getData()->parent->getComponent()->getItemDirectory()->parent->getComponent();
             }
             $categoryIds = $this->_getCountCategoryIds($item);
             $select = $directoryComponent->getSelect();
             if (!Kwc_Abstract::getSetting(get_class($directoryComponent), 'generatorJoins')) {
                 $select->join($connectData['tableName'], "{$connectData['refTableName']}.{$connectData['refItemColumn']} = {$connectData['tableName']}.{$connectData['itemColumn']}", array());
             }
             $select->where("{$connectData['tableName']}.category_id IN(" . implode(',', $categoryIds) . ")");
             $item->listCount = $directoryComponent->getData()->countChildComponents($select);
             $cache->save($item->listCount, $cacheId);
         }
     }
     return $items;
 }
 public static function getSettings()
 {
     $ret = parent::getSettings();
     $ret['generators']['child']['component']['view'] = 'Kwc_Directories_AjaxView_View_Component';
     return $ret;
 }
 public static function getSettings($param = null)
 {
     $ret = parent::getSettings($param);
     $ret['generators']['feed'] = array('class' => 'Kwf_Component_Generator_Page_Static', 'component' => 'Kwc_Blog_List_Feed_Component', 'name' => trlKwfStatic('Feed'));
     return $ret;
 }
 public static function getSettings()
 {
     $ret = parent::getSettings();
     $ret['generators']['child']['component']['view'] = 'Kwc_ArticlesCategory_Directory_View_Component';
     return $ret;
 }