我对某些编程技术很新。对OOP和MVC来说一般都是新手。而且我很确定这是我的第一个StackOverflow问题!
我刚刚下载了CodeIgniter并为自己设计了一个项目。
我有一个服务器上的文件和文件夹列表,并希望使用opendir,readdir和closedir等在ul和li的网页上列出它们 - 我之前在函数中已经完成了这个但不知道从哪里开始使用CodeIgniter。
是否有帮助者或图书馆已经这样做了?如果没有,最好的方法是什么?我应该将我的代码放在模型文件夹中吗?
太困惑了!
答案 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;
}
?>
我没有检查过这个语法错误,但它应该可以正常工作。希望这会有所帮助..