Seite 1 von 1

PHP Problem

Verfasst: 11.08.2011, 19:02
von Can

Code: Alles auswählen

 <?php
				 
$dir = get_stylesheet_directory_uri&#40;&#41;."/headerdiashow/";

foreach &#40;glob&#40;$dir."*.jpg"&#41; as $filename&#41;&#123;
    echo '<img src="'.$filename.'" width="992" height="373" alt="" >';
&#125; 
?>

Soll in nem Wordpress Blog in einen Ordner im aktuellen Template gehen und von dort aus alle JPG auflisten. Erzeugt aber :

Invalid argument supplied for foreach() in <b>/www/htdocs/.../_sandbox/.../wp1/wp-content/themes/..../header.php</b> on line
Wenn ich einen normalen Pfad eingebe funktioniert alles. Wenn ich ein / vor den Pfad setze kommt auch wieder der Fehler. Mit dem von Wordpress generiertem Pfad gehts gar nicht.


Wo liegt der Fehler ?
Can

Verfasst:
von

Verfasst: 11.08.2011, 19:40
von 007
Was gibt denn "get_stylesheet_directory_uri()" zurück?

Ich denke die Funktion "get_stylesheet_directory()" tut eher was Du brauchst...

Verfasst: 11.08.2011, 21:17
von Can
get_stylesheet_directory() gibt mir den Pfad abhängig vom Server und nicht von der Domain zurück also ehr unbrauchbar.
Mit uri kommt dann laut echo genau der richtige Pfad. Nur gibt das foreach mir dann den Error aus.

Mit get_bloginfo ( 'stylesheet_directory' ) ist es übrigens das selbe... Der Pfad stimmt laut echo aber sobald das foreach drannkommt ist der wurm drinn!

Verfasst:
von
Content Erstellung von ABAKUS Internet Marketing
Ihre Vorteile:
  • einzigartige Texte
  • suchmaschinenoptimierte Inhalte
  • eine sinnvolle Content-Strategie
  • Beratung und Umsetzung
Jetzt anfragen: 0511 / 300325-0

Verfasst: 11.08.2011, 21:41
von chris21
endet die URI bei get_style_directory_uri denn mit einem / ?

Falls ja, dann sollte es doch eher

$dir = get_stylesheet_directory_uri()."headerdiashow/";

sein...

Ansonsten auch mal überprüfen, ob dort irgendwelche Rewrites reinpfuschen?

Verfasst: 12.08.2011, 08:15
von Can
Habs jetzt fast. Das problem war der output war ne url und ich brauch ja zum auslesen nen relativen Pfad und die URL nur zum ausgeben.


<?
$dir = get_stylesheet_directory() . "/headerdiashow/";
$path = get_stylesheet_directory_uri();

foreach (glob($dir."*.jpg") as $filename){
echo '<img src="'.$filename.'" width="" height="" alt="" >';
}

?>


Nur weiß ich nicht wie ich die jetzt die variable path ausgeben soll als dateipfad. nach den bildern suchen soll er in $dir. und die ausgabe dann mit $path . * . jpg ?
Jemand ne Idee?
Gruß Can

Verfasst: 12.08.2011, 08:24
von Synonym
Habs jetzt fast. Das problem war der output war ne url und ich brauch ja zum auslesen nen relativen Pfad und die URL nur zum ausgeben.
Das wollte ich gerade schreiben. Im Foreach brauchst Du den Serverpfad und nicht die Webadresse.

Ich weiß nun nicht, was WP da genau ausgibt, aber wenn $filename der Dateiname ist und $path die URI zum Verzeichnis, dann baue das doch einfach zusammen.

echo '<img src="'.$path.'/headerdiashow/'.$filename.'" width="" height="" alt="" >';

mach doch einfach mal ein:
echo $path.'/headerdiashow/'.$filename.'<br />';
im Foreach, dann siehst Du ja, ob im "zusammengebastelten" Pfad was fehlt oder zu viel ist, oder ob er stimmt.

