1

私は PHP の学習を始めたばかりで、学習を支援するために最初のデータ駆動型 Web ページを作成しようとしていますが、私を夢中にさせている問題に遭遇したようです。

ここで少し背景を説明します。

私がやろうとしているのは、データベースからコンテンツを取得することです。このコンテンツは既に html 段落タグでマークアップされています。コンテンツはユーザーが送信するため、各行に含まれる段落数を知る方法はありません。

次に、コンテンツをループして段落を数え​​、各 div を含む 5 つの段落になるようにします。

これを行うために使用しているコードは次のとおりです。コードが少し基本的であることはわかっていますが、すべてのコンテンツが単一のクエリで取得される限り、問題なく動作するようです。

$stmt = $db->prepare('SELECT * FROM content');
$stmt->execute();

foreach($stmt as $row) {
$allParagraphs .= $row['content'];
}   

$paragraphArray = explode("</p>", $allParagraphs);
$paragraphCount = 0;
echo '<div class="bookPage">';

foreach ($paragraphArray as $value) {
 echo $value;
 $paragraphCount = $paragraphCount + 1;

 if ($paragraphCount == 5){
    echo '</div><div class="bookPage">';
    $paragraphCount = 0;
     }


}

echo '</div>';

そして今、私の問題。

PHP と Jquery を使用して、エンドレス スクロール効果のあるページネーションを組み込みたいと思います。私はこれを行うのに十分な自信を持っています。ただし、ページネーションを導入すると、現在使用しているコード (5 段落ごとに数える) が機能しないことに気付きました。

私が見る限り、コードを処理した後、何が起こるかというと、終了 div が挿入され、次に ajax を介して作成された 2 番目のクエリ (リンクをクリックした続きを読む) が発生します。新オープニング部門 これにより、各クエリの残りの段落が div タグで囲まれ、必要な 5 つの段落が含まれなくなります。

基本的に、最も簡単に言えば、私がやりたいことは、5 段落ごとに div タグをラップできるようにすることですが、ajax を介して結果をページ付けすることもできます。誰かがこれを行うための最良の方法を私にアドバイスできれば、それは非常に高く評価されます.

これまでのところ、この問題に関する私の考えは...

これが可能かどうかはわかりませんが、これは私がこれに間違った方法でアプローチしたと信じさせます. 私は現時点ではあまり経験がありませんが、すべての段落をデータベースの別々の行に格納する方が簡単で、5 の倍数でそれらを引き出すことができると思わずにはいられません。特に、各ユーザーが作成/送信する段落の数を知る方法がないためです。

画像を投稿するのに十分なポイントがないので、問題を説明する試みが十分でない場合に何を意味するかを示すために、アップロードした画像へのリンクを次に示します。

問題を示す図

問題を示す図

提案があれば事前に感謝します。

4

1 に答える 1

0

HTMLたとえば、スクリプト内のすべてのタグを削除してPHP、段落のコンテンツをJSONオブジェクトとして返すことができると思います。

したがって、基本的には、次のようなものを返します。

echo json_encode($paragraphArray);

そして、次のようにリクエストしjQueryます (これはhttp://api.jquery.com/jQuery.getJSON/の最初の例の採用です):

jQuery.getJSON('yourURL.php', function(data) {
    var items = [];

    jQuery.each(data, function(key, val) {
        items.push('<p>' + val + '</p>');

        if(items.length == 5) {
            appendItemsToBody(items);
            items = [];
        }
    });

    appendItemsToBody(items);
});

function appendItemsToBody(items) {
    if(items.length) {
        jQuery('<div/>', {
            'class': bookPage,
             html: items.join('')
        }).appendTo('body');
    }
}

「さらに読み込む」をクリックしたときに何が起こるかに応じて、現在表示されているアイテムの数をデータとしてPHPスクリプトへの呼び出しに渡しjQuery.getJSON()(APIドキュメントを参照)、PHPスクリプトでどの段落を返すかを決定できます(つまりどこから始めるか)。の既存の最後の div に 5 つの項目を埋めるために、段落の「残り」を追加しjQuery、残りを新しい div に追加する必要があります。

于 2013-06-02T22:46:17.750 に答える