我已经构建了我的第一个文件管理器,我需要一些导航部分的帮助。以下是此部分的代码:
# CONFIGURATION: Folder
$path = (empty($_GET['p']) ? '../../../' : '../../../'.$_GET['p']);
# CONTROL: The folder exists
if(file_exists($path)) {
$results = scandir($path);
}
# CONTROL: Root
if(!empty($_GET['p'])) {
$navigation_loop = explode('/', $_GET['p']);
if(count($navigation_loop) > 1) {
$sliced = array_slice($navigation_loop, 0, -1);
}
# LOOP
foreach($navigation_loop AS $navigation) {
echo '<a href="javascript:void(0)" class="filemanager-link" id="path-navigation" data="';
# CONTROL: There's more than one
if(count($navigation_loop) > 1) {
echo implode('/', $sliced);
# CONTROL: There's not more than one
} else {
echo $navigation;
}
echo '">';
echo $navigation;
echo '</a>';
}
}
$_GET['p']
包含当前文件夹的完整路径,即some/path/to/show/you
。文件名永远不会显示在此GET
!
现在出现问题:当我在some/path
并点击some
时,该网站会将我转到some
文件夹。但如果我在some/path/to
并点击some
,网站就会转到some/path
。
我知道问题是什么(array_slice($navigation_loop, 0, -1)
),但我不知道如何解决这个问题。如果我在some/path
,-1
功能将为array_slice()
。但是当我在some/path/to
时,如果我想转到-2
和some
,我应该-1
,如果我想转到some/path
。
如何解决此问题?
答案 0 :(得分:0)
你不能计算偏移吗?
$navigation_loop = explode('/', $_GET['p']);
$offset = -1 * (count($navigation_loop) - 1);
if(count($navigation_loop) > 1) {
$sliced = array_slice($navigation_loop, 0, $offset);
}
我不确定我是否完全理解这个问题,但这似乎应该为切片调用获取正确的参数。
答案 1 :(得分:0)
尝试使用主if语句:
if(!empty($_GET['p'])) {
$navigation_loop = explode('/', $_GET['p']);
# LOOP
for ($level=0; $level < count($navigation_loop); $level++) {
echo '<a href="javascript:void(0)" class="filemanager-link" id="path-navigation" data="';
# CONTROL: There's more than one
$sliced = array_slice($navigation_loop, 0, ($level+1));
if(count($navigation_loop) > 1) {
echo implode('/', $sliced);
# CONTROL: There's not more than one
} else {
echo $sliced;
}
echo '">';
echo $navigation_loop[$level];
echo '</a>';
}
}
应该更像你想要的。