Styleparser läd module nicht

nchristoph

Erfahrenes Mitglied
Hallo zusammen,

ich bin gerade am verzweifeln.

Mein Styleparser läd keine Module mehr.

PHP:
    private function SetModules()
    {   //Durchsuche das Template nach {type="Modules" Position="xxx"}
        preg_match_all('/\{type="Modules" Position="(.*)"\}/isUe',$this->style, $values);
        foreach($values[1] AS $value){
            $this->value = $value;
            //Ersetze {type="Modules" Position="xxx"} mit dem Modul welches an dieser Position gesetzt ist
            $this->style = str_replace('{type="Modules" Position="'.$this->value.'"}', $this->LoadModules($this->value), $this->style);
        }
        return $this->style;
    }
    
    private function LoadModules($side)
    {   
        $params[':side'] = $side;

        $sql = ("SELECT name, position FROM adminmodules WHERE `status` = '1' AND position = :side ORDER BY ordernr ASC");
        $stmt = $this->db_conn->prepare($sql);
        $stmt->execute($params);

        $modules = array();
        while($row = $stmt->fetch()){
            $modules[] = ("modules/admin_".$row['name']."/front_".$row['name'].".php");
        }
        
        foreach($modules as $path)
        {    //include $path;     
            $this->path = $path;
        }
        return $this->path;
    }

Mir wird lediglich der Pfad angezeigt zum Modul.

Ich habe es schon mit
PHP:
 include $this->path;
versucht, hat allerdings nicht geklappt.
Bekam nur Warning: Include failed on line 53 in admin_style_manager.class.php

Kann mir eventuell wer nen Tip geben, wo mein Fehler liegt?
 
Sorry, was genau funktioniert nicht?

Und warum nicht mehr? Hat es vorher funktioniert? Falls ja, was hast du verändert?
 
Also:
Ich habe im Template in verschiedenen div containers eigene Tags eingebaut z.b. {type="Modules" Position="left"}.

in SetModules wird das Template mittels
PHP:
preg_match_all('/\{type="Modules" Position="(.*)"\}/isUe',$this->style, $values);
        foreach($values[1] AS $value){
            $this->value = $value;
            //Ersetze {type="Modules" Position="xxx"} mit dem Modul welches an dieser Position gesetzt ist
            $this->style = str_replace('{type="Modules" Position="'.$this->value.'"}', $this->LoadModules($this->value), $this->style);
        }

Durchsucht und für jede Übereinstimmung die LoadModules($this->value) wobei $this->value mit dem Wert der Position ersetzt wird.

In der LoadModules Funktion wird der Wert der Position mit der DB verglichen und die entsprechenden Module in der Variable $path gespeichert.

Ich hatte leider ca. ein halbes Jahr keine Zeit, an meiner Seite zu basteln darum kann ich nicht sagen ob der Fehler vorher schon da war oder nicht.

Das Problem. das jetzt besteht ist wie folgt: Anstatt das Modul auszuführen, wird lediglich der Pfad angezeigt.

PHP:
modules/admin_content/front_content.php

Geändert habe ich nichts von bedeutung ausser ein echo in return damit HTML nicht schon vorher ausgegeben wird.

Ich versuchen jetzt schon seit 3 Tagen das wieder hinzukriegen, bin aber irgendwie aus der Übung.

Meine Lösungsversuche bis jetzt:
PHP:
include $this->path;
eval $this->path;
echo $this->path;
print_r $this->path;
print $this->path;

Geändert hat nichts davon etwas. Auch das zurückändern von return in echo hat keine veränderung gebracht.
 
Das ist alles völlig verkacktes Design, wenn ich das so sagen darf ;)

Irgendwie musst du ja mal an das tatsächliche Modul (gehts hier um HTML?) drankommen. Vielleicht tuts ja sowas wie:

PHP:
$this->style = str_replace('{type="Modules" Position="'.$this->value.'"}',file_get_contents( $this->LoadModules($this->value)), $this->style);

Aber deine getModules Methode ist auch die Härte. Du überschreibst $this-path da immer wieder, das ist dir klar?
 
Bei den Modulen kann es sich um alles handeln: pures HTML, PHP Code mit Datenbankanbindung.


Zur LoadModules Funktion: Danke für den Hinweis.

Habs geändert, allerdings wird jetzt der PHP Code ausgegeben.

Versuche es jetzt so:

PHP:
        foreach($modules as $path)
        {    //include $path;     
            $this->modules = file_get_contents($path);
        }

Wegen verkacktes Design:

Sagen darfst du es nur, wenn du mir nen Tip gibst wie ich es verbessern kann:P
 
Zurück