Сборка журнала Reader с помощью PHP RecursiveTreeIterator - PullRequest
2 голосов
/ 28 февраля 2012

У меня есть эта структура каталогов для журналов

logs
-2012
--01
---01.php
---02.php
--02
---20.php
---23.php

Я хочу иметь возможность использовать PHP RecursiveTreeIterator, чтобы иметь возможность отображать дерево, имеющее фактические файлы php (не dirs), в качестве ссылок для отображения содержимого файла.

Использование первого ответа на этот вопрос в качестве руководства: Сортировка файлов по каталогам с использованием SPL's DirectoryTreeIterator

Я новичок в большинстве SPL в PHP 5, поэтому мне нужна помощь здесь. Как мне построить дерево? Спасибо!

1 Ответ

4 голосов
/ 28 февраля 2012

В качестве альтернативы ссылкам, которые я указывал в комментариях:

Вы также можете расширить метод TreeIterator current(), чтобы обеспечить дополнительную разметку:

class LinkedRecursiveTreeIterator extends RecursiveTreeIterator
{
    public function current()
    {
        return str_replace(
            $this->getInnerIterator()->current(),
            sprintf(
                '<a href="%1$s">%1$s</a>',
                $this->getInnerIterator()->current()
            ),
            parent::current()
        );
    }
}

$treeIterator = new LinkedRecursiveTreeIterator(
    new RecursiveDirectoryIterator('/path/to/dir'),
    LinkedRecursiveTreeIterator::LEAVES_ONLY);

foreach($treeIterator as $val) echo $val, PHP_EOL;

Выше будет напечатано обычное дерево ASCII TreeIterator печатает, но обернет имя файла в гиперссылки.Обратите внимание, что $this->getInnerIterator()->current() возвращает объекты File, поэтому вы также можете получить доступ к любым другим свойствам файла, таким как размер файла, последнее изменение и т. Д.

...