Hallo allemaal,

Ik ben momenteel bezig om object georienteerd een forum te maken,
echter ben ik ergens tegen aangelopen en wou weten hoe jullie dat zouden oplossen.

Situatie ( Simpel ):

Class Bericht
- Gebruiker Object
+ printBericht() // Deze print het hele bericht, poster etc..

Class Topic
+ printTopic() // Deze print ook alle berichten die in het topic zijn geplaatst


Een gebruiker moet natuurlijk zijn/haar eigen bericht kunnen wijzigen, hoe kan ik dit het beste toepassen? ( En zo zijn er nog een tal soortgelijke situaties te bedenken )

Een nieuwe methode maken die eigenlijk bijna hetzelfde is als printBericht() alleen dan nog met een extra 'knopje' om het bericht te wijzigen.
ik denk dat je al een fout maakt door je objeo kan je in je template de situatie bekijken en een edit knopje wel of niet weergeven terwijl je hetzelfde object in je template hebt gegooid.

Hmm ik gebruik pas sinds kort een template parser dus hier heb ik nog niet zoveel ervaring mee.

Momenteel doe ik hetvolgende in de klasse bericht:


	public function printBericht(Template_Lite $oTPL) {
		$oTPL->assign('iBerichtID', $this->iBerichtID);
		$oTPL->assign('sGebruikersNaam', $this->oGebruiker->getNaam());
		$oTPL->assign('sDatum', $this->sDatum);
		$oTPL->assign('sBericht', $this->sBericht);
		$oTPL->display('bericht.tpl');
	}


Zou je anders een klein voorbeeld kunnen geven?
Als je dan toch al werkt met models & views, kan je ook de controllers wel gebruiken.

Al die assign aanroepen komen dan niet in je model, je Post of Topic, maar in de controller-klasse. Je models bevatten alleen de data en eventuele checks of data wel veranderd kan worden in de nieuwe data. Bijvoorbeeld of het een geldig topictitel is wat je aan $topic->title toewijst. Stop geen presentatie, views, in je models. Op die manier kan je Topic minder goed gebruiken voor bijvoorbeeld een RSS feed.

Stel je maakt 2 controllers. Een voor het weergeven van topics in HTML, en eentje voor een RSS feed. Als iemand een HTML pagina wil, hoef jij al die RSS code niet te laden, want die zit in een andere controller. Zou die in je model zitten, dan krijg je een enorme model met allemaal functies die heel specifiek zijn. Voor specifiek gedrag gebruik je nu de controller.
Bedankt voor je reactie Jelmer, hier even een voorbeeldje hoe ik denk dat je het bedoeld:

<?php
if( isset($_GET['topicID']) && ctype_digit($_GET['topicID']) ) {
$oTopic = Forum::getTopic($_GET['topicID']);
$aBerichten = $oTopic->getBerichten();

foreach($aBerichten as $oBericht) {
$oTPL->assign('iBerichtID', $oBericht->iBerichtID);
$oTPL->assign('sGebruikersNaam', $oBericht->oGebruiker->getNaam());
$oTPL->assign('sDatum', $oBericht->sDatum);
$oTPL->assign('sBericht', $oBericht->sBericht);
$oTPL->display('bericht.tpl');
}
}
?>

Echter weet ik dan nog steeds niet helemala hoe ik nou mn probleemstelling kan toepassen hierin, en hoe ik dat het beste kan doen in mn template.
Ik denk dat je je template parser moet uitbreiden met de mogelijkheid om simpele if-else constructies te maken. Die zal je hoe dan ook nodig hebben. In je controller kijk je dan of de voorwaarde - of de post door de gebruiker bewerkt mag worden - waar is, je assignt het resultaat - true of false - aan een variabele en aan de hand daarvan laat je in je template wel of geen linkje zien.
Hardstikke bedankt Jelmer, hier kan ik wel verder mee!

Reageren