使用 CSS 和 PHP/MySQL 的动态下拉菜单

Posted

技术标签:

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

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

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

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

<?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 行之后的第一列中一样,它将创建其他列等等...希望我没有错。 !! 我知道的想法。但是如何实现这一点不确定... 关于您的两个结果,什么是“不需要”?你能在你的问题中解释你需要什么吗? 【参考方案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>";
?>

【讨论】:

一个合适的例子完全依赖于您的数据库返回的数据。我刚刚添加的示例是针对数据库返回菜单项数组的一般情况。

以上是关于使用 CSS 和 PHP/MySQL 的动态下拉菜单的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 php/Mysql 动态更改 CSS 样式。我想创建每个用户独有的主题?

JavaScript 进阶篇的学习~

来自 PHP/MySQL 的 Ajax 加载生成带有变量传递的 Bootstrap 下拉列表

当 css id 和 name 都是动态生成时,Capybara 从嵌套下拉列表中选择

如何为移动屏幕的导航栏项目添加切换按钮,并使用 HTML、CSS 和 Bootstrap v4 将它们切换为下拉菜单

无法让 Materialize css 下拉列表与动态加载的模式一起使用