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; } /** * Set the css id * @chainable */ public function css_id($css_id) { $this->css_id = $css_id; return $this; } } /** * Menu element that provides a link to a new page. */ class Menu_Element_Link extends Menu_Element { public function __toString() { if (isset($this->css_id) && !empty($this->css_id)) { $css_id = " id=\"$this->css_id\""; } else { $css_id = ""; } 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 = false; /** * 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 "root": $menu = new Menu(); $menu->is_root = true; return $menu; case "submenu": return new Menu(); default: throw Exception("@todo UNKNOWN_MENU_TYPE"); } } public function __construct() { $this->elements = array(); } /** * 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; } }