lom: Array automatisch erweitern

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

  1. 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)  
    
    1. 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

      1. 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ß,

        frankx

        1. 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

          1. 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ß,

            frankx

      2. 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";