问题描述
实现一个类似wiki的东西,现在可以解决的是实现PHP遍历了文件夹以文件并能在前台显示,但是我现在想解决的是怎么协调好让每个文件对应着相应的静态网页,应该怎么批量实现。
问题出现的环境背景及自己尝试过哪些方法
用过白痴的办法,手动添加网页,然后被骂了,当然我也知道这个方法不对。Thinkphp3版本有个函数可以,但是5把它给取消了。
相关代码
// 请把代码文本粘贴到下方(请勿用图片代替代码)
控制器部分:
public function frame_wiki_index()//展示目录
{
/**@var callable $getDir */
$getDir = function ($path) use (&$getDir) {
$lists = [];
//判断目录是否为空
if (!file_exists($path)) {
return $lists;
}
$files = scandir($path);
foreach ($files as $v) {
/**@var string $v */
$newPath = $path . DIRECTORY_SEPARATOR . $v;
if (is_dir($newPath) && $v != '.' && $v != '..') {
$lists[] = [
"title" => $v,
"lists" => $getDir($newPath)
];
} else if (is_file($newPath)) {
$lists[] = [
"title" => $v,
"lists" => []
];
}
}
return $lists;
};
$path = realpath(__DIR__ . '/../view\Book\test');
$list = $getDir($path);
dump($list);
$num = count($list);
//拼接路径
while ($num--) {
$apath_route = $list[$num]["title"];
$bpath_route = $list[$num]["lists"][0]["title"];
$cpath_route = $list[$num]["lists"][0]["lists"][0]["title"];
$str_s = $path . '/' . $apath_route . '/' . $bpath_route . '/' . $cpath_route;
echo $str_s;
echo "<br>";
$file_path = $str_s;
//读取文件
if (file_exists($file_path)) {
$fp = fopen($file_path, "r");
echo "this is here";
$str = "";
$buffer = 1024; //每次读取 1024 字节
while (!feof($fp)) { //循环读取,直至读取完整个文件
$str .= fread($fp, $buffer);
}
$str = str_replace("\r\n", "<br />", $str);//文件内容
}
}
$this->assign('test', $list);
return $this->fetch();
}
前端部分
<html>
<body>
{volist name = "test" id="vo"}
<h2>
<a href="index_one.html?id={$i}" target="abc">章节{$vo.title}.{$i}</a></h2>
{volist name = "vo[ 'lists'] " id="voo "}
<h3><a href="index_one_1.html?di={$i}" target="abc">一级菜单{$voo.title}</a></h3>
{volist name = "voo[ 'lists'] " id="vooo "}
<ul>
<li><a href="index_one_2.html?id={$i}" target="abc">二级菜单{$vooo.title}</a></li>
</ul>
{/volist} {/volist} {/volist}
</body>
</html>
你期待的结果是什么?实际看到的错误信息又是什么?
想实现静态网页的功能
就是点击左侧的目录,然后右侧的内容刷新。