PHP soll Teil einer URL an ein Javascript übergeben?

Landbote

Grünschnabel
Hallo Spezialisten,
habe folgendes Problem: Aus einer Bildergalerie (nextGenGallery für Wordpress) soll lediglich ein Teil der Adresse des aufgerufenen Bildes an ein Java-Script übergeben werden (unterstes Verzeichnis und Dateiname). Bisher wird der komplette Pfad übergeben.
Folgender Teil des entsprechenden php scheint mit das zu erledigen:

PHP:
<a href="javascript:picturetransfer('<?php echo $image->imageURL ?>')">Bild bestellen</a>

Wichtig scheint mir dabei der Teil
PHP:
<?php echo $image->imageURL ?>
zu sein.

Wie kann ich den Schnipsel meinen Bedürfnissen anpassen?

Schon mal herzlichen Dank
Landbote
http://www.der-langgoenser-landbote.de
 
Du könntest die Funktionen [phpf]basename[/phpf] für den Dateinamen und [phpf]dirname[/phpf] benutzen.
Wobei [phpf]dirname[/phpf] allerdings das oberste Verzeichnis zurückgibt, also müsstest du eine Schleife bauen.

Oder du trennst alles nach dem vorletztem Slash (/).
 
Hallo ComFreek,
erstmal vielen Dank für die schnelle Antwort.
Da ich von php nahezu unbeleckt bin, versuche ich das mal umzusetzen. M.E. müsste der Schnipsel dann so aussehen:

PHP:
<?php echo $image->image(dirname)/(basename) ?>

damit müsste, wenn ich richtig gedacht habe, das oberste Directory und der Dateiname ausgegeben werden?

wie kann ich denn eine Trennung nach dem letzten Slash realisieren?

Gruß
Landbote
 
Zu deinem Code-Schnipsel
Der ist leider vollkommen falsch. 'image' ist ein Attribut des Objektes '$image'. Du kannst es nicht als Funktion aufrufen, sondern musst der Funktion dieses Attribut übergeben:
PHP:
<?php echo basename($image->image); ?>
Das würde den Dateinamen ausgeben.

wie kann ich denn eine Trennung nach dem letzten Slash realisieren?
Du kannst die Funktion [phpf]explode[/phpf] benutzen.
Folgendes sollte deinen Anforderungen entsprechen:
PHP:
function getLastPathSegment($path, $delimiter=DIRECTORY_SEPARATOR)
{
  $parts = explode($delimiter, $path);
  $toReturn = $parts[count($parts)-2] . $delimiter . $parts[count($parts)-1];
  return $toReturn;
}

echo getLastSegment('/dir1/dir2/subdir1/subdir2/file.txt', '/');
/* Ergebnis: subdir2/file.ctp */
 
Hallo ComFreek,
wie Du sicherlich bemerkt hast, habe ich so gut wie keine Ahnung - ich versuchs aber mal:

Der von mir oben beschriebene Code-Schnipsel müsste demnach so aussehen:
HTML:
<a href="javascript:picturetransfer('<?php echo getLastSegment('/dir1/dir2/subdir1/subdir2/file.txt', '/');')">Bild bestellen</a>

Wie baue ich aber dann die Funktion in die PHP ein?

Hier mal der gesamte PHP-Code:

PHP:
<?php 
/**
Template Page for the image browser

Follow variables are useable :

	$image : Contain all about the image 
	$meta  : Contain the raw Meta data from the image 
	$exif  : Contain the clean up Exif data 
	$iptc  : Contain the clean up IPTC data 
	$xmp   : Contain the clean up XMP data 

 You can check the content when you insert the tag <?php var_dump($variable) ?>
 If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
**/
?>
<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($image)) : ?>
<script src="<?php echo get_option('home'); ?>/picturetransfer.js" type="text/javascript"></script>

