Modul mit "foreach" Befehl

Gesperrt
optimusx
Beiträge: 16
Registriert: Mi 17. Aug 2011, 02:02
Kontaktdaten:

Modul mit "foreach" Befehl

Beitrag von optimusx » Mi 7. Sep 2011, 20:30

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 ?

idea-tec
Beiträge: 1242
Registriert: Do 19. Sep 2002, 14:41
Wohnort: Dichtelbach
Kontaktdaten:

Re: Modul mit "foreach" Befehl

Beitrag von idea-tec » Do 8. Sep 2011, 05:40

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
MfG, Karsten
Nicht Können bedeutet nicht, dass man etwas nicht beherrscht, sondern lediglich, dass man sich nicht traut es zu tun ;-)
| Internet | Ihr Logo deutschlandweit auf T-Shirts |
Diplomatie: Jemanden so in die Hölle zu schicken, dass er sich auf die Reise freut!!! ;-)

Oldperl
Beiträge: 4261
Registriert: Do 30. Jun 2005, 22:56
Wohnort: Eltmann, Unterfranken, Bayern
Kontaktdaten:

Re: Modul mit "foreach" Befehl

Beitrag von Oldperl » Do 8. Sep 2011, 08:09

idea-tec hat geschrieben:Was soll denn das hier sein?

Code: Alles auswählen

$verzeichnisse = glob( "..cms/upload/impressum/galerien/*", GLOB_ONLYDIR );
:arrow: 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
ConLite 2.1, alternatives und stabiles Update von Contenido 4.8.x unter PHP 7.x - Download und Repo auf Gitport.de
phpBO Search Advanced - das Suchwort-Plugin für CONTENIDO 4.9
Mein Entwickler-Blog

optimusx
Beiträge: 16
Registriert: Mi 17. Aug 2011, 02:02
Kontaktdaten:

Re: Modul mit "foreach" Befehl

Beitrag von optimusx » Do 8. Sep 2011, 11:23

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.
Dateianhänge
galerie_tutorial_files.zip
Galerie Tutorial
(3.62 KiB) 104-mal heruntergeladen

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul mit "foreach" Befehl

Beitrag von Spider IT » Do 8. Sep 2011, 14:05

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.

Code: Alles auswählen

galerie_tutorial/index.php?galerie=Makros
wenn die Dateien aus dein ZIP in /cms/galerie_tutorial/ liegen (also den relativen Pfad von /cms aus).

Gruß
René

optimusx
Beiträge: 16
Registriert: Mi 17. Aug 2011, 02:02
Kontaktdaten:

Re: Modul mit "foreach" Befehl

Beitrag von optimusx » Do 8. Sep 2011, 14:08

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 :|

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul mit "foreach" Befehl

Beitrag von Spider IT » Do 8. Sep 2011, 14:21

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é

optimusx
Beiträge: 16
Registriert: Mi 17. Aug 2011, 02:02
Kontaktdaten:

Re: Modul mit "foreach" Befehl

Beitrag von optimusx » Do 8. Sep 2011, 14:34

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 )

Spider IT
Beiträge: 1416
Registriert: Fr 3. Dez 2004, 10:15

Re: Modul mit "foreach" Befehl

Beitrag von Spider IT » Do 8. Sep 2011, 14:43

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é

Gesperrt