2017-12-05 6 views
0

私は、CATEGORY、TITLE、DESCRIPTION、IMAGEの4つのフィールドと各行の一意のIDを格納する単純なMySQLテーブルを持っています。MySQLクエリを分割せずに異なるカテゴリにジャンプするジャンプメニューを作成

私はORDER BY CATEGORYを使用して、1つのクエリですべてをページに表示します。

SELECT 
RESOLUTIONS.CATEGORY, 
RESOLUTIONS.ID, 
RESOLUTIONS.TITLE, 
RESOLUTIONS.DESCRIPTION, 
RESOLUTIONS.IMAGE 
FROM 
RESOLUTIONS 
ORDER BY 
RESOLUTIONS.CATEGORY 

ページの各カテゴリの最初の行にジャンプするジャンプメニューを作成します。これはphpを使って可能ですか? divのIDアンカーにジャンプするジャンプメニューを作成する方法を知っていますが、リピート領域内で一意の識別子(ジャンプすることができます)を作成するにはどうすればよいですか?ここで

はカテゴリが前のものと異なる場合、私が今持っているリピートコード...各反復チェックで

<?php 
while(!$DETAILS->atEnd()) { 
?> 
<div class="row g-my-10 g-color-black"> 
    <?php if($DETAILS->getColumnVal("IMAGE")!= "") { ?> 
    <div class="col-md-9"> 
     <h2><?php echo($DETAILS->getColumnVal("TITLE")); ?></h2> 
     <?php echo($DETAILS->getColumnVal("DESCRIPTION")); ?> 
    </div> 
    <div class="col-md-3"><img src="images/<?php echo($DETAILS->getColumnVal("IMAGE")); ?>" class="img-fluid"></div> 
    <? } else { ?> 
    <div class="col-md-12"> 
     <h2><?php echo($DETAILS->getColumnVal("TITLE")); ?></h2> 
     <?php echo($DETAILS->getColumnVal("DESCRIPTION")); ?> 
    </div> 
    <?php } ?> 
    </div> 

<?php 

    $DETAILS->moveNext(); 
} 
$DETAILS->moveFirst(); //return RS to first record 
?> 

答えて

1

で、アンカーを作成します。

<?php 
// set any initial value that does not match an empty category (if you have them) 
$lastCategory = false; 

while(!$DETAILS->atEnd()) { 

<div class="row g-my-10 g-color-black"> 
<?php 
    // this category is different than the last: create anchor 
    if ($lastCategory !== $DETAILS->getColumnVal("CATEGORY")) { 
     echo '<a name="category-' . $DETAILS->getColumnVal("CATEGORY") . '"></a>'; 
     // set the compare-value to the current category 
     $lastCategory = $DETAILS->getColumnVal("CATEGORY"); 
    } 
?> 
    <?php if($DETAILS->getColumnVal("IMAGE")!= "") { ?> 
    <div class="col-md-9"> 
     <h2><?php echo($DETAILS->getColumnVal("TITLE")); ?></h2> 
     <?php echo($DETAILS->getColumnVal("DESCRIPTION")); ?> 
    </div> 
    <div class="col-md-3"><img src="images/<?php echo($DETAILS->getColumnVal("IMAGE")); ?>" class="img-fluid"></div> 
    <? } else { ?> 
    <div class="col-md-12"> 
     <h2><?php echo($DETAILS->getColumnVal("TITLE")); ?></h2> 
     <?php echo($DETAILS->getColumnVal("DESCRIPTION")); ?> 
    </div> 
    <?php } ?> 
    </div> 

<?php 

    $DETAILS->moveNext(); 
} 
$DETAILS->moveFirst(); //return RS to first record 
?> 

注:お使いのグリッド・システムに応じて、列またはさえ<h2>内のアンカーを配置する必要がある場合があります(つまり、ブートストラップのですか?)。また、タイトル/説明列の生成をリファクタリングして、自分自身を繰り返さないようにすることもできます。

<?php 
    if ($DETAILS->getColumnVal("IMAGE")!= "") { 
     $cols = '9'; 
    } else { 
     $cols = '12'; 
    } 
?> 
<div class="col-md-<?php echo $cols ?>"> 
    <h2><?php echo($DETAILS->getColumnVal("TITLE")); ?></h2> 
    <?php echo($DETAILS->getColumnVal("DESCRIPTION")); ?> 
</div> 
<?php 
    if ($DETAILS->getColumnVal("IMAGE")!= "") { 
?> 
<div class="col-md-3"><img src="images/<?php echo($DETAILS->getColumnVal("IMAGE")); ?>" class="img-fluid"></div> 
<?php 
    } 
?> 

ような何かはまたPSR-1に応じてあなたが<?phpやエコーショートカット<?=それだけではない<?

のいずれかを使用する必要があることに注意してください、私はそれが個人の選択の問題だとも主にどのようなあなたのファイルに依存して知っています(HTMLまたはPHP)が含まれていますが、PHPタグを開いたり閉じたりするのではなく、HTMLコードをエコーする方が個人的に好きです(読んだほうがはるかに性能が劣ります)

+0

@masterflodaそれは完全に働いた、 dあまりにもポインタに感謝します!私は確かに<? - 私はその悪い習慣のトゥースに行くが、私はドンを確認する必要があります、倒れないでください! –

関連する問題