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; }