2

我对某些编程技术相当陌生。一般来说,对于 OOP 和 MVC 来说非常新。我很确定这是我的第一个 StackOverflow 问题!

我刚刚下载了 CodeIgniter 并为自己准备了一个小项目。

我在服务器上有一个文件和文件夹列表,并想使用 opendir、readdir 和 closedir 等在 ul 和 li 的网页上列出它们 - 我之前在函数中以程序方式完成了此操作,但没有甚至想从 CodeIgniter 开始。

是否有已经这样做的助手或库?如果没有,最好的方法是什么?我应该把我的代码放在模型文件夹中吗?

如此迷茫!

4

4 回答 4

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 标签。

可能一年后这个问题不相关,但我希望它可以帮助其他人。

于 2015-01-09T15:15:14.017 回答
1

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

到目前为止,我在不到一个月的时间内就使用了 CI。

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

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

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

于 2013-04-23T17:24:42.107 回答
0

如果我这样做,我会:

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

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

(3) 然后我会加载一个视图,同时将文件名数组传递给我将组装列表的视图。

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

除非您想使用原生 PHP 函数,否则您可能还会阅读 CodeIgniter 的File Helper库。

此外,了解 PHP 单元测试。

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

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

于 2013-03-26T16:34:53.493 回答
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->view 函数提供可选的第三个参数 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;
    }

?>

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

于 2013-03-27T06:55:18.757 回答