将目录中的文件列出到导航中 - 需要首先添加类

发布于 2024-10-21 19:17:16 字数 1250 浏览 2 评论 0原文

我一直在使用以下内容从特定目录输出导航,但需要稍微调整它。如何将 class="first" 添加到输出的第一个

  • 项?对于我的一生,我似乎无法弄清楚如何!
  • <?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);
        }
    }
    ?>
    

    然后我调用 我希望它出现在页面中的位置。

    目前会输出如下内容:

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

    I've been using the following to output navigation from a specific directory but need to adjust it slightly. How can I add class="first" to the first <li> item that is outputted? For the life of me I can't seem to work out how!

    <?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);
        }
    }
    ?>
    

    I then call <?php navigation("/directory-name/"); ?> where I want it to appear in the page.

    This currently would output something like:

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

    如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

    扫码二维码加入Web技术交流群

    发布评论

    需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

    评论(3

    小情绪 2024-10-28 19:17:16

    我不确定我完全理解,但我可以给你我的猜测。

    首先,在 while 循环外部启动此变量。

    $first = true;
    

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

    $first = false;
    

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

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

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

    I'm not sure I completely understand, but I can give you what I guessed.

    First, initiate this variable outside of the while loop.

    $first = true;
    

    Then, at the very end of the while loop, do this:

    $first = false;
    

    Before you set that to false, just use this for finding if the item is the first:

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

    And put the $class variable inside the li tag the output string.

    赠我空喜 2024-10-28 19:17:16

    使用变量

    第一次重复循环时,变量$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);
        }
    }
    ?>
    

    Using a variable

    The first time the loop will be repeated the variable $first_time equals to true. You can then use that variable in an if statement to determine the class of the current li element.

    Edit your code to this

    <?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);
        }
    }
    ?>
    
    白芷 2024-10-28 19:17:16

    我会将

  • 标记从第一轮链接创建中取出,以便创建链接的行只是
  • $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');
        }
    

    I would take the <li> tags out of the first round of link creation, so that the line that creates the link would just be

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

    And then add them in the final iteration (since that's after your sort)

        foreach($links as $key=>$link) {
            class="";
            if ($key==0) class = " class='first'";
            echo ('<li'.class.'>'.$link.'</li>\n');
        }
    
    ~没有更多了~
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文