Ik ben bezig met een compleet systeem (forum+nieuws+ledensysteem...) te maken.
Nu wil ik in mijn berichten UBB - Smilies - nl2br - htmlfilter steken.
Nu is mijn vraag hoe ik dat het beste doe?
Maar je moet mij niet uitleggen hoe ik smilies,... toevoeg, want dat kan ik (met reguliere expressie, nl2br(...), preg_replace(...) ).
Welke methode is het beste?
Niet overal moet hetzelfde worden weergegeven.
Daar UBB,Smilies en ergens anders enkel UBB en ergens anders bijna niets enz...
Hoe doe ik het het beste qua laadtijd enz (voor ieder forumbericht/topic/...)?
1 methode misschien iets minder schrijfwerk, maar tweede is natuurlijk ordelijker en dus overzichtelijker en staat alles netjes bij elkaar en kan je gemakkelijk funties toevoegen.
qua laadtijd, ik heb niet echt idee, miss bij voorbeeld 2 enkele microseconde langer, omdat je telkens terug verschillende functies aanroept, en bij voorbeeld 1 maar één functies, maar eigenlijk heb ik er geen idee van..
Ik opteer voor de tweede omdat ik daarbij alles mooi kan schijven en bij het uitvoeren kan kiezen wat er precies moet gebeuren.
Alleen vraag ik mij af, wanneer ik
Wat ik zou doen is, je tekst in stukjes verdelen. Ik bedoel dus niet exploden op spaties, maar met een regexje alle tags uit de tekst halen en in een array steken.
Dan kijk je per tag of je al een functie ervoor hebt die die tag afhandelt. Zodra je een bestaande tag hebt, roep je de functie aan en die zal die tag dus omzetten naar de juiste HTML tag.
Dan met smilies:
Het beste en simpelste wat je kunt doen is een array maken waarin je de smiley code en afbeelding inzet. Met een simpele str_replace (die accepteert arrays dus denk er niet aan om een foreach te gaan gebruiken !) kun je dus de smilies weergeven.
Tijdens dit proces zou ik de tekst in een class variabele opslaan ($this->tekst of iets dergelijks) zodat je in je contructor de tekst kunt outputten zodra hij klaar is.
zou je niet kunnen tonen wat je nu hebt, want het is best een prestatie om binnen 1 dag een UBB class te maken. Zoiets vraagt (tenminste bij mij) wat denktijd. Het scripten duurt dan maar even, maar het bedenken duurt toch wel wat langer.
<?php
class opmaak {
private $bericht;
public function GeefBericht($bericht) {
$this->bericht = $bericht;
}
public function Bericht() {
// return the message
return $this->bericht;
}
public function VerwijderBericht() {
unset($this->bericht);
}
private function FilterHtml() {
// To filter all HTML
$this->bericht = htmlspecialchars($this->bericht);
}
private function NewLines() {
$this->bericht = nl2br($this->bericht);
}
private function NoFullLines() {
$this->bericht = wordwrap($this->bericht, 65, '<br />', 1);
}
private function Smilies() {
// To add smilies
$smilies_code = array(":)");
$smilies_img = array("<img src='lach.gif' border='0' alt=':)' class='imgdisplay' />");
$this->bericht = str_replace($smilies_code, $smilies_img, $this->bericht);
}
private function Ubb() {
$this->bericht = preg_replace("/\[b\](?U)((.|\n|\r)*)\[\/b\]/", "<b>\\1</b>", $this->bericht);
}
/* Alle soorten opmaak, gebaseerd op alles hierboven, kan gemakkelijk worden aangevuld */
public function StandaardOpmaak() {
$this->FilterHtml();
$this->NewLines();
$this->NoFullLines();
$this->Smilies();
$this->Ubb();
}
public function BasisOpmaak() {
$this->FilterHtml();
$this->NewLines();
$this->NoFullLines();
}
public function GeenOpmaak() {
$this->FilterHtml();
}
}
?>