private function _onPageChanged($event, Kwf_Component_Data $data, Kwf_Component_Data $parentData) { $menuLevel = $this->_level; if (!$event instanceof Kwf_Component_Event_Page_ShowInMenuChanged && !$data->isShownInMenu()) { //ignore pages not shown in menu return; } //find category + level the changed page is in $level = 0; $categoryData = $parentData; if ($data->isPage) { $level++; } while ($categoryData && !Kwc_Abstract::getFlag($categoryData->componentClass, 'menuCategory')) { if ($categoryData->isPage) { $level++; } $categoryData = $categoryData->parent; } if (is_int($menuLevel)) { //numeric menu level if ($level + 1 >= $menuLevel && $level + 1 <= $menuLevel + $this->_numLevels) { $l = $level + 1; if ($l != $menuLevel) { if ($data->isPage) { $l--; } $data = $parentData; while ($data) { if ($l == $menuLevel) { break; } if ($data->isPage) { $l--; } $data = $data->parent; } } else { $data = $parentData; } $data = $data->getPageOrRoot(); $menus = $data->getRecursiveChildComponents(array('componentClass' => $this->_class)); foreach ($menus as $m) { $this->_onMenuChanged($event, $m); } } } else { //category menu level if (!$categoryData) { return; } //$cat is the category id of changed page $cat = Kwc_Abstract::getFlag($categoryData->componentClass, 'menuCategory'); if ($cat) { if ($cat === true) { $cat = $categoryData->id; } } if ($cat === $menuLevel && $level >= 1 && $level <= $this->_numLevels) { //this menu shows this changed and not in a lower level $s = array('subroot' => $data); foreach (Kwc_Abstract::getComponentClasses() as $cls) { //get all categories $c = Kwc_Abstract::getFlag($cls, 'menuCategory'); $cmps = array(); //get category that changed if ($c === true) { $cmps = Kwf_Component_Data_Root::getInstance()->getComponentsByClass($cls, array('id' => $cat, 'subRoot' => $data)); } else { if ($c == $cat) { $cmps = Kwf_Component_Data_Root::getInstance()->getComponentsByClass($cls, array('subRoot' => $data)); } else { continue; } } foreach ($cmps as $i) { //get menu that changed foreach ($i->getRecursiveChildComponents(array('componentClass' => $this->_class)) as $m) { //do what needs to be done if menu item changed $this->_onMenuChanged($event, $m); } } } } } }