fork download
  1. <?php
  2. /**
  3.  * presentation models
  4.  */
  5. class MenuItem {
  6. private $link;
  7. private $text;
  8. private $active;
  9.  
  10. public function getLink() { return $this->link; }
  11. public function getText() { return $this->text; }
  12. public function isActive() { return $this->active; }
  13.  
  14. public function setLink($link) { $this->link = $link; }
  15. public function setText($text) { $this->text = $text; }
  16. public function setIsActive($active) { $this->active = $active; }
  17. }
  18.  
  19. class Menu implements Iterator {
  20. private $ptr;
  21. private $menuItems = [];
  22.  
  23. public function add(MenuItem $item) {
  24. $this->menuItems[] = $item;
  25. }
  26.  
  27. function rewind() {
  28. $this->ptr = 0;
  29. }
  30.  
  31. function current() {
  32. return $this->menuItems[$this->ptr];
  33. }
  34.  
  35. function key() {
  36. return $this->ptr;
  37. }
  38.  
  39. function next() {
  40. $this->ptr++;
  41. }
  42.  
  43. function valid() {
  44. return isset($this->menuItems[$this->ptr]);
  45. }
  46.  
  47. public function __construct() {
  48. $this->ptr = 0;
  49. }
  50. }
  51.  
  52. /**
  53.  * set up presentation models
  54.  */
  55. $menu = new Menu();
  56. $menuItem1 = new MenuItem();
  57. $menuItem1->setText('Home');
  58. $menuItem1->setLink('#');
  59. $menuItem1->setIsActive(true);
  60. $menuItem2 = new MenuItem();
  61. $menuItem2->setText('Other');
  62. $menuItem2->setLink('#');
  63. $menuItem2->setIsActive(false);
  64. //...
  65. $menu->add($menuItem1);
  66. $menu->add($menuItem2);
  67.  
  68. /**
  69.  * Render in view
  70. */
  71. ?>
  72. <ul>
  73. <?php foreach ($menu as $menuItem): ?>
  74. <li class="<?= $menuItem->isActive() ? 'active' :'passive' ?>"><a href="<?= $menuItem->getLink() ?>"><?= $menuItem->getText() ?></a></li>
  75. <?php endforeach; ?>
  76. </ul>
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
<ul>
	<li class="active"><a href="#">Home</a></li>
	<li class="passive"><a href="#">Other</a></li>
</ul>