Вызов функции php из preg_replace приводит к загрузке функции вверху страницы. - PullRequest
0 голосов
/ 31 октября 2010

У нас есть некоторый bbcode, и я пытаюсь настроить возможность для определенного кода вызывать функцию, которая загружает некоторые изображения из нашей фотогалереи.Так что, если кто-то вставит номер альбома, он вытянет 5 самых последних фотографий.Когда мы регулярно вызываем эту функцию (на другой странице, как обычный оператор php), она работает как положено.Но когда мы вызываем эту функцию через систему preg_replace, она загружает функцию вверху страницы.

См. Здесь: http://www.greendayauthority.com/news/1961/ Изображения тыквы в верхней части сайта должны находиться в пределахновостное сообщение, ниже "Спасибо Маркусу М. за отправку новостей".- где я поместил bbcode [picvault] 1 [/ picvault]

Вот как мы меняем значения для bbcode

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

Вот часть кода $ bbcode, которая вызываетнаша функция

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

А вот функция 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>";
}

1 Ответ

2 голосов
/ 01 ноября 2010

Если вы используете эту функцию в качестве обратного вызова, она будет выводить свои html-фрагменты сразу.Это происходит потому, что он использует echo.И когда ваше preg_replace, таким образом, вызывает эхо до того, как начнется вывод реальной страницы, тогда html изображения будет предшествовать остальной части страницы.

Решение: заставить функцию обратного вызова relatedImages использовать return вместо echo.*

...