<div class="ngg-imagebrowser" id="<?php echo $image->anchor ?>">

	<h3><?php echo $image->alttext ?></h3>

	<div class="pic"><?php echo $image->href_link ?></div>
	<div class="ngg-imagebrowser-nav"> 
		<div class="back">
			<a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo $image->previous_image_link ?>">? <?php _e('Back', 'nggallery') ?></a>
		</div>
		<div class="next">
			<a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo $image->next_image_link ?>"><?php _e('Next', 'nggallery') ?> ?</a>
		</div>
		<div class="counter"><?php _e('Picture', 'nggallery') ?> <?php echo $image->number ?> <?php _e('of', 'nggallery')?> <?php echo $image->total ?> <br/><a href="javascript:picturetransfer('<?php echo $image->imageURL ?>')">Bild bestellen</a>
</div>
		<div class="ngg-imagebrowser-desc"><p><?php echo $image->description ?></p></div>
	</div>	

</div>	

<?php endif; ?>
 
Du solltest eigentlich bei http://de.php.net/pathinfo noch ergänzende Hilfe finden.
Ausserdem solltest du, !ist aber kein muss!, wenn du den Interpreten nur kurz öffnest trotzdem
PHP:
<?php echo 'blubb'; ?>
mit einem Semicolon abschliessen, dann weiss der Interpret sofort, die Anweisung ist vorbei und wird nicht einfach abrubt geschlossen.
 
Du darfst natürlich nicht meinen Beispielpfad nehmen, sondern deinen!

Füge meine Funktion ganz am Anfang deines Skriptes ein und ändere deinen Code zu:
PHP:
<a href="javascript:picturetransfer('<?php echo getLastSegment($image->imageURL); ?>')">Bild bestellen</a>

Du solltest eigentlich bei http://de.php.net/pathinfo noch ergänzende Hilfe finden.
Allerdings kann [phpf]pathinfo[/phpf] den 'tiefsten' Ordner in der Hierarchie des Pfades auch nicht einzeln zurückgeben.

Und bitte schließe nächstes Mal deinen Code in die sog. Code-Tags ein: [code=php]Dein Code[/code].
Sonst kann man den unformatierten Code nicht lesen!
 
@Comfreek,
entschuldige bitte - hier noch mal der Code in korrekter Form:


PHP:
<?php 
/**
Template Page for the image browser

Follow variables are useable :

	$image : Contain all about the image 
	$meta  : Contain the raw Meta data from the image 
	$exif  : Contain the clean up Exif data 
	$iptc  : Contain the clean up IPTC data 
	$xmp   : Contain the clean up XMP data 

 You can check the content when you insert the tag <?php var_dump($variable) ?>
 If you would like to show the timestamp of the image ,you can use <?php echo $exif['created_timestamp'] ?>
**/
?>
<?php if (!defined ('ABSPATH')) die ('No direct access allowed'); ?><?php if (!empty ($image)) : ?>
<script src="<?php echo get_option('home'); ?>/picturetransfer.js" type="text/javascript"></script>

<div class="ngg-imagebrowser" id="<?php echo $image->anchor ?>">

	<h3><?php echo $image->alttext ?></h3>

	<div class="pic"><?php echo $image->href_link ?></div>
	<div class="ngg-imagebrowser-nav"> 
		<div class="back">
			<a class="ngg-browser-prev" id="ngg-prev-<?php echo $image->previous_pid ?>" href="<?php echo $image->previous_image_link ?>">? <?php _e('Back', 'nggallery') ?></a>
		</div>
		<div class="next">
			<a class="ngg-browser-next" id="ngg-next-<?php echo $image->next_pid ?>" href="<?php echo $image->next_image_link ?>"><?php _e('Next', 'nggallery') ?> ?</a>
		</div>
		<div class="counter"><?php _e('Picture', 'nggallery') ?> <?php echo $image->number ?> <?php _e('of', 'nggallery')?> <?php echo $image->total ?> <br/><a href="javascript:picturetransfer('<?php echo $image->imageURL ?>')">Bild bestellen</a>
</div>
		<div class="ngg-imagebrowser-desc"><p><?php echo $image->description ?></p></div>
	</div>	

</div>	

<?php endif; ?>
 
Zurück