示例#1
0
 /**
  * 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;
 }
示例#2
0
 /**
  * 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;
 }