1

MySQL からプルされたニュース ストーリーを一覧表示する php foreach ループがあります。ループの一部として、ストーリーが印刷され、クエリの下でプルが実行され、ストーリーに添付されている画像が表示されます。これはそれの単純化されたバージョンです:

foreach ($res AS $row) { 
    printf('<p>%s</p>' . PHP_EOL, nl2br($row['story']));


    $qry3 = "select * from tpf_images where news_id=".$row['news_id'];
    $res3 = $pdo->query($qry3);


    foreach ($res3 AS $row3) { 

        printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
        <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] );
    }
}

正常に機能しますが、ニュース記事のすべての画像がその記事の下にあることを意味します。私が代わりに達成しようとしているのは、各段落の開始時に、画像がストーリー テキストの一部として印刷されることです。ストーリーは で印刷され、段落 nl2br($row['story'])を使用して で実現されます。phpがスキャンする方法はありますか?それが見つかった場合は、画像foreachに使用しているテキストを挿入します:nl2br<br /><br />nl2br($row['story'])<br /><br />

printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
<img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] );

そうすれば、画像はテキストの下ではなく本文に表示されます。<br /><br />結果に残りの画像よりも多くの画像がある場合、以前のようにストーリーの後に印刷されます。

私は完全に困惑しているので、これについて助けてくれてありがとう(また、必要に応じてより適切に編集できるように、タイトルがどうあるべきかわからなかった)

編集:質問をより明確にするnl2br($row['story'])ために、 を検索して<br /><br />ください。<br /><image><br />見つかった場合は、次の画像を表示するために使用するコードである画像に置き換えられます。

<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
        <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt']
4

3 に答える 3

2


printf 行に直接追加しないのはなぜですか?

printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
<img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a><br>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] );

またはさらに良いことに、css を使用してスタイルを設定します。たとえば、次のようになります。

echo '<div class="images">';
foreach ($res3 AS $row3) { 

    printf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
    <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] );

}
echo '</div>';

CSS :

div.images a { display: block; }

私が質問を完全に誤解していない限り。

編集::

新しい編集を見たので、代わりに sprintf を使用する必要があります:

foreach ($res AS $row) { 
    $story = '<p>' . preg_replace("/\n|\n\r|\n\r/", '<br>', $row['story']) . '</p>' . PHP_EOL;


    $qry3 = "select * from tpf_images where news_id=".$row['news_id'];
    $res3 = $pdo->query($qry3);

    $images = '';
    foreach ($res3 AS $row3) { 
        $images .= sprintf('<a href="/images/%s%s.jpg" rel="lightbox[%s]" title="%s. Photo Credit - %s" >
        <img src="/images/%s%s-thumb.jpg" style="max-height: 250px; max-width: 250px" alt="%s"/></a>' . PHP_EOL, $row3['url'], $row3['alt'], $row['headline'], $str ,$row3['credit'], $row3['url'], $row3['alt'], $row3['alt'] );
    }
    $story = preg_replace('/<br><br>/', '<br>' . $images . '</br>', $story);
}
于 2013-09-30T14:06:04.213 に答える
0

を削除するには、str_replace() 関数を使用します<br/>

ブレーク行を削除するには:

str_replace(array('<br>','<br/>','',strtolower($row['story'])))

a 内にストーリーを配置し、 s とs を左<span>にテキスト揃えします。<span><img>

<li>スタイルを設定するのは非常に簡単なので、sを使用することをお勧めします(垂直方向と水平方向のテキストが整列します)。

于 2013-09-30T14:11:58.490 に答える
0

user2574794。あなたが要求していることは、正確には「明確」ではありません。

ところで、単純な str_replace() を使用しないのはなぜですか? 何かのようなもの:

str_replace('<br /><br />', '<br /><br />blabla', nl2br($row['story']));
于 2013-09-30T14:05:29.587 に答える