【问题标题】:Dynamically create a grid layout using div tag in PHP在 PHP 中使用 div 标签动态创建网格布局
【发布时间】:2018-12-10 17:16:35
【问题描述】:

所以我有一个类似于one 的问题,但我只在普通 PHP 中应用它,而不是在 wordpress 中。经过无数小时的努力,我终于得到了答案,但不知何故,如果我增加网格编号的大小,项目将无法对齐。

我希望它看起来像这样:

-----------
- 1 2 3 4 -
-----------

但是: 正如我的问题所述,如果我尝试增加网格(或更准确地说是项目),它会变成这样:

-----------
- 1 2 3 4 -
-   5     -
-6        -
-7        -
-----------

它变得杂乱无章。下面是我正在尝试的代码。

<div class="container">
<?php
$i=0;
$item=0;
$html_tag = '<div class = "row"><div class="col 3">';

while($item <= 4)
{
?>
    <?php if($i % 4 == 0) {
        $html_tag .= 'col '.$i.'</div>';
    }
    else {
        $html_tag .= '<div class="col"> col '.$i.'</div>';
    }
    ?>
<?php
    $i++;
    $item++;
}
$html_tag .= '</div>';
?>

<?php echo $html_tag ?>

附:我正在使用 twitter bootstrap 4 的响应能力。

编辑:

请注意下面的屏幕截图,我刚刚意识到在 div 行内有一个额外的文本是 'col ?3' 而不是另一个 div 列(未创建)。

【问题讨论】:

  • 您是否使用浏览器上的检查功能来查看实际呈现的代码?
  • 我做了...但我在组织实际代码时遇到了麻烦。我似乎无法控制 if 语句的放置位置或方式
  • 可以使用css显示网格属性

标签: php html bootstrap-4


【解决方案1】:

接受的答案有问题。它不会关闭最后一行。它需要另一个条件。

$html = '';
$totalItemPerLine = 3;
$totalItem = 7;
for($i = 0; $i < $totalItem; $i++)
{
    if($i % $totalItemPerLine == 0)
    {
        $html .= '<div class="row">'; // OPEN ROW
    }

    $html .= '<div class="col"> col '.$i.'</div>';

    if($i % $totalItemPerLine == ($totalItemPerLine-1) || $i == ($totalItems-1))
    {
        $html .= '</div>'; // CLOSE ROW
    }
}

echo $html;

【讨论】:

    【解决方案2】:

    你应该检查你的代码,最终的结构不正确。

    这就是你得到的

    <div class="container">
        <div class="row">
            <div class="col 3">col 0</div>
            <div class="col"> col 1</div>
            <div class="col"> col 2</div>
            <div class="col"> col 3</div>
            col 4
        </div>
    </div>
    

    试试这个代码

    $html = '';
    $totalItemPerLine = 3;
    $totalItem = 7;
    for($i = 0; $i < $totalItem; $i++)
    {
        if($i % $totalItemPerLine == 0)
        {
            $html .= '<div class="row">'; // OPEN ROW
        }
    
        $html .= '<div class="col"> col '.$i.'</div>';
    
        if($i % $totalItemPerLine == ($totalItemPerLine-1))
        {
            $html .= '</div>'; // CLOSE ROW
        }
    }
    
    echo $html;
    

    注意:您可以使用while 做同样的事情,但我使用for 是为了便于阅读

    编辑:

    根据您的评论@DavidDiaz,这是直接使用 HTML 的代码 但是我建议你学习POO并使用类来做这个页面

    $html = '';
    $totalItemPerLine = 3;
    $totalItem = 7;
    for($i = 0; $i < $totalItem; $i++)
    {
        if($i % $totalItemPerLine == 0)
        {?>
            <div class="row"> <!-- OPEN ROW -->
        <?php } ?>
    
        <div class="col"> col <?= $i ?> </div>
    
        <?php if($i % $totalItemPerLine == ($totalItemPerLine-1))
        { ?>
            </div> <!-- CLOSE ROW -->
        <?php }
    } ?>
    

    【讨论】:

    • 谢谢,成功了。,,我会深入研究你的代码,以便我能很好地掌握它。,
    • 如果您有更多问题,我在这里。请不要忘记接受我的回答;)
    • 顺便说一句,如果我将其编码为 '
      ',它还能工作吗?正如你所看到的,它假设有很多 div 元素,但由于我试图解决它的复杂程度,我决定用最少的元素对其进行试验。
    • 这里是screenshot 我想要实际放入的内容。
    • 如果你想直接打印一些HTML,你可以,但你必须在任何地方都这样做,并删除变量$html。在您的screenshort中只有一列,那是您想要的吗?那么为什么要尝试做一个真正的网格呢?
    猜你喜欢
    相关资源
    最近更新 更多
    热门标签