/** * append node, reuses existing node if it's already there. * @param $id item id * @param array $properties named array property list, there should be setters for every option * @return MenuItem */ public function append($id, $properties = array()) { // items should be unique by id, search children for given id first $newMenuItem = null; $isNew = false; foreach ($this->children as $nodeKey => $node) { if ($node->getId() == $id) { $newMenuItem = $node; } } if ($newMenuItem == null) { // create new menu item $newMenuItem = new MenuItem($id, $this); $isNew = true; } // set attributes foreach ($properties as $propname => $propvalue) { $methodName = $newMenuItem->getXmlPropertySetterName($propname); $newMenuItem->{$methodName}((string) $propvalue); } $orderNum = sprintf("%05d", $newMenuItem->getOrder()); $idx = $orderNum . "_" . $newMenuItem->id; if ($isNew) { // new item, add to child list $this->children[$idx] = $newMenuItem; } else { // update existing, if the sort order changed, move this child into the new position foreach ($this->children as $key => $node) { if ($node == $newMenuItem && $key != $idx) { unset($this->children[$key]); $this->children[$idx] = $newMenuItem; break; } } } return $newMenuItem; }
/** * append node, reuses existing node if it's already there. * @param $id item id * @param array $properties named array property list, there should be setters for every option * @return MenuItem */ public function append($id, $properties = array()) { // items should be unique by id, search children for given id first $newMenuItem = null; $isNew = false; foreach ($this->children as $nodeKey => $node) { if ($node->getId() == $id) { $newMenuItem = $node; } } if ($newMenuItem == null) { // create new menu item $newMenuItem = new MenuItem($id, $this); $isNew = true; } // set attributes foreach ($properties as $propname => $propvalue) { $methodName = $newMenuItem->getXmlPropertySetterName($propname); if ($methodName != null) { $newMenuItem->{$methodName}((string) $propvalue); } } if ($isNew) { // new item, add to child list $orderNum = sprintf("%05d", $newMenuItem->getOrder()); $this->children[$orderNum . "_" . $newMenuItem->id] = $newMenuItem; } return $newMenuItem; }