Verfasst: 12.08.2011, 09:17
von Can
Synonym hat geschrieben:
Habs jetzt fast. Das problem war der output war ne url und ich brauch ja zum auslesen nen relativen Pfad und die URL nur zum ausgeben.
Das wollte ich gerade schreiben. Im Foreach brauchst Du den Serverpfad und nicht die Webadresse.

Ich weiß nun nicht, was WP da genau ausgibt, aber wenn $filename der Dateiname ist und $path die URI zum Verzeichnis, dann baue das doch einfach zusammen.

echo '<img src="'.$path.'/headerdiashow/'.$filename.'" width="" height="" alt="" >';

mach doch einfach mal ein:
echo $path.'/headerdiashow/'.$filename.'<br />';
im Foreach, dann siehst Du ja, ob im "zusammengebastelten" Pfad was fehlt oder zu viel ist, oder ob er stimmt.
ne $dir zeigt mir den www/htdocs/ pfad an. der muss komplett weg.
also es soll im $dir nach den bildern schauen und diese dann mit
$path . "/headerslideshow/" . $file ausgeben.
der $dir pfad muss komplett weg.
Weiter komm ich nicht. :D

Verfasst: 12.08.2011, 09:35
von Synonym
ne $dir zeigt mir den www/htdocs/ pfad an. der muss komplett weg.
Warum? Verstehe ich nun nicht. Das $dir, also den Serverpfad, brauchst Du doch, um das Verzeichnis einlesen zu können.

Für die Anzeige brauchst Du dann $path und in dem wird wohl das "www/htdocs/" nicht stehen, oder?

Schreib hier doch mal im Klartext hin, was die beiden Funktionen get_stylesheet_directory() und get_stylesheet_directory_uri() genau als Ergebnis liefern. Und ich meine genau, nichts weglassen oder so.

https://codex.wordpress.org/Function_Re ... ectory_uri
Note that this returns a properly-formed URI; in other words, it will be a web-address (complete with http:// or https:// etc). As such, it is most appropriately used for links, referencing additional stylesheets, or probably most commonly, images (in this examples, inside an inline <style> declaration within a template .php file): .wp-menu-image { background: url(<?php echo get_stylesheet_directory_uri() ?>/images/gavel.png) }
Das brauchst Du also zur Anzeige der Bilder, nur eben nicht wie um Beispiel /images/, sondern Deinen Ordner.

https://codex.wordpress.org/Function_Re ... _directory
Note that this returns an absolute server path (eg: /var/www/html/myblog/wp-content/themes/my_theme), not a URI. As such, it's most suitable for file-level operations, such as: require_once(get_stylesheet_directory() . '/my_include.php');
So, das ist also der Serverpfad, den brauchst Du um das Verzeichnis überhaupt einlesen zu können.

Hm, aber genau das hatte ich ja schon zuvor geschrieben. Und wenn ich mich recht erinnere Chris auch.

Verfasst: 12.08.2011, 09:44
von Synonym
Nachtrag... Das scheint am glob zu liegen... Hatte ich bisher noch nicht genutzt, daher ist mir das nicht aufgefallen.

Das foreach bzw. das AS $filename beinhaltet also nicht nur den Dateinamen, sondern auch den Serverpfad. Und der stört dann im Image, das ist korrekt.
glob — Find pathnames matching a pattern
Warum nimmst Du daher nicht einfach einen normalen Aufruf des Verzeichnisses, also ohne das glob, sondern opendir und readdir? Oder Du musst den Path eben nachträglich wieder entfernen. Oder versuchen, ohne get_stylesheet_directory() zu arbeiten und den Pfad zu den Bilder selbst festlegen, eventuell in Kombination mit /wp-content/themes/'.get_stylesheet().'/ordner' (nur als Beispiel)

Verfasst: 03.10.2011, 20:06
von angelicaahlu
get_stylesheet_directory () gives me the path depends on the server and not from the domain back so honest unusable.
With loud echo uri is then exactly the right path. Only then is the foreach me from the error. get_bloginfo With ('stylesheet_directory') it is actually the same ... The path is correct but once that is loud echo drankommt foreach splashing around the worm!