login  Naam:   Wachtwoord: 
Registreer je!
 Forum

Shortcode PHP met preg_replace_callback (Opgelost)

Offline Jointjeff - 27/08/2014 11:29 (laatste wijziging 27/08/2014 12:36)
Avatar van JointjeffHTML interesse Hallo iedereen,

Ik wil graag alle shortcodes uit een contentveld vervangen met de bijhorende content.

Dit is zo'n shortcode:
[AD INCLUDE]1234[AD /INCLUDE]

Moet dus worden vervangen naar, in dit geval, een advertentie. Die advertentie haal ik weer uit de database. Het nummer '1234' is de unieke ID.

Nu dacht ik dit eerst te doen middels preg_match, zo:
  1. $find = array(
  2. '~\[AD INCLUDE\](.*?)\[AD /INCLUDE\]~s'
  3. );
  4.  
  5. function getAdContent($id){
  6. // Database statement die advertentie content returned
  7. }
  8.  
  9. $replace = array(
  10. getAdContent($1),
  11. );
  12.  
  13. return preg_replace($find,$replace,$text);


Dit werkt niet omdat $1 niet echt een variabele is. Echter ben ik met preg_replace_callback niet heel bekend en weet niet hoe ik dit met deze functie zou moeten realiseren.

Wellicht hebben jullie hier een idee voor?

--------- Edit ---------

Ben zelf even verder gaan puzzelen en eigenlijk valt het best mee. Zie:

  1. $content = 'We\'ve got to install microwave ovens [AD INCLUDE]5147[AD /INCLUDE] custom delivery. We got to move these refrigerators [AD INCLUDE]568971[AD /INCLUDE] we got to move these color TV\'s';
  2.  
  3. $pattern = '~\[AD INCLUDE\](.*?)\[AD /INCLUDE\]~s';
  4.  
  5. function callback ($matches) {
  6. $id = $matches[1]; // hier haal je de id mee op
  7.  
  8. /*
  9. * Hier kan ik de database query doen
  10. */
  11.  
  12. }
  13.  
  14. $resultaat = preg_replace_callback($pattern, 'callback', $content);
  15.  
  16. echo $resultaat;


Ik ben me er overigens van bewust dat er geen output-filter gebruikt wordt. De inhoud die getoond wordt is namelijk in HTML.

2 antwoorden

Gesponsorde links
Offline Thomas - 04/09/2014 15:18
Avatar van Thomas Moderator Je kunt ook een anonieme functie als callback gebruiken:
  1. $resultaat = preg_replace_callback($pattern, function($matches) {
  2. $id = $matches[1]; // hier haal je de id mee op
  3. /*
  4.   * Hier kan ik de database query doen
  5.   */
  6. }, $content);


jointjeff schreef:
Ik ben me er overigens van bewust dat er geen output-filter gebruikt wordt. De inhoud die getoond wordt is namelijk in HTML.
Dat is prima, zolang je maar controleert of $id een getal is voordat je deze in een query gebruikt .
Offline Jointjeff - 04/09/2014 16:22
Avatar van Jointjeff HTML interesse @FangorN, klopt, maar net wat je voorkeur heeft.

Voor $id wordt inderdaad gecheckt of het numeriek is 
Gesponsorde links
Je moet ingelogd zijn om een reactie te kunnen posten.
Actieve forumberichten
© 2002-2024 Sitemasters.be - Regels - Laadtijd: 0.19s