CodeIgniter - 使用opendir的文件和文件夹列表

时间:2013-03-26 16:25:25

标签: file list codeigniter directory opendir

我对某些编程技术很新。对OOP和MVC来说一般都是新手。而且我很确定这是我的第一个StackOverflow问题!

我刚刚下载了CodeIgniter并为自己设计了一个项目。

我有一个服务器上的文件和文件夹列表,并希望使用opendir,readdir和closedir等在ul和li的网页上列出它们 - 我之前在函数中已经完成了这个但不知道从哪里开始使用CodeIgniter。

是否有帮助者或图书馆已经这样做了?如果没有,最好的方法是什么?我应该将我的代码放在模型文件夹中吗?

太困惑了!

4 个答案:

答案 0 :(得分:2)

我希望你在过去的一年里已经了解了MVC架构:)

现在谈谈你的问题。您要求的助手或库确实存在。对于同样的问题"我使用了目录助手及其功能 directory_map(' relative / path / to / your / directory')。此函数从您的目录中获取递归内容,并将其排序为数组,如此

    Array
    (
    [banner] => Array
        (
        [0] => banner1.jpg
        [1] => banner2.jpg
        [2] => banner3.jpg
        [3] => banner4.jpg
        )
    [galerie] => Array
        (
        [0] => 0-PB083393.JPG
        [1] => DSCN2897.JPG
        [2] => DSCN2908.JPG
        [3] => DSCN2917.JPG
        [thumb] => Array
            (
                [0] => 0-PB083393_thumb.JPG
                [1] => DSCN2897_thumb.JPG
                [2] => DSCN2908_thumb.JPG
            )
        )
    [0] => mapa.jpg
    )

非常整洁,您可以在 - 例如 - foreach循环中使用它并添加ul / li标签。

这个问题可能在一年之后无关紧要,但我希望它可以帮助其他人。

答案 1 :(得分:1)

哈。这很好笑。我正在寻找别的东西,偶然发现了我的第一个CI问题而没有意识到这是我:D

我在不到一个月的时间里就已经到目前为止。

我找到了Directory Helper - directory_map,它基本上将你的文件夹结构放入一个数组数组中。

我们在模型中创建了一个递归函数,将其转换为正确的下拉菜单......当它是一个文件时,它会添加一个到该文件的href链接。

http://ellislab.com/codeigniter/user-guide/helpers/directory_helper.html

答案 2 :(得分:0)

如果我这样做,我会:

(1)创建一个Library类,其方法采用目录名并返回 文件数组。

(2)在我的控制器中,我会加载库并使用它来获取感兴趣的文件夹的文件列表。

(3)然后我会在将文件名数组传递给视图时加载视图 我会收集清单。

首先学习如何使用控制器加载带有数据的视图(以静态数组开头)。然后学习如何创建库并与控制器集成。

除非您想使用本机PHP函数,否则您可能还会阅读CodeIgniter的文件助手库。

另外,了解PHP单元测试。

我倾向于使用模型来处理来自MySQL数据库的数据。在您的情况下,您正在处理有关文件系统的信息。

祝你好运,CI是PHP / MySQL框架的不错选择!

答案 3 :(得分:0)

首先,欢迎来到CodeIgniter。它规则。现在...

您需要一个控制器功能来实际处理目录,类似于:

public function dir_to_array($dir, $separator = DIRECTORY_SEPARATOR, $paths = 'relative') 
{
    $result = array();
    $cdir = scandir($dir);
    foreach ($cdir as $key => $value)
    {
        if (!in_array($value, array(".", "..")))
        {
            if (is_dir($dir . $separator . $value))
            {
                $result[$value] = $this->dir_to_array($dir . $separator . $value, $separator, $paths);
            }
            else
            {
                if ($paths == 'relative')
                {
                    $result[] = $dir . '/' . $value;                    
                }
                elseif ($paths == 'absolute')
                {
                    $result[] = base_url() . $dir . '/' . $value;
                }
            }
        }
    }
    return $result;
} 

现在你需要调用该函数来返回结果,类似于:

$modules['module_files'] = $this->dir_to_array(APPPATH . 'modules');

这会将结果放在一个名为$ modules的变量中,你可以按照你想要的方式使用它,通常把它放在这样的视图中:

$this->load->view('folder/file', $modules);

如果您为load->视图函数提供了可选的第三个参数TRUE,则会再次返回该视图的结果,以便您在任何您喜欢的地方使用,否则它将在您调用它的地方回显。视图可能如下所示:

<?php

    if (isset($module_files) && !empty($module_files))
    {
        $out = '<ul>';
        foreach ($module_files as $module_file)
        {
            if (!is_array($module_file))
            {

                // the item is not an array, so add it to the list.
                $out .= '<li>' . $module_file . '</li>';
            }
            else
            {
                // Looping code here, as you're dealing with a multi-level array.
                // Either do recursion (see controller function for example) or add another
                // foreach here if you know exactly how deep your nested list will be.
            }
        }
        $out .= '</ul>';
        echo $out;
    }

?>

我没有检查过这个语法错误,但它应该可以正常工作。希望这会有所帮助..