私は Symfony と Twig を使って仕事をしています。現在、製品のリストを含む小枝ページがあり、foreach ループを使用して製品を表示し、ページネーションを設定して製品の表示を制限しています。
このページには入力としてチェックボックスのあるフォームがあり、次のページに移動するときにセッションで保存チェックボックスをオンにする必要があります
このコードを追加してやってみました
いくつかのコードがあり、私がやろうとしていることを説明するために、ページ分割されたビューとコントローラーにいくつかのコメントを追加しました。
私のループビュー:
リーリー ###ページビュー:### リーリーページネーション JS:
リーリー私のコントローラーでは、次のようにビューをレンダリングします:
リーリーphp をセッションに保存するか、Ajax に保存する方がよいでしょうか?
###よろしくお願いします###P粉1896062692024-02-26 15:36:31
実際のところ、コードを正しく理解していれば、実際にはセッションを使用する必要はありません。
フォームを送信したら、PDF を生成するためにすべてのチェックボックスの値をすぐに投稿する必要があると思います。
これを実行しようとしている場合は、チェックボックス リストを JavaScript 経由で直接保存し、フォームの送信時にすべてが送信されるようにする必要があります。
この理論によれば、HTML ホーム ページが存在する可能性があります:
ここで、非表示の div #savedCheckboxes を追加したことがわかります。これにより、ページを変更するときにすべてのチェックボックスを保存できるようになります。 HTML も少し修正しましたが、大きな問題はありませんでした。
次に、ページネーションの JavaScript を更新する必要があります:
$(ドキュメント).ready(function() { $(document).on('click', 'a.pagination',function(e) { e.preventDefault(); // 選択したすべてのチェックボックスを #savedCheckboxes に移動して保存します $('.checkboxPDF:checked').appendTo($('#savedCheckboxes')) // あなたと同じようにページネーションを行います $.ajax({ URL: $(this).data('uri')、 }).done(関数(html) { $('#pagination-target').html(html); // ユーザーが前のページに移動した場合は、チェックボックスを選択したかどうかを確認します $('#ページ分割対象 .checkboxPDF').each(function(i, element) { // チェックボックスが #savedCheckboxes にすでに存在する場合は、このチェックボックスを選択して #savedCheckboxes から削除します var SavedCheckbox = $('#savedCheckboxes .checkboxPDF[value="' element.val() '"]') if(savedCheckbox.length > 0) { element.click() // このチェックボックスをオンにします SavedCheckbox.remove() // 非表示の選択範囲から削除します } }) $('html,body').animate({scrollTop: $('#pagination-target').offset().top - 80}, 200); var $scrollable = document.getElementById('ページネーションターゲット'); $scrollable.scrollIntoView(); }); }); });
魔法は完了しました...フォームを送信すると、ページネーションのために表示されなくなったリストも含め、チェックボックスが選択されたすべてのリストが常に受信されます。