login  Naam:   Wachtwoord: 
Registreer je!
 Forum

UBB - Smilies

Offline webstab - 27/03/2007 18:57 (laatste wijziging 27/03/2007 18:58)
Avatar van webstabPHP ver gevorderde Hallo iedereen,

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(...) ).
  1. <?php
  2. // VOORBEELD 1
  3. function opmaak($bericht, $ubb, $smilies) {
  4. if ($ubb == TRUE) {
  5. $bericht = ...
  6. }
  7. ...
  8. $bericht = nl2br($bericht);
  9. return $bericht;
  10. }
  11. echo opmaak("Bericht dat opgemaakt moet worden", true,true);

  1. <?php
  2. // VOORBEELD 2
  3. class opmaak {
  4. ...
  5. }
  6. $opmaak = new opmaak("Bericht dat opgemaakt moet worden");
  7. $opmaak->UBB();
  8. $opmaak->Smilies();
  9. ...
  10. echo $opmaak->Output();

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/...)?

10 antwoorden

Gesponsorde links
Offline Button - 27/03/2007 20:24
Avatar van Button PHP ver gevorderde 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..
Offline webstab - 27/03/2007 21:38
Avatar van webstab PHP ver gevorderde 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
  1. while (...) {
  2. $var = new class(...);
  3. ...
  4. }

doe, of dat dat niet te veel laadtijd vraagt. Telkens een class aanmaken?
Offline Gerard - 27/03/2007 21:45
Avatar van Gerard Ouwe rakker Je moet alleen een object instantiëren van een class.
Offline Ibrahim - 28/03/2007 08:46
Avatar van Ibrahim PHP expert 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.

  1. <?php
  2.  
  3. class UBB
  4. {
  5.  
  6. function __construct( $text )
  7. {
  8. $this->text = $text; // tekst in var zetten
  9. $this->filterText( $this->text );
  10. }
  11.  
  12. function OutPut( )
  13. {
  14. return $this->text;
  15. }
  16. }
  17.  
  18. // aanroep word dan:
  19. $BB = new UBB( '[b]bold[/b]' );
  20. echo $BB->OutPut( );


Zoiets, dit is maar een ruwe schetje, hopelijk kun je er iets mee. Anders zou je een BBclass kunnen downloaden en die eens bekijken.

Succes 
Offline Riny - 28/03/2007 10:55
Avatar van Riny Nieuw lid Zowiezo zou ik de text niet in de constructor meegeven, aangezien je dan meerdere instanties moet maken als je de class meerdere keren wilt gebruiken 
Offline webstab - 28/03/2007 13:35
Avatar van webstab PHP ver gevorderde Ik dacht ook aan de methode van siliecom14.
Maar hoe zou jij het dan doen Riny?

Ik ga het al zeker met een class doen, maar hoe pak ik dat het beste aan qua laadtijd.
Offline Ibrahim - 28/03/2007 17:14 (laatste wijziging 28/03/2007 17:15)
Avatar van Ibrahim PHP expert volgens mij bedoelt Riny dat je dan via een functie zo doen dus

  1. <?php
  2.  
  3. class UBB
  4. {
  5. function __construct( ) { /* code */ }
  6.  
  7. function SetText( $text ) { /* tekst assignen aan class var. */ }
  8.  
  9. // enz. enz.
  10. }
  11.  
  12. ?>


Ik zou me dus niet zorgen maken om laadtijd, behalve als je 10000+ bezoekers in 1 keer krijgt 
Offline webstab - 28/03/2007 18:58
Avatar van webstab PHP ver gevorderde Inmiddels het ik al een hele class gemaakt.
Ik wil hem hier wel eens in de toekomst zetten.

Het is te vergelijken met de methode van siliecom14 (degene met Set apart).

Merci voor alles.
Offline Ibrahim - 28/03/2007 23:25
Avatar van Ibrahim PHP expert 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.
Offline webstab - 29/03/2007 18:30
Avatar van webstab PHP ver gevorderde Maar het is nog een UBB-class.
Ik heb gewoon de basis gelegd en het is niet echt een 'echte class'.
  1. <?php
  2. class opmaak {
  3. private $bericht;
  4.  
  5. public function GeefBericht($bericht) {
  6. $this->bericht = $bericht;
  7. }
  8. public function Bericht() {
  9. // return the message
  10. return $this->bericht;
  11. }
  12. public function VerwijderBericht() {
  13. unset($this->bericht);
  14. }
  15. private function FilterHtml() {
  16. // To filter all HTML
  17. $this->bericht = htmlspecialchars($this->bericht);
  18. }
  19. private function NewLines() {
  20. $this->bericht = nl2br($this->bericht);
  21. }
  22. private function NoFullLines() {
  23. $this->bericht = wordwrap($this->bericht, 65, '<br />', 1);
  24. }
  25. private function Smilies() {
  26. // To add smilies
  27. $smilies_code = array(":)");
  28. $smilies_img = array("<img src='lach.gif' border='0' alt=':)' class='imgdisplay' />");
  29. $this->bericht = str_replace($smilies_code, $smilies_img, $this->bericht);
  30. }
  31. private function Ubb() {
  32. $this->bericht = preg_replace("/\[b\](?U)((.|\n|\r)*)\[\/b\]/", "<b>\\1</b>", $this->bericht);
  33. }
  34. /* Alle soorten opmaak, gebaseerd op alles hierboven, kan gemakkelijk worden aangevuld */
  35. public function StandaardOpmaak() {
  36. $this->FilterHtml();
  37. $this->NewLines();
  38. $this->NoFullLines();
  39. $this->Smilies();
  40. $this->Ubb();
  41. }
  42. public function BasisOpmaak() {
  43. $this->FilterHtml();
  44. $this->NewLines();
  45. $this->NoFullLines();
  46. }
  47. public function GeenOpmaak() {
  48. $this->FilterHtml();
  49. }
  50.  
  51. }
  52. ?>

Mij doel is om nu juist de basis te leggen, later ga ik dat uitbreiden.
Zo ziet het er nu uit, hoogstaand is het niet echt, maar dat volgt nog wel
Gesponsorde links
Dit onderwerp is gesloten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.234s