0

まず第一に、私は mysqli を初めて使用し、ステートメントを準備するので、エラーが発生した場合はお知らせください。私はこの静的ドロップダウンメニューを持っています: ここに画像の説明を入力

HTML コード:

<ul class="menu sgray fade" id="menu">

<li><a href="#">Bike</a>
    <!-- start mega menu -->
    <div class="cols3">
        <div class="col1">
            <ol>
                <li><a href="#">bikes</a></li>
                <li><a href="#">wheels</a></li>
                <li><a href="#">helmets</a></li>
                <li><a href="#">components</a></li>
            </ol>
        </div>
        <div class="col1">
            <ol>
                <li><a href="#">pedals</a></li>
                <li><a href="#">GPS</a></li>
                <li><a href="#">pumps</a></li>
                <li><a href="#">bike storage</a></li>
            </ol>
        </div>
                <div class="col1">
            <ol>
                <li><a href="#">power meters</a></li>
                <li><a href="#">hydratation system</a></li>
                <li><a href="#">shoes</a></li>
                <li><a href="#">saddles</a></li>
            </ol>
        </div>
    </div>
    <!-- end mega menu -->
</li>

動的なドロップダウン メニューを作成したい。私はこの関数で$categoryNameとを表示することができました:$SubCategoryName

function showMenuCategory(){
$db = db_connect();
$query = "SELECT * FROM Category"; 
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bind_result($id,$categoryName,$description,$pic,$active);
while($stmt->fetch()) {
echo'<li><a href="#">'.$categoryName.'</a>
<!-- start mega menu -->
<div class="cols3">
<div class="col1">
<ol>';
$dba = db_connect();
$Subquery = "SELECT * FROM Subcategory WHERE CategoryId = '".$id."'"; 
$Substmt = $dba->prepare($Subquery);
$Substmt->execute();
$Substmt->bind_result($Subid,$CatId,$SubCategoryName,$SubDescription);
while($Substmt->fetch()) {
echo'
<li><a href="#">'.$SubCategoryName.'</a></li>';
            }
 echo'
  </ol>
</div>
   <!-- end mega menu -->
      </li>';
                 }
                  }

唯一の問題は、同じ のすべてのサブカテゴリを返すことです <div class="col1">:

ここに画像の説明を入力

私が取得したいのは、サブカテゴリをカウントし、結果が 4 を超える場合は、2 列目と 3 列目の他の項目を返すことです。

更新***: 以下の回答のおかげで、メニューは次のようになります。

ここに画像の説明を入力

ありがとう!

4

2 に答える 2

1

これを試してみてはどうですか?

さらに説明するには

何が起こっているかというと、フェッチされたすべてのサブカテゴリに対して、カウンターをインクリメントします。そのカウンターが 4 に達すると、and が終了し<UL><DIV>新しい列を表す新しいものを作成します。

function showMenuCategory(){
$db = db_connect();
$query = "SELECT * FROM Category"; 
$stmt = $db->prepare($query);
$stmt->execute();
$stmt->bind_result($id,$categoryName,$description,$pic,$active);
while($stmt->fetch()) {
echo'<li><a href="#">'.$categoryName.'</a>
<!-- start mega menu -->
<div class="cols3">
<div class="col1">
<ol>';
$dba = db_connect();
$Subquery = "SELECT * FROM Subcategory WHERE CategoryId = '".$id."'"; 
$Substmt = $dba->prepare($Subquery);
$Substmt->execute();
$Substmt->bind_result($Subid,$CatId,$SubCategoryName,$SubDescription);
$count = 0;
while($Substmt->fetch()) {
echo'
<li><a href="#">'.$SubCategoryName.'</a></li>';
$count+=1;
if ($count == 4) {
    $count = 0;
    echo '</ol></div><div class="col1"><ol>';
}
            }
 echo'
  </ol>
</div>
   <!-- end mega menu -->
  </li>';
             }
              }

編集: col1 の目的を誤解しました。それらはすべて col1 である必要があり、すぐに機能するはずです。そうでない場合は、コメントを残してください!

于 2013-07-19T17:08:23.150 に答える
0

これを試して:

function showMenuCategory(){
    $db = db_connect();
    $query = "SELECT * FROM Category"; 
    $stmt = $db->prepare($query);
    $stmt->execute();
    $stmt->bind_result($id,$categoryName,$description,$pic,$active);
    echo '<div class="cols3">';
    while($stmt->fetch()) {
        echo'<li><a href="#">'.$categoryName.'</a>
        <!-- start mega menu -->
        <div class="col1">
        <ol>';
        $dba = db_connect();
        $Subquery = "SELECT * FROM Subcategory WHERE CategoryId = '".$id."'"; 
        $Substmt = $dba->prepare($Subquery);
        $Substmt->execute();
        $Substmt->bind_result($Subid,$CatId,$SubCategoryName,$SubDescription);
        while($Substmt->fetch()) {
            echo'<li><a href="#">'.$SubCategoryName.'</a></li>';
        }
        echo'</ol>';
    }
    echo '</div><!-- end mega menu --></li>';
}
于 2013-07-19T17:15:13.920 に答える