2

構築中のサイトのサブナビゲーションとして jQuery UI のアコーディオンを使用しています。問題は、ページ間で状態を維持するための適切な方法を見つけることができなかったことです。これを行う最善の方法は何だろうと思っています。

アコーディオンのインデックスをデータベースに保存することを考えましたが、このような問題には複雑すぎるようです。より良い方法はありますか?明らかに Cookie とセッションですが、それはサブナビだけでも同様に複雑です...何かアイデアはありますか?

編集:これが私のコードです

$.post(
    accordion_ajax.ajaxurl,
    {
        type   : 'GET',
        action : 'accordion_ajax'
    },
    function(data){
        $(".accordion-main").accordion('option', 'collapsible', true);  
        $(".accordion-main").accordion('option', 'active', 0);
        // the accordion just does not work inside this ajax call, but if I put it outside the ajax call it works fine. Any thoughts?   
    }
);

$(".accordion-main").accordion({
    change: function(event, ui){
        $.post(
            accordion_ajax.ajaxurl,
            {
                type   : 'SET',
                action : 'accordion_ajax',
                data   : $(".accordion-main").accordion('option', 'active')

            }
        );
    }
});
4

1 に答える 1

1

これが私がすることです:

アコーディオンの change() ハンドラーでは、現在のアコーディオン セクションのインデックスを AJAX 呼び出しを介してサーバーに送信します。

$( "#AccordionID" ).accordion({
    change: function(event, ui) {
        $.ajax({
            type:'POST',
            url: 'urlToPhpScript.php',
            data:'function=setAccordion&selectedAccordionSection='+ $("#AccordionID").accordion('option', 'active')
        });
    }
});

サーバー側では、この値をユーザー セッションに保存します。

<?php
// urlToPhpScript.php
session_start();

if($_GET['function']=='getAccordion') {
    if(isset($_SESSION['currentAccordion'])) {
        return $_SESSION['currentAccordion'];
    } else {
        return 0;
    }
}

if($_POST['function']=='setAccordion') {
    $_SESSION['currentAccordion'] = $_POST['AccordionID'];  
}

次に、ページが読み込まれるたびに、ユーザー セッションからアコーディオン セクションを照会する AJAX 呼び出しをサーバーに送信します。

$(document).ready(function () {
    $.ajax({
        type: 'GET',
        url: 'urlToPhpScript.php',
        data: 'function=getAccordion',
        success: function(data) {
            $('#AccordionID').accordion('activate', data);
        }
    });
});

このようにすると、あるページから次のページに移動する方法は問題にならず、サイトの各ページに「currentAccordion」タイプの非表示フィールドを埋め込むことを心配する必要もありません。

于 2012-07-23T13:45:21.197 に答える