Sprachdateien, Templates und globale Daten

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • #16
    Dann muss das eine Template dem anderen Template das Objekt übergeben.

    Kommentar


    • #17
      Naja super, dann hab ich auch wieder ein riesenobjekt das immer weitergegeben wird. Ich weiß mittlerweile, warum das bei mir nicht funktioniert, der Ablauf ist folgendermaßen;

      PHP-Code:
      // Index.php:
        
      if ($blub)
          
      req('dosomething.php')
        else
          
      req('dootherthings.php')

        
      showTpl('index')

      // index.tpl
        
      showTpl('header')
        
      showTpl('menu')
        
      showTpl('content')
        
      showTpl('footer')

      // content.tpl
        
      if ($tpl['bla'])
          
      showTpl('start')
        else
          
      showTpl('ende'
      Da ich dynamisch schaue, welche funktionalen (dosomething.php) Dateien eingebunden werden, und dementsprechend auch in den Templates dynamisch geschaut wird, welche Subtemplates gebraucht werden, weiß ich eben nie, 1. welche templates einbegunden werden und 2. welche daten sie brauchen.

      Wenn ich in den funktionalen Dateien die Templates als Objekte erstelle, sind die ja im falschen Scope - da die Templates erst später tatsächlich angezeigt werden sollen.
      This is what happens when an unstoppable force meets an immovable object.

      Kommentar


      • #18
        Zitat von ApoY2k Beitrag anzeigen
        Da ich dynamisch schaue, welche funktionalen (dosomething.php) Dateien eingebunden werden, und dementsprechend auch in den Templates dynamisch geschaut wird, welche Subtemplates gebraucht werden, weiß ich eben nie, 1. welche templates einbegunden werden und 2. welche daten sie brauchen.
        Dafür sollte der Controller zuständig sein. Für mich sieht das aus als hättest du viel zu viel Logik in die Templates ausgelagert.
        Zuletzt geändert von h3ll; 01.07.2010, 18:36.

        Kommentar


        • #19
          Die einzige Logik in den Templates sind for(each)-Schleifen, if-Abfragen oder eben neue Templates einbinden...

          Beispiel:

          PHP-Code:
          if (isset($tpl['list']) && <= count($tpl['list']))
          {
              foreach (
          $tpl['list'] as $row)
              {
                  echo 
          '<a href="?url='.$row['url'].'">'.$row['name'].'</a>';
              }

          Und ich habs im Grunde deshalb so zerstückelt, damit ich eben Funktion und Design getrennt habe.
          Zuletzt geändert von ApoY2k; 01.07.2010, 18:41.
          This is what happens when an unstoppable force meets an immovable object.

          Kommentar


          • #20
            Ich würde zumindest mal Layout von den Views trennen, das erleichtert vermutlich einiges.

            Kommentar


            • #21
              Jetzt bin ich verwirrt... Die View ist doch das Layout?
              This is what happens when an unstoppable force meets an immovable object.

              Kommentar


              • #22
                Nein. Das Layout ist quasi das "Drumherum". Also HTML-Header, Seitenheader, Footer, usw. Der Content besteht dann aus Views.

                Schau dir zB. mal Zend_Layout und Zend_View an.

                Kommentar


                • #23
                  Okay, danke mal für deine Geduld. Werd wohl noch ein bisschen arbeiten müssen bis es passt Wobei ich ehrlich gesagt die Idee mit der Template-"Registry" (passt glaub am besten) für mein Projekt am sinnvollsten erachte... einfach weil ich ehrlich gesagt (noch) nicht genug über MVC in PHP verstehe, um damit zurechtzukommen.

                  Aber für die nächste Version werd ichs mal in Betracht ziehen. Gibts dazu vll auch Tutorials, die es anhand einer normalen PHP-Installation (ohne den Zend-Framework-Kram) erklären?
                  Zuletzt geändert von ApoY2k; 01.07.2010, 19:16.
                  This is what happens when an unstoppable force meets an immovable object.

                  Kommentar


                  • #24
                    Ich wollte jetzt keinen neuen Thread aufmachen, frag einfach hier mal;

                    Ich wollte gerade mal alle Sessionbezogenen Daten in der $_SESSION speichern. Da ist mir die Idee gekommen, dass dazu ja eigentlich praktischerweise auch die Datenbankverbindung gehört.

                    Also habe ich das versucht

                    PHP-Code:
                    $_SESSION['db'] = new PDO(...); 
                    Jedoch erhalte ich dadurch einen "Fatal error: Exception thrown without a stack frame in Unknown on line 0".

                    Wenn ich die Zeile auskommentiere, ist der Error weg.


                    Erstaunlicherweise funktionieren aber Anweisungen wie

                    PHP-Code:
                    $_SESSION['db']->query(...)->fetchAll(); 
                    einwandfrei.

                    Ist das ein PDO-Spezifisches Problem, dass man das nicht in der Session speichern kann? (Sollte man das überhaupt machen?)
                    This is what happens when an unstoppable force meets an immovable object.

                    Kommentar


                    • #25
                      hmm- ich würd ja wenigstens den Umweg über eine Zwischenvariable versuchen

                      Code:
                      $db_verb = new PDO (...);
                      
                      $_SESSION['db']=$db_verb;
                      ich vermute, er meint, du sollst die mögliche Exception beim fehlgeschlagenen Erstellen des DB-Objektes abfangen .. bzw da ist eine aufgetreten ..
                      [font=Verdana]
                      Wer LESEN kann, ist klar im Vorteil!
                      [/font]

                      Kommentar


                      • #26
                        Ressourcen kann man nicht serialisieren und daher nicht in einer Session speichern!

                        Kommentar


                        • #27
                          Außerdem wäre das ziemlich unklug. Stell dir vor, man könnte eine Verbindung in der Session ablegen. Eine Session ist, sagen wir, 30 Minuten gültig. Wenn du jetzt 100 Besucher in 30 Minuten hast, wären auch ständig 100 Datenbankverbindungen offen.

                          Kurz gesagt: Eine Datenbankverbindung gehört nicht zur Sitzung, sondern zum Prozess und hat somit in der Session nichts verloren.

                          Kommentar

                          Lädt...
                          X