Перечисление файлов в каталоге в навигацию - сначала нужно добавить класс - PullRequest
1 голос
/ 15 марта 2011

Я использовал следующее для вывода навигации из определенного каталога, но мне нужно немного ее настроить. Как я могу добавить 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);
    }
}
?>

Затем я звоню <?php navigation("/directory-name/"); ?> туда, где я хочу, чтобы оно появилось на странице.

В настоящее время будет выводиться что-то вроде:

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

Ответы [ 3 ]

1 голос
/ 15 марта 2011

Я не уверен, что полностью понимаю, но я могу дать вам то, что я догадался.

Сначала инициируйте эту переменную вне цикла while.

$first = true;

Затем, в самом конце из цикла while, сделайте следующее:

$first = false;

Прежде чем установить значение false, просто используйте его для определения, является ли элемент первым:

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

И поместите $class переменная внутри тега li выходной строки.

1 голос
/ 15 марта 2011

Использование переменной

При первом повторении цикла переменная $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);
    }
}
?>
0 голосов
/ 15 марта 2011

Я бы выбрал теги <li> из первого раунда создания ссылки, чтобы строка, которая создает ссылку, была бы

$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');
    }
...