1

我已经构建了我的第一个文件管理器,我需要一些导航部分的帮助。这是本节的代码:

# 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应该是。-2some-1some/path

我该如何解决这个问题?

4

2 回答 2

0

你不能计算偏移量吗?

$navigation_loop = explode('/', $_GET['p']);
$offset = -1 * (count($navigation_loop) - 1);
if(count($navigation_loop) > 1) {
    $sliced = array_slice($navigation_loop, 0, $offset);
}

我不确定我是否完全理解这个问题,但这似乎应该为切片调用获取正确的参数。

于 2013-07-19T00:03:32.133 回答
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>';
    }
}

应该更像你想要的。

于 2013-07-19T00:21:09.240 回答