0

我的问题的简短版本:有没有办法使用 PHP 来回显包含图像的目录的 URL?

长版:大家好,我正在开发一个简单的 CMS(使用 Kirby 以防万一),除了一件事外,我几乎可以完成所有工作。Kirby 是一个基于文件的 CMS,每个文件夹都是它自己的页面。我已将其设置为文件夹中的所有图像都会自动放置在页面上。这一切都很好,但问题是,我想在每个项目文件夹中都有一个子文件夹,其中包含更大版本的图像。我不想使用自动缩略图插件、灯箱或类似的东西。我想手动保存图像的两个版本。我设想了这样的事情:通过单击“缩略图”图像

website.com/projects/01-test/cat.jpg

可以打开一个更大的图像

website.com/projects/01-test/large/cat-large.jpg)

我希望我能以某种方式使用 PHP 来显示图像目录的完整 URL,而不是图像本身的名称。我最接近的是使用:

<?php echo $image->url(); ?>

但这给了http://website.com/projects/01-test/cat.jpg而我只需要http://website.com/projects/01-test

如果我能以某种方式自动化这个,那么我想我可以做类似的事情:

<a href="<?php echo $image->MYSTERY(); ?>/large/<?php echo $image->name(); ?>-large.jpg">

好的,我希望这是有道理的。我正在学习 PHP,所以如果之前已经介绍过,我深表歉意——我已经尝试过到处搜索,但可能只是我不太知道要搜索什么。您能提供的任何帮助将不胜感激!

4

3 回答 3

4

您可能正在查看dirname()

<?php echo dirname($image->url()); ?>

例如:

echo dirname('http://example.org/path/to/picture.jpg');
// http://example.org/path/to
于 2013-03-20T01:44:53.683 回答
0

将您的 URL 分解为一个数组并删除最后一个元素。using explode() - array_pop() - implode()像这样:

$arrayofurl = explode("/", $url);
array_pop($arrayofurl);
$final = implode("/",$arrayofurl);
于 2013-03-20T01:26:43.470 回答
0

根据您的问题,我假设$image->url();返回完整的图像 URL 并$image->name();返回图像的名称(不带分机),对吗?

所以我认为这应该可以解决问题,不是吗?

$urlPath = str_replace($image->name() . '.jpg', '', $image->url());

printf('<a href="%slarge/%s-large.jpg"><img src="%s"/></a>', $urlPath, $image->name(), $image->url());

更新:忘记这个答案,只需使用dirname().

只是为了好玩,下面是一个 JS 替代方案,它将遍历所有图像链接并设置 XL 图像路径:

<!doctype html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
</head> 
<body>
<a href="#"><img src="test.jpg"/></a><hr>
<a href="#"><img src="test2.jpg"/></a><hr>
<a href="#"><img src="test3.jpg"/></a>
<script>
    for(var a = document.getElementsByTagName("a"), b = 0;b < a.length;b++) {
      var c = a[b], d = new String(c.children[0].src), e = d.replace(/\\/g, "/").replace(/\/[^\/]*\/?$/, ""), f = d.replace(e, "");
      c.href = e + "/large" + f.replace(".jpg", "-large.jpg")
    }
    ;
</script>
</body>
</html>
于 2013-03-20T01:41:36.760 回答