<?php
/**
* presentation models
*/
class MenuItem {
private $link;
private $text;
private $active;
public function getLink
() { return $this->link; } public function getText() { return $this->text; } public function isActive() { return $this->active; }
public function setLink
($link) { $this->link = $link; } public function setText($text) { $this->text = $text; }
public function setIsActive($active) { $this->active = $active; }
}
class Menu implements Iterator {
private $ptr;
private $menuItems = [];
public function add(MenuItem $item) {
$this->menuItems[] = $item;
}
$this->ptr = 0;
}
return $this->menuItems[$this->ptr];
}
return $this->ptr;
}
$this->ptr++;
}
function valid() {
return isset($this->menuItems[$this->ptr]); }
public function __construct() {
$this->ptr = 0;
}
}
/**
* set up presentation models
*/
$menu = new Menu();
$menuItem1 = new MenuItem();
$menuItem1->setText('Home');
$menuItem1->setLink('#');
$menuItem1->setIsActive(true);
$menuItem2 = new MenuItem();
$menuItem2->setText('Other');
$menuItem2->setLink('#');
$menuItem2->setIsActive(false);
//...
$menu->add($menuItem1);
$menu->add($menuItem2);
/**
* Render in view
*/
?>
<ul>
<?php foreach ($menu as $menuItem): ?>
<li class="
<?= $menuItem->isActive() ?
'active' :'passive' ?>"><a href="
<?= $menuItem->getLink() ?>">
<?= $menuItem->getText() ?></a></li>
<?php endforeach; ?>
</ul>