id = $id; return $this; } /** * Set the label * @chainable */ public function label($label) { $this->label = $label; return $this; } /** * Set the url * @chainable */ public function url($url) { $this->url = $url; return $this; } } /** * Menu element that provides a link to a new page. */ class Menu_Element_Link extends Menu_Element { public function __toString() { return "
  • url\">$this->label
  • "; } } /** * Menu element that provides a pop-up dialog */ class Menu_Element_Dialog extends Menu_Element { public function __toString() { return "
  • url\" " . "title=\"$this->label\">$this->label
  • "; } } /** * Root menu or submenu */ class Menu_Core extends Menu_Element { public $elements; public $is_root; /** * Return an instance of a Menu_Element * @chainable */ public static function factory($type) { switch($type) { case "link": return new Menu_Element_Link(); case "dialog": return new Menu_Element_Dialog(); case "submenu": return new Menu(); default: throw Exception("@todo UNKNOWN_MENU_TYPE"); } } public function __construct($is_root=false) { $this->elements = array(); $this->is_root = $is_root; } /** * Add a new element to this menu */ public function append($menu_element) { $this->elements[$menu_element->id] = $menu_element; return $this; } /** * Retrieve a Menu_Element by id */ public function get($id) { return $this->elements[$id]; } public function __toString() { $html = $this->is_root ? ""; return $html; } }