【问题标题】:Listing files in a directory into navigation - need to add class to first将目录中的文件列出到导航中 - 需要首先添加类
【发布时间】:2011-03-15 14:44:52
【问题描述】:

我一直在使用以下内容从特定目录输出导航,但需要稍微调整一下。如何将class="first" 添加到输出的第一个<li> 项目?对于我的一生,我似乎无法弄清楚如何!

<?php
function navigation($path) {
    if ($handle = opendir($_SERVER["DOCUMENT_ROOT"].$path)) {
        while (false !== ($file = readdir($handle))) {
            if ($file != '.' && $file != '..' && $file != 'index.php') {
                $label = str_replace('.php', '', $file);
                $label = str_replace("-", " ", $label);
                $label = ucfirst($label);
                $file = str_replace('.php', '/', $file);
                $links[] = '<li><a href="' . $path . $file . '" title="' . $label . '">' . $label . '</a></li>' . "\n";
                sort($links);
            }
        }
        foreach($links as $link) {
            echo ($link);
        }

        closedir($handle);
    }
}
?>

然后我调用 &lt;?php navigation("/directory-name/"); ?&gt; 我希望它出现在页面中的位置。

这目前会输出如下内容:

<ul>
    <li><a href="Path to file" title="Label">Label</a></li>
    <li><a href="Path to file" title="Label">Label</a></li>
</ul>

【问题讨论】:

    标签: php list file directory navigation


    【解决方案1】:

    我不确定我是否完全理解,但我可以告诉你我的猜测。

    首先,在while循环的外部启动这个变量。

    $first = true;
    

    然后,在 while 循环的最后,执行以下操作:

    $first = false;
    

    在将其设置为 false 之前,只需使用它来查找项目是否是第一个:

    $class = $first?" class='first'":'';
    

    并将$class 变量放在li 标记内输出字符串。

    【讨论】:

    • 非常感谢。对问题进行了排序。导航的第一项需要首先使用类来设置与其他项略有不同的样式。感谢您的宝贵时间。
    • 没问题。写完没花五分钟:)
    【解决方案2】:

    使用变量

    第一次循环将重复变量$first_time 等于true。然后,您可以在 if 语句中使用该变量来确定当前 li 元素的类。


    将您的代码编辑到此

    <?php
    function navigation($path) {
        $first_item = true;
    
        if ($handle = opendir($_SERVER["DOCUMENT_ROOT"].$path)) {
            while (false !== ($file = readdir($handle))) {
                if ($file != '.' && $file != '..' && $file != 'index.php') {
                    if($first_item === true)    $li_class = ' class="first"';
                    else                        $li_class = '';
    
                    $label = str_replace('.php', '', $file);
                    $label = str_replace("-", " ", $label);
                    $label = ucfirst($label);
                    $file = str_replace('.php', '/', $file);
                    $links[] = '<li' . $li_class . '><a href="' . $path . $file . '" title="' . $label . '">' . $label . '</a></li>' . "\n";
                    sort($links);
    
                    $first_item = false;
                }
            }
            foreach($links as $link) {
                echo ($link);
            }
    
            closedir($handle);
        }
    }
    ?>
    

    【讨论】:

    • 恐怕这似乎不起作用。没有错误,但没有输出任何不同。
    • @Marc Sanders:对不起,我犯了一个错误。我已经测试并更新了我的问题。我已经移动$first_item = false。它现在对我有用。
    【解决方案3】:

    我会从第一轮链接创建中取出&lt;li&gt; 标签,这样创建链接的行就是

    $links[] = '<a href="' . $path . $file . '" title="' . $label . '">' . $label . '</a>';
    

    然后在最后的迭代中添加它们(因为那是在你的排序之后)

        foreach($links as $key=>$link) {
            class="";
            if ($key==0) class = " class='first'";
            echo ('<li'.class.'>'.$link.'</li>\n');
        }
    

    【讨论】:

    • 这似乎也是一个很好的解决方案,所以也会尝试这个例子。感谢您的宝贵时间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-03-05
    • 1970-01-01
    • 2019-08-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-09
    相关资源
    最近更新 更多