Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] Variablen in einem Template ersetzen

Einklappen

Neue Werbung 2019

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

  • #16
    Code:
    <html:placeholder name="Center" />
    									<html:template name="CenterSection">
    										<template:placeholder name="templates" />
    									</html:template>
    									<html:template name="TemplateImports">
    										<core:importdesign
    								            namespace="<template:placeholder name="namespace" />"
    								        	template="<template:placeholder name="template" />"
    								        />
    									</html:template>
    PHP-Code:
     class MainController extends baseController {
         public function 
    transformContent() {
             
    $this->setPlaceHolder('Center',$this->buildSection());
             
    $this->setPlaceholder('Titel',"Testseite");
         }

         private function 
    __buildSection() {
             
    $Template__CenterSection = &$this->__getTemplate('CenterSection');
             
    $buffer = (string)'';
             
    $buffer .= $this->__buildTemplateList();
             
    $Template__CenterSection->setPlaceHolder('templates',$buffer);
             return 
    $Template__CenterSection->transformTemplate();
         }

         private function 
    __buildTemplateList() {
             
    $Template__TemplateList = &$this->__getTemplate('TemplateImports');
            
    $Template__TemplateList->setPlaceHolder('namespace',"modules::game::register::pres::templates");
            
    $Template__TemplateList->setPlaceHolder('template',"register");
            return 
    $Template__TemplateList->transformTemplate();
         }
     } 
    Das habe ich mir gebastelt, allerdings war mir irgendwie klar das es nicht funktionieren würde ^^
    Undefined index: template
    Eigentlich würde das ganze natürlich über ein Model laufen habe ich recht, so in der Art das ich dem Model die Namen der Template Dateien hinzufüge und der Controller diese dann durchgeht und einbindet, liege ich da richtig?

    Wegen der Strukturierung:
    Da muss ich mal schauen wie ich dir eine Datei-Liste bereitstellen kann, sind ganz schön viele, obwohl einige "wegfallen" da sie dann zum Controller zur entsprechenden Template Datei werden.

    Kommentar


    • #17
      Hallo KarlEgon,

      Das habe ich mir gebastelt, allerdings war mir irgendwie klar das es nicht funktionieren würde ^^
      Der Fehler liegt in der Definition des importdesign-Tags:

      Code:
      <core:importdesign
      namespace="<template:placeholder name="namespace" />"
      template="<template:placeholder name="template" />"
      />
      Dieser nimmt keine dynamischen Parameter an. Siehe hierzu auch Adventure PHP Framework - Standard TagLibs, Liste der Attribute und deren erlaubte Zeichen. Wie ebreits weiter oben beschrieben ist es in diesem Fall notwendig, die Attribute des Tags aus einem Model zur Parse-Zeit zu ziehen. Wenn du dir mal das fcon:importdesign-Tag anschaust, kommst du ganz schnell drauf, wie dein Tag für diesen Anwendungsfall aussehen muss. Du musst zusätzlich zu dynamischen Definition des template-Parameters noch das namespace-Attribut aus einem Model beziehen. Hier der Link zum SVN: SourceForge.net Repository - [adventurephpfra] View of /trunk/tools/html/taglib/fcon_taglib_importdesign.php


      Eigentlich würde das ganze natürlich über ein Model laufen habe ich recht, so in der Art das ich dem Model die Namen der Template Dateien hinzufüge und der Controller diese dann durchgeht und einbindet, liege ich da richtig?
      Ja genau, das ist der Ansatz, den du hier brauchst. Mit diesem Vorgehen hast du dann wie in Desktop-Applikationen die Möglichkeit die Präsentation durch die Businessschicht zu steuern.

      Ich hoffe, du kommst damit weiter. Falls nicht, einfach melden!

      Wegen der Strukturierung:
      Da muss ich mal schauen wie ich dir eine Datei-Liste bereitstellen kann, sind ganz schön viele, obwohl einige "wegfallen" da sie dann zum Controller zur entsprechenden Template Datei werden.
      OK.
      Viele Grüße,
      Dr.E.

      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
      1. Think about software design [B]before[/B] you start to write code!
      2. Discuss and review it together with [B]experts[/B]!
      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
      4. Write [I][B]clean and reusable[/B][/I] software only!
      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

      Kommentar


      • #18
        Das mit dem fcon:importdesign muss ich irgendwie überlesen haben, sorry ^^

        So ich habe es nun folgendermaßen eingebunden:
        Template:
        Code:
        <core:addtaglib namespace="tools::html::taglib" prefix="fcon" class="importdesign" />
        ...
        ...
        ...
        <html:placeholder name="Center" />
        									<html:template name="CenterSection">
        										<template:placeholder name="templates" />
        									</html:template>
        									<html:template name="TemplateImports">
        										  
        									</html:template>
        									<fcon:importdesign
        										      templatenamespace="center"
        										      modelnamespace="sites::main::biz"
        										      modelfile="TemplateModel"
        										      modelclass="TemplateModel"
        										      modelparam="main.header.center"
        										  />
        Wobei natürlich das fcon:importdesign später in das Template soll, da ich ja es als Liste einbinden muss, wenn ich richtig denke.

        Mein TemplateModel sieht folgendermaßen aus:
        PHP-Code:
        <?php
        /*
         * Created on 29.10.2008
         *
         * @author LueckelT
         */
             
        class TemplateModel extends coreObject {
                 public function 
        TemplateModel() {
                     
        $this->__Attributes['main.header.center'] = 'register';
                     
        $this->__Attributes['center'] = 'modules::game::register::pres::templates';
                 }
             }
        ?>
        Fehler:
        Code:
        [Document::__loadContentFromFile()] Design "register" not existent in namespace "center"!
        Ich habe gedacht er nimmt dann den Namespace aus dem Model? Oder sehe ich da irgendwas falsch, zumindestens habe ich das so gedacht als ich mir die fcon Klasse angeschaut habe.

        edit:
        Passe ich den Namespace an, zeigt er mein Registrirungsformular richtig an, aber ich will ja flexibel bleiben ^^

        edit2:
        Ich sehe schon, dass ich das Templatemodel für ein einen weiteren fcon benutzen könnte mit dem modelparam "center", aber wie gehe ich denn jetzt vor, wenn ich den namespace ebenfalls anpassen will? Irgendwie stehe ich da ein bisschen aufm Schlauch

        Kommentar


        • #19
          Hallo KarlEgon,

          Ich habe gedacht er nimmt dann den Namespace aus dem Model? Oder sehe ich da irgendwas falsch, zumindestens habe ich das so gedacht als ich mir die fcon Klasse angeschaut habe.
          Nein, der wird nicht dynamisch gesetzt. Ich schrieb bereits weiter oben

          Zitat von dr.e.
          Du musst zusätzlich zu dynamischen Definition des template-Parameters noch das namespace-Attribut aus einem Model beziehen.
          edit:
          Passe ich den Namespace an, zeigt er mein Registrirungsformular richtig an, aber ich will ja flexibel bleiben ^^

          edit2:
          Ich sehe schon, dass ich das Templatemodel für ein einen weiteren fcon benutzen könnte mit dem modelparam "center", aber wie gehe ich denn jetzt vor, wenn ich den namespace ebenfalls anpassen will? Irgendwie stehe ich da ein bisschen aufm Schlauch
          Fakt ist, dass der Tag bisher nur den Namen des Templates ausliest. Möchtest du auch den Namespace dynamisch gestaltet haben, so musst du dir eine entsprechende Taglib erstellen. Da die Funktion der bestehenden Taglib schon sehr ähnlich ist, kannst du diese ja verwenden / kopieren und die gewünschte Funktion in eine eigene Taglib verpacken. Wenn du dir nochmals die Klasse fcon_taglib_importdesign anschaust, muss einfach der Inhalt der Variablen $TemplateNamespace auch aus dem Model bezogen werden, der Rest bleibt gleich. Soweit nun klar?
          Viele Grüße,
          Dr.E.

          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
          1. Think about software design [B]before[/B] you start to write code!
          2. Discuss and review it together with [B]experts[/B]!
          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
          4. Write [I][B]clean and reusable[/B][/I] software only!
          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

          Kommentar


          • #20
            Jaaa das ganze habe ich nun, Danke! Manchmal sieht man den Baum im Wald nicht ^^

            Dann versuche ich mich jetzt mal daran, es zu schaffen beliebig viele Templates einzubinden, den bis jetzt kann man ja nur ein Template dann dynamisch einbinden.

            Um mein Model mit Werten zu füllen, habe ich es im moment in der index.php so:
            PHP-Code:
               include_once('./sites/main/biz/TemplateModel.php');
               
            $Model = &Singleton::getInstance('TemplateModel');
               
            $Model->setAttribute('center.template',"register"); 
            Macht man das so? Oder wie realisiere ich das ganze besser?

            Kommentar


            • #21
              Hallo,

              Dann versuche ich mich jetzt mal daran, es zu schaffen beliebig viele Templates einzubinden, den bis jetzt kann man ja nur ein Template dann dynamisch einbinden.
              An sich kannst du in beliebigen Templates beliebig viele dynamische Tags einbinden. Es kommt dabei nur darauf an, dass dein Model / deine Models dies abbilden können.

              Macht man das so? Oder wie realisiere ich das ganze besser?
              Das kannst du so tun. Um das dynamischer zu gestalten, würde ich den FrontController einsetzen, mit dem du per Action an Hand von URL-Informationen das Model füllst. Ein Beipsiel dazu findest du unter Adventure PHP Framework - Frontcontroller Tutorial Hier wird zwar ein Model für andere Zwecke gefüllt, du kannst diese Informationen aber natürlich auch für einen importdesign-Tag verwenden.

              Um die Action "ansprechen" zu können, muss die Action-Anweisung entweder in der URL vorhanden sein oder die Action muss in der index.php beim FrontController registriert werden. Die hierzu notwendigen Schritte sind unter Adventure PHP Framework - Frontcontroller erklärt. Solltest du Fragen dazu haben, dann her damit!
              Viele Grüße,
              Dr.E.

              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
              1. Think about software design [B]before[/B] you start to write code!
              2. Discuss and review it together with [B]experts[/B]!
              3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
              4. Write [I][B]clean and reusable[/B][/I] software only!
              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

              Kommentar


              • #22
                An sich kannst du in beliebigen Templates beliebig viele dynamische Tags einbinden. Es kommt dabei nur darauf an, dass dein Model / deine Models dies abbilden können.
                Mhhh ja das stimmt schon, allerdings müsste ich ja dann theoretisch wissen wieviele Templates ich in mein Rahmen Template maximal einbinde. Ich kann ja 1000 dieser dynamischen Tags einbinden, aber besser fände ich, wenn es sich dynamisch zusammensetzt.

                Frontconroller schaue ich mir gerade in der Doku an

                Edit:
                Code:
                session_register(): open(/tmp/sess_3ce9076c20c23ebf5ed574d90d0a14be, O_RDWR) failed: Permission denied (13)
                Das erscheint übrigens wenn ich in der Doku schaue

                Kommentar


                • #23
                  Hallo

                  Ich kann ja 1000 dieser dynamischen Tags einbinden, aber besser fände ich, wenn es sich dynamisch zusammensetzt.
                  Richtig. Aus diesem Grund meinte ich vorhin ja auch

                  Zitat von dr.e.
                  Es kommt dabei nur darauf an, dass dein Model / deine Models dies abbilden können.
                  Das bedeutet, dass deine Geschäftslogik diese Dynamik entsprechend abbilden können muss. Beispiel: im globalen Template steckt ein dynamischer View, der aus dem Model des Rahmens (Webseite, Applikation, ...) gespeist wird und der innere Teil wird vom Model der eingebundenen Applikation selbst bedient.

                  Das erscheint übrigens wenn ich in der Doku schaue
                  Sollte wieder gehen. Zumindest habe ich die Meldung nicht mehr. Falls doch, schau mal auf der BETA-Seite unter Frontcontroller-Tutorial :: Adventure PHP Framework (APF)
                  Viele Grüße,
                  Dr.E.

                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                  1. Think about software design [B]before[/B] you start to write code!
                  2. Discuss and review it together with [B]experts[/B]!
                  3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                  4. Write [I][B]clean and reusable[/B][/I] software only!
                  ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                  Kommentar


                  • #24
                    Zitat von dr.e. Beitrag anzeigen
                    Das bedeutet, dass deine Geschäftslogik diese Dynamik entsprechend abbilden können muss. Beispiel: im globalen Template steckt ein dynamischer View, der aus dem Model des Rahmens (Webseite, Applikation, ...) gespeist wird und der innere Teil wird vom Model der eingebundenen Applikation selbst bedient.
                    Das verstehe ich nicht so ganz, kannst du da mal ein Beispiel mit machen?

                    Zitat von dr.e. Beitrag anzeigen
                    Sollte wieder gehen. Zumindest habe ich die Meldung nicht mehr. Falls doch, schau mal auf der BETA-Seite unter Frontcontroller-Tutorial :: Adventure PHP Framework (APF)
                    Fehler kommt immernoch, auch auf der BETA Seite

                    Kommentar


                    • #25
                      Das verstehe ich nicht so ganz, kannst du da mal ein Beispiel mit machen?
                      Nehmen wir an, deine Applikation hat folgende Template-Struktur:

                      Code:
                      - Haupt-Template (statisch)
                        - Subtemplate (dynamisch): per Model der globalen Webseite
                          - Subtemplate (dynamisch): per Model des eingebundenen Moduls A
                            - Subtemplate (statisch): weiteres Template des Moduls A
                      In diesem Beispiel sind dann zwei unabhängige Models für die Einbindung unterschiedlicher dynamischer Views auf unterschiedlichen Hirarchie-Ebenen zuständig. Solltest du innerhalb eines Moduls noch weitere Ebenen haben, kann man das Spiel noch unendlich weiter treiben. Jetzt klar?

                      Fehler kommt immernoch, auch auf der BETA Seite
                      Sehr merkwürdig. Anbei der Ausdruck für die FrontController-Doku.
                      Viele Grüße,
                      Dr.E.

                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                      1. Think about software design [B]before[/B] you start to write code!
                      2. Discuss and review it together with [B]experts[/B]!
                      3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                      4. Write [I][B]clean and reusable[/B][/I] software only!
                      ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                      Kommentar


                      • #26
                        Nö immer noch nicht klar, habe keine Ahnung wie mir das ganze weiterhelfen soll! Vielleicht reden wir auch irgendwie aneinander vorbei oder so, ich weiß es nicht.

                        Danke für die Doku, inzwischen geht auch die Seite wieder.

                        Kommentar


                        • #27
                          Hallo KarlEgon,

                          hmm, ich vermute auch, dass wir nicht ganz auf einer Linie reiten. An sich sollte dir das nämlich schon helfen. Ich mach dir heute Abend mal ein Beispiel und du überlegst dir nochmal deine Anforderungen. OK?
                          Viele Grüße,
                          Dr.E.

                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                          1. Think about software design [B]before[/B] you start to write code!
                          2. Discuss and review it together with [B]experts[/B]!
                          3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                          4. Write [I][B]clean and reusable[/B][/I] software only!
                          ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                          Kommentar


                          • #28
                            Also ich habe ein "Rahmen"-Template
                            Code:
                            //Header
                            
                            //North
                            
                            //East
                            
                            //Center
                            
                            //West
                            
                            //South
                            
                            //Footer
                            So nun will ich einfach im Quellcode zum Beispiel sagen können:
                            PHP-Code:
                            $tpl->addTemplate("errors","center");
                            $tpl->addTemplate("status","center");
                            $tpl->addTemplate("news","east");
                            $tpl->addTemplate("useronline","east");
                            $tpl->addTemplate("nachrichten","east");
                            //usw 
                            Daraus wird sozusagen dann
                            Code:
                            //Header
                            
                            (//North fällt weg)
                            
                            //News
                            //Useronline
                            //Nachrichten
                            
                            //Errors
                            //Status
                            
                            (//West fällt weg)
                            
                            (//South fällt weg)
                            
                            //Footer
                            Es soll also egal sein wieviele Templates ich hinzufüge, ich kann einfach mein Model füttern (Wobei ich da noch nicht so ganz weiß wie ich es machen werde) und dadurch werden die Templates hinzugefügt. Ich weiß jetzt nicht ob du mir dafür eine Lösung zeigen wolltest, aber ich habe es auf jedenfall nicht so verstanden, deswegen bin ich gespannt auf dein Beispiel.

                            Kommentar


                            • #29
                              Hallo KarlEgon,

                              Beispiel ist fertig, ich schreib nachher noch etwas dazu. Hier schon mal zum runterladen: http://media.adventure-php-framework...t/karlegon.zip
                              Viele Grüße,
                              Dr.E.

                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
                              1. Think about software design [B]before[/B] you start to write code!
                              2. Discuss and review it together with [B]experts[/B]!
                              3. Choose [B]good[/B] tools (-> [URL="http://adventure-php-framework.org/Seite/088-Why-APF"]Adventure PHP Framework (APF)[/URL][URL="http://adventure-php-framework.org"][/URL])!
                              4. Write [I][B]clean and reusable[/B][/I] software only!
                              ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

                              Kommentar


                              • #30
                                Mhhh habe ich mir angeschaut, aber bei dem Beispiel müsste ich doch, um ein weiteres sub_view zum south template hinzuzufügen, ein weiteren import design machen oder?

                                Kommentar

                                Lädt...
                                X