Array automatisch erweitern
lom
- php
Hallo!
Ich bastele seit Kurzem an einer Seite, die zur Navigation ein einfaches Template-System verwendet. Indizes und Pfade habe ich in einem Array zusammengefasst. Das liegt in der Datei sections.php und sieht so aus:
<?php
$section_right = array();
$section_right['monat'] = 'right/monat.php';
$section_right['archiv'] = 'right/archiv.php';
$section_right['galerie'] = 'right/galerie.php';
$section_right['ueberuns'] = 'right/ueberuns.php';
// und so weiter...
?>
Auf der Hauptseite (index.php) werden die Unterseiten dann einfach per $_GET / include geladen:
<?php
if (isset($_GET['section_left'], $section_left[$_GET['section_left']])) {
include $section_left[$_GET['section_left']];
} else {
include $section_left['monat'];
}
?>
So weit so gut, nun muss ich aber jedes Mal, wenn ich eine neue Seite hochlade und auf diese verlinken will die sections.php veränden, also Pfad und Index manuell zum Array hinzufügen.
Ich suche eine Funktion, die das für Teile der Seite automatisch für mich erledigt. Genauer gesagt habe ich eine Archiv-Funktion, in der ich jeden Monat einen neuen Ordner hochlade: 0903, 0904 usw.
Darin befindet sich eine gleichnamige .php-Datei, die für die Anzeige des jeweiligen Inhalts zuständig ist.
Ich habe (für die Navigation) schon ein Skript, das den Ordner einliest und auf Basis der Ergebnisse Verweise zu den .php-Dateien erstellt:
<?php
$archiv = openDir("right/archiv"); // Öffnet ein Unterverzeichnis
while ($file = readDir($archiv)) { // Verzeichnis lesen
if ($file != "." && $file != "..") { // Höhere Verzeichnisse nicht anzeigen!
echo "<a href="right/archiv/$file/$file.php">$file</a><br>\n"; // LINK
}
}
closeDir($archiv); // Verzeichnis schließen
?>
Wie könnte ich das für die sections.php modifizieren, das quasi als output neue Einträge in das Array hinzugefügt werden, in dieser Form:
<?php
$section_right['0903'] = 'right/archiv/0903/0903.php';
$section_right['0904'] = 'right/archiv/0903/0904.php';
//usw....
?>
Habe es schon mit array_push probiert, aber das funktioniert für assoziative arrays natürlich nicht :/
Bin leider noch nicht so fit was php angeht. Hat jemand eine Idee?
Grüße
lom
Ahoi,
Hallo!
Ich bastele seit Kurzem an einer Seite, die zur Navigation ein einfaches Template-System verwendet. Indizes und Pfade habe ich in einem Array zusammengefasst. Das liegt in der Datei sections.php und sieht so aus:
»»
<?php
$section_right = array();
$section_right['monat'] = 'right/monat.php';
$section_right['archiv'] = 'right/archiv.php';
$section_right['galerie'] = 'right/galerie.php';
$section_right['ueberuns'] = 'right/ueberuns.php';
$page_names = array("monat","archiv","galerie");
foreach ($page_names as $page_name) {
$section[$page_name] = 'right/' . $page_name . '.php';
}
~~~ (ungetested)
wäre möglich.
So kommst Du vieleicht auch weiter unten weiter.
Dank und Gruß,
[frankx](http://community.de.selfhtml.org/visitenkarten/view.php?key=82)
--
[tryin to](http://sauer-ernst.de) [multitain](http://multitain.de)
Hallo!
Danke erstmal für den Codeschnipsel. Sowas bringt mir im Moment wirklich viel, weil ich im Coding-Bereich noch ganz am Anfang stehe.
Allerdings sehe ich gerade noch nicht so recht, wie ich damit mein eigentliches Problem lösen kann. Weil der Code generiert im Endeffekt ja den selben Output wie die lange Version.
Kann ich diese Variable jetzt irgendwie dynamisch "bestücken"?
$page_names_left = array("monat","archiv","galerie","ueberuns","kontakt","impressum","links","sitemap");
Komisch: Wenn ich per print_r das Array ausgeben lasse, sieht es genau so aus wie das andere, aber auf der Hauptseite bekomme ich diesen Fehler:
Warning: main(r) [function.main]: failed to open stream: No such file or directory in [PFAD]/index.php on line 60
Warning: main() [function.include]: Failed opening 'r' for inclusion (include_path='.:/usr/share/php:..') in [PFAD]/index.php on line 60
Was hat es damit auf sich?
Grüße
lom
Ahoi,
naja, erstens kannst du zB. mit scandir() oder glob() verzeichnisse auslesen und so "dynamisch" generieren. ansonsten hab ichs mir nicht detailliert angeschaut, was du mit "dynamisch" meinst. irgendwoher muss der computer ja wissen, woher er die daten ziehen muss. du kannst auch mit time() und date() hantieren, wenn das verzeichnisauslesen nichts hilft.
die fehlermeldung ist doch einduetig. du willst "[PFAD]/index.php" einbinden, aber das gibt es nicht.
Dank und Gruß,
Im Kern ist die Frage, die bleibt:
Wie bekomme ich es hin, Werte die in einer Variable gespeichert sind als Indizes ([0903]) und (modifiziert: 'archiv/0903/0903.php') als zugehöriges Arrayelement an ein bestehendes Array anzuhängen?
Gruß
lom
Ahoi,
Im Kern ist die Frage, die bleibt:
Wie bekomme ich es hin, Werte die in einer Variable gespeichert sind als Indizes ([0903]) und (modifiziert: 'archiv/0903/0903.php') als zugehöriges Arrayelement an ein bestehendes Array anzuhängen?
$liste = array(1,2,3);
$liste[] = 4;
var_dump($liste) ... 1,2,3,4
oder $liste["key17"] = "value19";
Dank und Gruß,
echo $begrüßung;
Kann ich diese Variable jetzt irgendwie dynamisch "bestücken"?
$page_names_left = array("monat","archiv","galerie","ueberuns","kontakt","impressum","links","sitemap");
Natürlich, den prinzipiellen Code dafür hast du bereits in deinem Ausgangsposting stehen.
[...] auf der Hauptseite bekomme ich diesen Fehler:
Warning: main(r) [function.main]: failed to open stream: No such file or directory in [PFAD]/index.php on line 60
Warning: main() [function.include]: Failed opening 'r' for inclusion (include_path='.:/usr/share/php:..') in [PFAD]/index.php on line 60
Was hat es damit auf sich?
Du versuchst eine Datei zu öffnen, die nicht existiert. Vermutlich liegt es daran, dass du einen anderen Dateinamen übergibst als du vorgesehen hast. Das kannst du mit einer Kontrollausgabe deiner Variableninhalte prüfen. Wenn du das ändern möchtest, musst du deinen höchstwahrscheinlich Code korrigieren.
echo "$verabschiedung $name";