Может ли PHP повторить адрес DIRECTORY, содержащего изображение или файл?

КРАТКАЯ ВЕРСИЯ МОЕГО ВОПРОСА: есть ли способ с помощью 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 по мере продвижения, поэтому прошу прощения, если это уже обсуждалось раньше — я пытался искать везде, но, возможно, я просто не совсем знаю, что искать. Любая помощь, которую вы можете предложить, будет принята с благодарностью!


person ornmnt    schedule 20.03.2013    source источник


Ответы (3)


Вы, вероятно, смотрите на dirname():

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

Например:

echo dirname('http://example.org/path/to/picture.jpg');
// http://example.org/path/to
person Ja͢ck    schedule 20.03.2013
comment
Это именно то, что я искал. Большое спасибо всем! - person ornmnt; 20.03.2013

Взорвите свой URL-адрес, чтобы он был массивом, и удалите последний элемент. using explode() - array_pop() - implode() вот так:

$arrayofurl = explode("/", $url);
array_pop($arrayofurl);
$final = implode("/",$arrayofurl);
person egig    schedule 20.03.2013

Из вашего вопроса я предполагаю, что $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>
person eyecatchUp    schedule 20.03.2013