0

メニューの項目を並べ替えることができるスクリプトを作成しました。

コードは、ページのタイトルとページがメニューに表示される順序を選択(表示)します。

たとえば、5ページ(About Us、Mission&Vision、Awards、Environmental Policy、Locations)がある場合、順序は1〜5になります。

現在のフォームのスクリーンショット

スクリーンショットからわかるように、コードは5つのページオプションを含む5つのドロップダウンを生成します。もう一方のドロップダウンでは、1〜5が表示されます。

私がやろうとしているのは、メニューに名前とページの順序をロードして、メニューがすでにその形式になっていることです。

したがって、各ドロップダウンには、他のドロップダウンにページタイトルと対応する順序があります。その後、ユーザーは必要に応じてこれを変更できます。

これを実現するためにコードを変更するにはどうすればよいですか?

<?php
$apageid = array();
$apagename = array();
$apageorder = array();

$q = "SELECT g.id, g.title, n.order FROM tbl_general g INNER JOIN tbl_navigation n ON n.pageid = g.id WHERE n.type = '$_SESSION[parent]' ORDER BY n.order";
$return = $database->query($q);
while($row=mysql_fetch_assoc($return)){
    $apageid[] = $row['id'];
    $apagename[] = $row['title'];
    $apageorder[] = $row['order'];
}

$count = count($apageid);
$bpageid = array();
$bpageorder = array();
?>
<div class="form-holder">
<?php

//run through each page one at a time and update the order of the menu
for($i=0; $i<$count; $i++){
    ?>
    <div class="form-row">
        <div class="form-label">
            Page Name
        </div>
        <div class="form-field">
            <select class="select-small" name="<?php echo $bpageid[$i] ?>">
                <?php
                for($j=0; $j<$count; $j++){
                    ?>
                    <option value="<?php echo $apageid[$j]; ?>"><?php echo $apagename[$j]; ?></option>
                    <?php
                }
                ?>
            </select>
            <select class="select-small" name="<?php echo $bpageorder[$i] ?>">
                <?php
                for($k=0; $k<$count; $k++){
                    ?>
                    <option value="<?php echo $apageorder[$k]; ?>"><?php echo $apageorder[$k]; ?></option>
                    <?php
                }
                ?>
            </select>
        </div>
    </div>
    <?php
}
?>
4

1 に答える 1

2

さて、私はあなたが必要なものを知っています。

これを変える:

for($i=0; $i<$count; $i++){

これに:

mysql_data_seek( $return ); //reset the pointer to do the same query
while($row=mysql_fetch_assoc($return)){

$id = $row['id'];
$title = $row['title'];
$order = $row['order'];

これにより、配列からではなく、dbから直接各idフィールドがループされます。また、ループ中の各フィールドに変数があります。次に、idの配列varを前に追加したidvarに変更します。

<select class="select-small" name="<?php echo $id; ?>">

次に、ページ名の選択フィールドについて、これを2番目のforループに追加します。

for($j=0; $j<$count; $j++){
      if($apageid[$j] == $id) {
      $selected = true;
      } else {
      $selected = false;
      }

次に、変数を追加して、現在の行の値と等しい場合に、配列内の現在のオプション値を「選択済み」にします。

<option value="<?php echo $apageid[$j]; ?>" <? echo ($selected == true) ? 'selected="selected"' : ''; ?>><?php echo $apagename[$j]; ?></option>

次に、下部の選択に対して同じことを行います。

<select class="select-small" name="<?php echo $order; ?>">
            <?php
            for($k=0; $k<$count; $k++){
                if($apageorder[$k] == $order) {
                    $selected = true;
                } else {
                    $selected = false;
                }
                ?>
                <option value="<?php echo $apageorder[$k]; ?>" <? echo ($selected == true) ? 'selected="selected"' : ''; ?>><?php echo $apageorder[$k]; ?></option>
                <?php
            }
            ?>
        </select>
于 2012-04-13T16:29:30.217 に答える