2010-10-31 3 views
0

Nous avons un bbcode et j'essaye de configurer la possibilité pour un certain code d'appeler une fonction qui charge des images de notre galerie de photos . Donc, si quelqu'un met un numéro d'album, il tire 5 des photos les plus récentes. Lorsque nous appelons cette fonction régulièrement (sur une autre page, comme une déclaration php régulière), cela fonctionne comme prévu. Mais lorsque nous appelons cette fonction via le système preg_replace, elle charge la fonction en haut de la page.L'appel d'une fonction php à partir d'un preg_replace provoque le chargement de la fonction en haut de la page

Voir ici: http://www.greendayauthority.com/news/1961/ Les images de citrouille en haut du site devraient être dans les nouvelles, ci-dessous "Merci à Marcus M. pour l'envoi des nouvelles." - qui est l'endroit où j'ai placé le BBcode [picvault] 1 [/ picvault]

Voilà comment nous changeons les valeurs pour le BBcode

$newsPost = preg_replace(array_keys($bbcode), array_values($bbcode), $newsPost); 

est ici la partie de la bbcode $ qui appelle notre fonction

"/\[picvault\](.*?)\[\/picvault\]/e" => "relatedImages($1)", 

Et voici la fonction relatedImage

function relatedImages($albumID) { 

    $queryImage = mysql_query("SELECT * FROM cpg140_pictures WHERE aid = $albumID ORDER BY pid DESC LIMIT 5"); 

    echo "<div class='relatedImages'>"; 
    while($images = mysql_fetch_array($queryImage)) { 

      $relImgPath = $images['filepath']; 
      $relImgName = $images['filename']; 
      $relThumbImgUrl = "http://www.greendayauthority.com/Picture_Vault/albums/$relImgPath/thumb_$relImgName"; 
      $relFullImgUrl = "http://www.greendayauthority.com/Picture_Vault/albums/$relImgPath/$relImgName"; 

     echo "<div class='relImage'> 
         <a href='$relFullImgUrl' rel='lightbox-$albumID'><img src='$relThumbImgUrl'></a> 
        </div>"; 
    } 

    echo " <div class='relImage'> 
         <a href='http://www.greendayauthority.com/Picture_Vault/thumbnails.php?album=$albumID' target='_top'><img src='http://www.greendayauthority.com/images/viewmorephotos.png'></a> 
       </div>"; 
    echo "</div>"; 
} 

Répondre

2

Si vous utilisez cette fonction comme callbac k il va sortie ses extraits html tout de suite. Cela arrive parce qu'il utilise echo. Et quand votre preg_replace appelle ainsi l'écho avant que la sortie de la page réelle commence, l'image html précède le reste de la page.

Solution: rendre la fonction de rappel relativeImages utiliser return au lieu de l'écho.

Questions connexes