Може ли PHP да повтори адреса на ДИРЕКТОРИЯТА, съдържаща изображение или файл?

КРАТКА ВЕРСИЯ НА МОЯ ВЪПРОС: Има ли начин с помощта на 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="/bg<?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(); връща името (без ext) на изображението, нали?

Така че мисля, че това трябва да свърши работа, нали?

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

printf('<a href="/bg%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="/bg#"><img src="test.jpg"/></a><hr>
<a href="/bg#"><img src="test2.jpg"/></a><hr>
<a href="/bg#"><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