Seite 1 von 1
Modul mit "foreach" Befehl
Verfasst: Mi 7. Sep 2011, 20:30
von optimusx
Guten Tag zusammen
Ich hab ein Problem mit der Ausgabe bei Contenido.
Es sollte eine schöne Gallerie angezeigt werden, ich erhalte aber nur eine Fehlermeldung :
Warning: Invalid argument supplied for foreach() in ..cms/front_content.php(926) : eval()'d code on line 182
Modul :
Code: Alles auswählen
<?php
// Galerien ermitteln
$verzeichnisse = glob( "..cms/upload/impressum/galerien/*", GLOB_ONLYDIR );
echo '<div id="nav"><ul>';
foreach ($verzeichnisse as $dir)
{
$dirname = array_pop( explode( "/", $dir ) );
echo '<li><a href="' .$_SERVER['PHP_SELF']. '?galerie=' .$dirname. '">' .$dirname. '</a></li>';
}
echo '</ul></div>';
?>
Wo kann das Problem liegen ?
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 05:40
von idea-tec
Was soll denn das hier sein?
Code: Alles auswählen
$verzeichnisse = glob( "..cms/upload/impressum/galerien/*", GLOB_ONLYDIR );
Versuch es mal damit:
Code: Alles auswählen
$verzeichnisse = scandir ('upload/impressum/galerien');
Du hast in deiner Version gleich mehrere Fehler:
1.) "..cms" sollte (falls man das überhaupt benötigt) "../cms" lauten
2.) Den "*" (als Platzhalter) gibt es bei Verzeichnisfunktionen innerhalb von PHP nicht
Die Funktion kannst du dort nachlesen:
http://www.selfphp.de/funktionsreferenz ... candir.php
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 08:09
von Oldperl
idea-tec hat geschrieben:Was soll denn das hier sein?
Code: Alles auswählen
$verzeichnisse = glob( "..cms/upload/impressum/galerien/*", GLOB_ONLYDIR );
http://php.net/manual/de/function.glob.php
Also man kann
glob schon benutzen, man muss nur bedenken, das
glob keine Pfadangabe benötigt, sondern im aktuellen Pfad mit dem angegebenen Pattern sucht. Daher muss man vorher mit
chdir zum gewünschten Verzeichnis wechseln. Den alten Pfad liest man vorher mit
getcwd aus, merkt ihn sich und wechselt nach Abschluß von
glob wieder dorthin zurück.
Bei der Verwendung von
scandir muss man in dem hier gezeigten Fall beachten, das diese Funktion erstmal alle Verzeichnisinhalte anzeigt und nicht wie bei
glob mit
GLOB_ONLYDIR nur Verzeichnisse, welche man hier für die Galerieauswahl benötigt.
optimusx hat geschrieben:Warning: Invalid argument supplied for foreach() in ..cms/front_content.php(926) : eval()'d code on line 182
Diese Fehlermeldung kann man vermeiden wenn man die Variable
$verzeichnisse vor Aufbau der Liste (foreach-Schleife) prüft. Sie sollte ein gefülltes Array mit den Verzeichnisnamen enthalten, was mit
empty und
is_array abgefragt werden kann. Im konkreten Beispiel würde ich dabei auch schon die Ausgabe des ul-Tags bei leerem Array verhindern.
Gruß aus Franken
Ortwin
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 11:23
von optimusx
idea-tec hat geschrieben:Was soll denn das hier sein?
Code: Alles auswählen
$verzeichnisse = glob( "..cms/upload/impressum/galerien/*", GLOB_ONLYDIR );
Versuch es mal damit:
Code: Alles auswählen
$verzeichnisse = scandir ('upload/impressum/galerien');
Du hast in deiner Version gleich mehrere Fehler:
1.) "..cms" sollte (falls man das überhaupt benötigt) "../cms" lauten
2.) Den "*" (als Platzhalter) gibt es bei Verzeichnisfunktionen innerhalb von PHP nicht
Die Funktion kannst du dort nachlesen:
http://www.selfphp.de/funktionsreferenz ... candir.php
Meine Ausgabe bei deinem Code ist =>
".
..
Makros
Test
Tierwelt
"
mit dem Befehle hier würde es jetzt gehen : "$verzeichnisse = glob( "upload/impressum/galerien/*", GLOB_ONLYDIR );"
Er listet nur die Entsprechenden Ordner auf, welche ich auch haben möchte.
Jetzt möchte ich auf den Ordner "Makros" klicken und die Bilder angezeigt bekommen wo drin sind.
Irgendwie klappt das nicht es geht auf den link hier => "../cms/front_content.php?galerie=Makros"
dann wird mir die Error Seite angezeigt.
Habe mal die Dateien hinzugefügt + Ordner Pfade.
Es wäre eine einfache gallerie wo ich bilder in die verschiedene Ordner reintuen kann und die dann mit slimbox vergrössert werden sollte.
Eigentlich simpel, bin leider erst beim Anfang von PHP lernen.
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 14:05
von Spider IT
Da die von dir eingesetzte Galerie kein Bestandteil von Contenido ist, musst du den genauen Pfad angeben und dieser muss auch erreichbar sein für den Browser.
Mit $_SERVER['PHP_SELF'] benutzt du die aktuelle Adresse ohne Parameter, also
http://www.domain.tld/cms/front_content.php.
Stattdessen solltest du den Pfad zur Galerie einsetzen, also z.B.
wenn die Dateien aus dein ZIP in /cms/galerie_tutorial/ liegen (also den relativen Pfad von /cms aus).
Gruß
René
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 14:08
von optimusx
Hi
Danke für den Tipp, das hab ich vorher schon probiert, es klappt auch, aber es kommt natürlich im fenster "index.php" und net im eigenen Container wo es aufgehen sollte

Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 14:21
von Spider IT
Na dann kannst du, da du wie du geschrieben hast keine großen PHP-Kenntnisse hast, nur im Modul ein IFRAME mit der Adresse aufmachen.
Dann musst du den Link aber wie folgt aufbauen:
Code: Alles auswählen
$sess->url('front_content.php?idcat=' . $idcat . '&idart=' . $idart . '&galerie=' . $dirname)
Im Modul fragst du dann mit isset($_GET['galerie']) erstmal ab ob diese ausgewählt wurde und gibst dann das IFRAME mit
Code: Alles auswählen
<iframe src="galerie_tutorial/index.php?galerie=<?php echo $_GET['galerie']; ?>" width="..." height="..."></iframe>
aus.
Wenn der Parameter nicht gesetzt ist gibst du wie bisher kein IFRAME aus, sondern die Verzeichnisliste.
Gruß
René
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 14:34
von optimusx
Das hab ich auch schon versucht. Finde es aber nicht wirklich toll die Iframes, weil dann das bild wenn man es aufmacht nur im "iframe" div ist und net über die ganze Seite ( je nach grösse des bildes )
Re: Modul mit "foreach" Befehl
Verfasst: Do 8. Sep 2011, 14:43
von Spider IT
Dann kommst du ohne Programmierung nicht weiter, denn du versuchst gerade externe PHP-Scripte die nicht für Contenido sind in ein Contenido-Modul auszuführen.
Gruß
René