【问题标题】:Dynamic drop down menus using CSS and PHP/MySQL使用 CSS 和 PHP/MySQL 的动态下拉菜单
【发布时间】:2015-06-30 13:30:04
【问题描述】:

我想使用 PHP 和 MySQL 创建一个动态下拉菜单。菜单还可以,但不是我想要的方式。

我想要这样的菜单如下(垂直排序并限制垂直和水平的项目数量)

我尝试按照以下代码实现这一点:

<?php foreach ($result as $riw) { ?>
<div class="four columns">
<li><a href="<?php echo $riw['fmprmlink']; ?>"><?php echo 
     $riw['remedy_name']; ?></a> </li>
</div>
<?php } ?>

通过上述方法,我得到了这个结果,这是不需要的

如果不使用&lt;div class="four columns"&gt;,结果如下,再次不需要

我希望项目按字母顺序垂直排列和显示。

【问题讨论】:

  • 在您的查询中,您可以添加 order_by 并检查。
  • 但无论如何都不会安排项目..请看看我的要求
  • 您可以添加条件,并在此基础上创建其他列并放置您的数据。就像在 10 行之后的第一列中一样,它将创建其他列等等...希望我没有错。 !!
  • 我知道的想法。但是如何实现这一点不确定...
  • 关于您的两个结果,什么是“不需要”?你能在你的问题中解释你需要什么吗?

标签: php jquery html mysql css


【解决方案1】:

先排序,然后是第二列,然后是等列的简单可能性。
有什么可以改进的。
显示多种可能性之一。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title>4 columns</title>
        <link rel="stylesheet" type="text/css" href="style.css" />
    </head>
    <body>
<?php
function setline($conte,$i,$count,$ILines){
  $act1 = $i; 
  $act2 = 1*$ILines + $i; 
  $act3 = 2*$ILines + $i;
  $act4 = 3*$ILines + $i; 
  echo "<li>".$conte[$act1]."</li>\n"; // 0
  if ($act2 < $count){ echo "<li>".$conte[$act2]."</li>\n";}
  if ($act3 < $count){ echo "<li>".$conte[$act3]."</li>\n";}
  if ($act4 < $count){ echo "<li>".$conte[$act4]."</li>\n";}
}
//-----------main---------------
echo "<ul id=\"quad\">";
$anArry = array("CSS","XHTML","Semantics","Accessibility","Usability","Web Standards","PHP","Typography","Grids","CSS3","HTML5");
sort($anArry);
$count = count($anArry);
$Idiv = (int)($count/4);
if ($count - ($Idiv * 4)>0) {$ILines = $Idiv+1;} else {$ILines = $Idiv;}

for ($i = 0; $i < $ILines; $i++) {
      setline($anArry,$i,$count,$ILines);
}
echo "<ul/>";
?>
    </body>
</html>

接下来是4 column list正常标准外观。
为了得到它,我们只更改了for loop
从左到右排序(不是 OP想要的)

for ($i = 0; $i < $count; $i++) {
      echo "<li>".$anArry[$i]."</li>\n";
    }


现在我们知道了矩阵...

  1| 0-2 3-5 6-8 9-11
col| 1   2   3   4
---|---------------
r 1| 0   3   6   9
o 2| 1   4   7   10
w 3| 2   5   8   11

...我们可以写一个更简单的函数。

function sortfor4c($cont,$i,$ILines,&$ICol,&$IRow){
  echo "<li>".$cont[$ICol * $ILines - $ILines + $IRow -1]."</li>\n";
  $ICol++;
  if ($ICol > 4) {
       $ICol = 1;
       $IRow++;
  }      
 }
....
$ICol = 1;
$IRow = 1;

for ($i = 0; $i < $count; $i++) {
    sortfor4c($anArry,$i,$ILines,$ICol,$IRow);
}

style.css

body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6{ 
    margin:0;
    padding:0;
}

ol,ul{
    list-style:none;
}

body{
    font-family:Georgia, "Times New Roman", Times, serif;
    color:#333;
}

ul{
    width:760px;
    margin-bottom:20px;
    overflow:hidden;
    border-top:1px solid #ccc;
}
li{
    line-height:1.5em;
    border-bottom:1px solid #ccc;
    float:left;
    display:inline;
}

#quad li        { width:25%; }

【讨论】:

  • 在这里实现了你的代码ayurvedamantram.com/index1,但它根本不起作用
  • @Gags :你试过上面的 32 行代码吗?它很简单并且可以运行。
  • @Gags :从第一行复制到最后一行并保存到像 show.php 这样的文件中。在浏览器中运行show.php。它开箱即用。与“style.css”在同一个文件夹中。
  • 我会试着让你知道 moskito-x
  • @Gags :我也可以在您的代码中看到:&lt;ul&gt; &lt;li&gt;&lt;a href='#'&gt;Acidity&lt;/a&gt;&lt;/li&gt;
      没有 id 之类的:&lt;ul id="quad"&gt; &lt;li&gt;Acidity&lt;/li&gt;
    【解决方案2】:

    以下代码使用 2 个循环从 assoc 数组创建一个 4 列的表。 $z 被计算为按升序对每一列中的行进行排序。

    $count = count($result);
    $rows= floor($count/5);
    for ($x = 0; $x <= $rows; $x++) {
        for ($y = 0; $y <= 4; $y++) {
            $z=($rows*$y)+$x+$y;
            if($z<$count){
                $html .="<td>".$result[$z]['fmprmlink']."</td>\n";
            }else{
                $html .="<td></td>\n";
            }
            }
        $html .="</tr>\n";
    }
    $html .="</table>";
    echo  $html;
    

    【讨论】:

    • 编辑您的图片。一半的答案是空白的。
    【解决方案3】:

    大概,您会想要使用某种 for 循环来适当地对数据进行排序。你可以用 PHP 来做这件事,也可以用 JavaScript 来做。

    无论哪种方式,您都需要处理服务器返回的条目,以限制添加到每列的行数。处理数据的方式取决于服务器返回的方式。如果服务器发送代表相关数据单元的 JSON 数据(并且您正在使用 AJAX),您可能需要采用 javascript 方法。如果您计划在初始页面加载时加载所有菜单字段数据,您可能可以使用 PHP 来创建菜单条目。

    This 是一个使用 for 循环使用 PHP 创建表的示例。您应该能够对列表项和/或 div 执行相同的操作。如果这个答案令人困惑,那么 SO 和整个互联网上还有许多其他示例。

    <?php
    echo "<table border='1'><br />";
    
    for ($row = 0; $row < 5; $row ++) {
       echo "<tr>";
    
       for ($col = 1; $col <= 4; $col ++) {
            echo "<td>", [YOUR MENU ENTRY GOES HERE], "</td>";
       }
    
       echo "</tr>";
    }
    
    echo "</table>";
    ?>
    

    【讨论】:

    • 一个合适的例子完全依赖于您的数据库返回的数据。我刚刚添加的示例是针对数据库返回菜单项数组的一般情况。
    猜你喜欢
    • 2014-12-04
    • 2012-01-20
    • 2019-07-10
    • 1970-01-01
    • 2019-02-25
    • 2014-01-04
    • 1970-01-01
    • 2015-06-10
    • 2019-01-08
    相关资源
    最近更新 更多