Navigation class
Reshad F op 04/11/2012 19:53:57:
hmm @Raoul als ik deze twee nu wil scheiden. moet/kan ik dan gewoon de item methods in een andere class zetten en de class aanroepen in mijn navigation constructor?
en vervolgens in mijn display(); methode de methodes ervan ook aanroepen?
of is hier een andere manier voor..
en vervolgens in mijn display(); methode de methodes ervan ook aanroepen?
of is hier een andere manier voor..
Opzetje:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
<?php
class Navigation
{
private $_items = null;
public function addChild(Navigation_Item $item)
{
$this->_items[] = $item;
}
public function render()
{
$html = '<ul>';
foreach($this->_items as $item)
{
$html .= $item->render();
}
$html .= '</ul>';
return $html;
}
}
class Navigation_Item
{
private $_link;
private $_text;
public function setLink($link)
{
$this->_link = $link;
}
public function setText($text)
{
$this->_text = $text;
}
public function getLink()
{
return $this->_link;
}
public function getText()
{
return $this->_text;
}
public function render()
{
return '<li><a href="' . $this->getLink() . '">' . $this->getText() . '</a>';
}
}
?>
class Navigation
{
private $_items = null;
public function addChild(Navigation_Item $item)
{
$this->_items[] = $item;
}
public function render()
{
$html = '<ul>';
foreach($this->_items as $item)
{
$html .= $item->render();
}
$html .= '</ul>';
return $html;
}
}
class Navigation_Item
{
private $_link;
private $_text;
public function setLink($link)
{
$this->_link = $link;
}
public function setText($text)
{
$this->_text = $text;
}
public function getLink()
{
return $this->_link;
}
public function getText()
{
return $this->_text;
}
public function render()
{
return '<li><a href="' . $this->getLink() . '">' . $this->getText() . '</a>';
}
}
?>
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
class NavigationItem implements NavigationItemInterface {
public $menu = null;
public function __construct() {
}
public function setMenuItem($items) {
$this->menuItem = $items;
}
public function getMenuItem($menu) {
return $menu;
}
public function display() {
if(is_array($this->menuItem))
{
foreach($this->menuItem as $val)
{
$menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($val) . '.php">' . $this->getMenuItem($val) . '</a></li>';
}
}
else{
$menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($this->menuItem) . '.php">' . $this->getMenuItem($this->menuItem) . '</a></li>';
}
return $menu;
}
}
?>
class NavigationItem implements NavigationItemInterface {
public $menu = null;
public function __construct() {
}
public function setMenuItem($items) {
$this->menuItem = $items;
}
public function getMenuItem($menu) {
return $menu;
}
public function display() {
if(is_array($this->menuItem))
{
foreach($this->menuItem as $val)
{
$menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($val) . '.php">' . $this->getMenuItem($val) . '</a></li>';
}
}
else{
$menu .= '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem($this->menuItem) . '.php">' . $this->getMenuItem($this->menuItem) . '</a></li>';
}
return $menu;
}
}
?>
en
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
<?php
class Navigation implements navigationInterface{
public $menu = null;
public $name = null;
public $klasse = null;
public $navItem = null;
public function __construct($name, $klasse) {
$this->name = $name;
$this->klasse = $klasse;
}
public function addChild(Navigation_Item $item)
{
$this->navItem[] = $item;
}
public function getName() {
return $this->name;
}
public function getClass() {
return $this->klasse;
}
public function display() {
$menu = '<nav class="' . $this->getName() . '"><ul>';
$navItem->display();
$menu .= '</ul></nav>';
return $menu;
}
}
?>
class Navigation implements navigationInterface{
public $menu = null;
public $name = null;
public $klasse = null;
public $navItem = null;
public function __construct($name, $klasse) {
$this->name = $name;
$this->klasse = $klasse;
}
public function addChild(Navigation_Item $item)
{
$this->navItem[] = $item;
}
public function getName() {
return $this->name;
}
public function getClass() {
return $this->klasse;
}
public function display() {
$menu = '<nav class="' . $this->getName() . '"><ul>';
$navItem->display();
$menu .= '</ul></nav>';
return $menu;
}
}
?>
Nogmaals: Loop je script eens rustig door en kijk of alle logica qua code wel klopt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
class NavigationItem implements NavigationItemInterface {
public $menu = null;
public $menuItem = null;
public function setMenuItem($items) {
$this->menuItem = $items;
}
public function getMenuItem() {
return $this->menuItem;
}
public function getClass() {
if(isset($_GET['page']) and $_GET['page'] == $this->getMenuItem() . '.php')
{
$class = 'current';
}
else
{
$class = '';
}
return $class;
}
public function display() {
return '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem() . '.php">' . $this->getMenuItem() . '</a></li>';
}
}
?>
class NavigationItem implements NavigationItemInterface {
public $menu = null;
public $menuItem = null;
public function setMenuItem($items) {
$this->menuItem = $items;
}
public function getMenuItem() {
return $this->menuItem;
}
public function getClass() {
if(isset($_GET['page']) and $_GET['page'] == $this->getMenuItem() . '.php')
{
$class = 'current';
}
else
{
$class = '';
}
return $class;
}
public function display() {
return '<li><a class="' . $this->getClass() . '" href="index.php?page=' . $this->getMenuItem() . '.php">' . $this->getMenuItem() . '</a></li>';
}
}
?>
en dan de navigation class
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
<?php
class Navigation implements navigationInterface{
public $menu = null;
public $name = null;
public $items = null;
public function __construct($name) {
$this->name = $name;
}
public function addChild(NavigationItem $item)
{
$this->items[] = $item;
}
public function getName() {
return $this->name;
}
public function display() {
$menu = '<nav class="' . $this->getName() . '"><ul>';
foreach ($this->items as $item) {
$menu.= $item->display();
}
$menu .= '</ul></nav>';
return $menu;
}
}
?>
class Navigation implements navigationInterface{
public $menu = null;
public $name = null;
public $items = null;
public function __construct($name) {
$this->name = $name;
}
public function addChild(NavigationItem $item)
{
$this->items[] = $item;
}
public function getName() {
return $this->name;
}
public function display() {
$menu = '<nav class="' . $this->getName() . '"><ul>';
foreach ($this->items as $item) {
$menu.= $item->display();
}
$menu .= '</ul></nav>';
return $menu;
}
}
?>
het gebruik ervan is als volgt:
Code (php)
Volgens mij kan het nog simpeler aanroepen ( zoals het voorbeeldje van jullie ) maar dat heb ik niet kunnen realiseren tot nu.
Gewijzigd op 06/11/2012 11:06:38 door Reshad F
Quote:
Volgens mij kan het nog simpeler aanroepen ( zoals het voorbeeldje van jullie ) maar dat heb ik niet kunnen realiseren tot nu.
Gewoon een constructor maken waar je de waardes kan instellen.
Tevens heb je nog een verantwoordelijkheid die je nog niet hebt opgesplitst: De rederer
Toevoeging op 06/11/2012 11:11:07:
Quote:
Volgens mij kan het nog simpeler aanroepen ( zoals het voorbeeldje van jullie ) maar dat heb ik niet kunnen realiseren tot nu.
Gewoon een constructor maken waar je de waardes kan instellen.
Tevens heb je nog een verantwoordelijkheid die je nog niet hebt opgesplitst: De rederer
- Navigatie class
- NavigatieItem class
- Render class
Maar kan je mij dan ook uitleggen waarom in dit geval de render gescheiden moet worden?
Omdat een verantwoordelijkheid is en je dat dus in een andere klasse moet stoppen. Je kan bijv. een ListRenderer hebben of een XmlRenderer
hmm en dan moet ik dus de render van zowel Navigatie als NavigatieItem in een class stoppen?
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
Maar nu ik dit schrijf denk ik dat dit iets teveel in klassen proppen wordt. Die Ul en Li Renderers zullen toch nooit iets anders worden, beter is daar gewoon 2 aparate methods van te maken in de ListRenderer klasse.
Gewijzigd op 06/11/2012 14:32:18 door Wouter J