3

私は独自の CMS を作成しようとしていますが、やりたかったことの 1 つは、CMS のナビゲーション要素を並べ替えたり変更したりできるようにすることでした。これを可能にするNestedSortableというプラグインを見つけました。私はそれを使用し、多くの問題を抱えていたので、専門家の PHP の友人に助けてもらいました。彼女は座って、少し苦労した後、それを機能させました。

私はばかだったのですが、その日遅くに家に帰ったとき、座ってローカルコピーを取り、それに何かを追加してサーバーにアップロードしました...新しいバージョンをダウンロードするのを忘れていたことに気づきませんでした! 友達の仕事がすべてなくなってしまい、ナビゲーションの調整がうまくいかず困っています。

index.php (ページに表示する) ファイルを失いましたが、nav_adjust.php (データベースに入力する) を保存しました。私が望むのは、ナビゲーションを並べ替えてデータベースに送信し、更新時に正しく表示できるようにすることだけです。送信ボタンが押されると、情報が nav_adjust.php に送信されます。

唯一の制限は、ナビゲーションに 3 つのレベル (プライマリ、子、および孫) しか持てないことです。私のナビゲーションは、それらがすべてプライマリの場合のように見えます。nav_adust.php が何をしているかを確認できるように、すべての画像のエコーを警告しました。

(配列の値に注意してください。)

すべての親、子供なし

これは、親に 1 つの子があるかのようです。

親に 1 人の子

これは、子供に 2 人の孫がいるかのようです。

子に 2 人の孫

そして、これは混合されています:

子供や孫などの混合家族

もう機能しない私の index.php ファイルは、次のようになります。

<form method="post" action="nav_adjust.php"> <!--This form posts to nav_adjust.php-->
    <ol id="pageList">
    <?php 
    $nav = mysql_query("SELECT * FROM `".$name['Website']);
    $num = 0;
    while( $col_nav = mysql_fetch_assoc($nav) ){
        if ($col_nav['orderId'] != 0) {
            echo "<li id='list_".$col_nav['id']."'>
            <div>Example Title</div>";  
        } else {
            echo "<ol>
                <li id='list_".$col_nav['id']."'>
                    <div><h1>Example Title</div>";
                </li>
            </ol>\n";
        }
        echo "</li>\n";
        ++$num;
    }
    ?>
    </ol>
    <button type='submit'>Update</button>
    </form>

<script>

$(document).ready(function(){

    $('#pageList').nestedSortable({
            /*option that don't matter*/
            });

    $("button").on('click', function(event){
        serialized = $('ol#pageList').nestedSortable('serialize');
          $.post( "nav_adjust.php", serialized, function( data ) {
            alert( data );
            });
        return false;
    });

});

 </script>

繰り返しますが、上記のコードは機能しません。リスト項目を次のようにする代わりに:

<ol>
<li>
    <ol>
    <li></li>
    ...
    </ol>
 </li>
 ...
 </ol>

これは次のようになります (ol の前の閉じた li タグに注意してください):

<ol>
<li></li>
<ol>
    <li></li>
</ol>
...
</ol>

そして、これは私の友人が私のためにしてくれたnav_adjust.phpで、index.phpから正しい情報が与えられれば美しく動作します

$list = $_POST['list'];
$num = 1;
foreach ($list as $key => $value ) {
    if ($value == "null") {
        //$value = $num;
        mysql_query("UPDATE `myTable` SET orderId=".$num.", parent='null' WHERE id=".$key."");
        $text .= "UPDATE `myTable` SET orderId=".$num.", parent='null' WHERE id=".$key."\n\n";
    } else {
                $query = "UPDATE `myTable` SET orderId=". $num .", parent=".$value;
                $text .= "UPDATE `myTable` SET orderId=". $num .", parent=".$value."\n\n";
                $var = $list[$value];
                if ( $var != null && $list[$var] != null ) {
                    $query .= ", grandchild = 1";
                }
                $query .= " WHERE id=".$key; 
        mysql_query($query);
    }
    $num++;
}

echo "Content is below\n";
print_r( $_POST['list']);
echo $text;

つまり、要約すると、シリアル化されたデータを index.php から nav_adjust.php に送信し、データベースに送信するナビゲーションがあります (そして、それをエコーバックするので、何をしたかがわかります)。その後、index.php は、更新時に、すべての子を子などとして、リスト項目を所定の位置に保持する必要があります。しかし、私は index.php を上書きしましたが、友人がどのようにそれを行ったのかわかりません。

私のテーブルフィールドは(忘れる前に):

id、タイトル、orderId (親)、親 (子)、および孫。

私は混乱を避けるために orderId と parent の名前を変更するつもりでしたが、私は決してしませんでした:(

誰かが私を助けてくれたら、とても感謝しています。

他に私が提供できる情報がありましたら、お尋ねください!

4

1 に答える 1

1

何時間も格闘した後、私は GoDaddy にファイルとディレクトリをバックアップしているかどうか尋ねるという天才的なアイデアを思いつきました。それで、ファイルを取り戻しました。興味のある人のために、index.php に欠けているコードは次のようになっています ($name['website'] は 'myTable' です):

$parents = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = 0 ORDER BY `orderId` ASC");

    while($parent = mysql_fetch_array($parents)){            
        echo "<li id='list_".$parent['id']."'>
        <div>
            <span class='disclose'>
                <span></span>
            </span>
            <span class='title'>
                <a href='mod.php?id=".$parent['id']."'>".stripslashes($parent['page'])."</a>
            </span>
        </div>";    

        // Get chil elements

        $children = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = " . $parent['id'] . " ORDER BY `orderId` ASC") or die(mysql_error());
        while($child = mysql_fetch_array($children)){
            echo "<ol>
            <li id='list_".$child['id']."'>
                <div>
                    <span class='disclose'>
                        <span></span>
                    </span>
                    <span class='title'>
                        <a href='mod.php?id=".$child['id']."'>".stripslashes($child['page'])."</a>
                    </span>
                </div>";
            # Get grandchild elements
            # (Please consider making an recursive function or so out of this if you plan to have grand grand children etc.,
            # Because if you create new whiles manually for every instance, this is gonna look pretty darn ugly.
            # Also, it makes it impossible to have an unknown depth.)           
            $grandchildren = mysql_query("SELECT * FROM `".$name['Website']."` WHERE parent = " . $child['id'] . " AND grandchild = 1 ORDER BY `orderId` ASC");             
            while($grandchild = mysql_fetch_array($grandchildren)){
                echo "<ol>
                    <li id='list_".$grandchild['id']."'>
                        <div>
                            <span class='disclose'>
                                <span></span>
                            </span>
                            <span class='title'>
                                <a href='mod.php?id=".$grandchild['id']."'>".stripslashes($grandchild['page'])."</a>
                            </span>
                        </div>
                    </li>
                </ol>\n";               
            }

            // Close child
            echo "</li>
            </ol>\n";
        }
        // Close parent
        echo "</li>\n";
    }
    ?>
于 2013-03-03T10:48:10.723 に答える