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 "
";
}
}
/**
* Menu element that provides a pop-up dialog
*/
class Menu_Element_Dialog extends Menu_Element {
public function __toString() {
return "";
}
}
/**
* 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;
}
}