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

  • #31
    Hallo KarlEgon,

    nun ein paar Sätze zum Beispiel:
    1. Das Haupt-Template beinhaltet diverse dynamische includes. Diese werden über das GlobalModel gesteuert und können zu Demonstration über die index.php geändert werden. Die Anzahl der includes ist unbegrenzt, das Model muss lediglich die entsprechenden Parameter vorhalten und es muss einen Mechanismus geben. Idealerweise implementierst du dazu eine FrontController-Action.
    2. Das obere Template bindet gleich noch ein weiteres Modul ein, das wiederum über das Model des Moduls einen weiteren Subview einbaut. Dies soll verdeutlichen, dass du quasi beliebig tief und komplex verschachteln kannst. Die jeweilige Zuständigkeit sollte jedoch beim entsprechenden Modul und nicht auf der oberen Ebene liegen, da das onst zu komplex wird.

    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?
    Genau. Wenn du im south Template einen weiteren sub_view möchtest, füge einfach einen weiteren importdesign-Tag hinzu. Dabei solltest du dir jedoch Gedanken darüber machen, wer die Parameter des dynamischen Includes verwaltet. Im Fall des south Templates könnte das das ModAModel sein - wie auch schon so angewandt.

    Wichtig ist an dieser Stelle einfach, dass du dir vorher über die Struktur und die Möglichkeiten der Steuerung Gedanken machst und das dann implementierst. Das erleichtert einiges.
    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


    • #32
      Aber so erzeuge ich doch total unnötigen Code, wenn ich die Möglichkeit einbaue 10 Sub Templates einzubinden, sie auch einmal nutze, aber meistens nur 1-3 Sub Templates brauche, dann ist das doch unsinnig oder nicht?

      Daran denke ich halt. Muss mir noch ein paar Gedanken darüber machen im Zusammenhang mit meinem Projekt.

      Kommentar


      • #33
        Hallo KarlEgon,

        Aber so erzeuge ich doch total unnötigen Code, wenn ich die Möglichkeit einbaue 10 Sub Templates einzubinden, sie auch einmal nutze, aber meistens nur 1-3 Sub Templates brauche, dann ist das doch unsinnig oder nicht?
        Wie gesagt: it depends on the situation. Wenn du nur 1-3 Templates einbauen möchtest, dann solltest du das auch tun. Mit der von mir geschilderten Vorgehensweise hast du jedoch die Möglichkeit das ohne viel Aufwand auf 10 auszubauen.
        Brauchst du die Möglichkeit nicht, in den Subtemplates noch weitere dynamische Subtemplates einbinden zu können, so wird das Konstrukt auch einfacher.

        Muss mir noch ein paar Gedanken darüber machen im Zusammenhang mit meinem Projekt.
        Noch ein Tipp dazu: ich würde hier zunächst ein Screen-Design anfertigen und die relevanten Areas markieren. Anschließend überlegst du dir die Funktion der einzelnen Areas. Bist du damit fertig, erkennst du sicher Gemeinsamkeiten und Unterschiede und bist dann in der Lage das entsprechend in eine technische Lösung zu gießen.

        Insgesamt ist das weniger eine Diskussion über das Mittel der Umsetzung (Framework, Template-Engine, ...) denn über das Design der Software.

        Solltest du noch weitere Fragen haben oder brauchst du noch Hinweise zu verwandten Themen, dann meld dich einfach!
        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


        • #34
          Joar ich denke ich werde es so machen wie du mir gezeigt hast! Allerdings habe ich noch eine Frage:
          Wie kann ich nachträglich noch so eine rote Umrandung erreichen?
          Code:
          <@controller namespace="modules::game::register::pres::documentcontroller" file="register_controller" class="RegisterController" @>
          <core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
          Die Registrierungsdaten werden auch f&uuml;r das Portal verwendet
          <html:form name="RegisterForm" method="post" action="">
          	<form:text name="username" class="eingabe_feld" validate="true" validator="Text" button="register" />
          	<form:password name="userpass" class="eingabe_feld" validate="true" validator="Text" button="register" />
          	<form:password name="userpass2" class="eingabe_feld" validate="true" validator="Text" button="register" />
          	<form:text name="useremail" class="eingabe_feld" validate="true" validator="EMail" button="register" />
          	<form:text name="useremail2" class="eingabe_feld" validate="true" validator="EMail" button="register" />
          	<form:select name="rasse" />
          	<form:button name="register" value="Registrieren" class="eingabe_feld" />
          </html:form>
          Und der Controller:
          PHP-Code:
          <?php
              
          class RegisterController extends baseController {
                  private 
          $races = array("1","2","3","4");
                  public function 
          __construct() {

                  }

                  public function 
          transformContent() {
                      
          $transform true;
                      
          $Form__Register $this->__getForm("RegisterForm");
                      if(
          $Form__Register->get("isSent") && $Form__Register->get("isValid")) {
                          
          $transform false;
                          
          $userpass $Form__Register->getFormElementByName("userpass");
                          
          $userpass2 $Form__Register->getFormElementByName("userpass2");
                          if(
          $userpass->getAttribute('value')!=$userpass2->getAttribute('value')) {
                              
          $userpass->setAttribute('value',"");
                              
          $userpass->setAttribute()
                              
          $userpass->set('isValid',false);
                              
          $userpass2->setAttribute('value',"");
                              
          $userpass2->set('isValid',false);
                              
          $Form__Register->set('isValid',false);
                              
          $transform true;
                          }
                          
          $useremail $Form__Register->getFormElementByName("useremail");
                          
          $useremail2 $Form__Register->getFormElementByName("useremail2");
                          if(
          $useremail->getAttribute('value')!=$useremail2->getAttribute('value')) {
                              
          $useremail->setAttribute('value',"");
                              
          $useremail->set('isValid',false);
                              
          $useremail2->setAttribute('value',"");
                              
          $useremail2->set('isValid',false);
                              
          $Form__Register->set('isValid',false);
                              
          $transform true;
                          }
                      }
                      if(
          $transform) {
                          
          $Select__Race $Form__Register->getFormElementByName("rasse");
                          for(
          $i=0;$i<count($this->races);$i++) {
                              
          $Select__Race->addOption($this->races[$i],$i+1);
                          }
                          
          $Form__Register->transformOnPlace();
                      }
                  }
              }
          ?>
          Nun will ich, wenn Die beiden Passwörter nicht gleich sind, dass das Formular dann diese roten Umrandung um die beiden Passwort Felder kommt, leer werden sie ja schonmal gemacht. Habe dazu nichts in der Doku gefunden (ist auch manchmal schwer sich da durch zuarbeiten)

          Kommentar


          • #35
            Hallo KarlEgon,

            du hattest doch heute Morgen noch 2 Fragen?

            Nun will ich, wenn Die beiden Passwörter nicht gleich sind, dass das Formular dann diese roten Umrandung um die beiden Passwort Felder kommt, leer werden sie ja schonmal gemacht. Habe dazu nichts in der Doku gefunden (ist auch manchmal schwer sich da durch zuarbeiten)
            Das Problem an dieser Stelle ist, dass ein Formular-Feld keinen Statis "isValid" kennt, sondern nur das Formular selbst. Möchtest du also einen roten Rahmen um das Feld ziehen, gibt es zwei Möglichkeiten:

            (1) Am Anfang des Controllers das Formular nur auf "isSent" abfragen und innerhalb der Kontrollstruktur dann auf Gleichheit prüfen.
            (2) Validierung der beiden Felder im Template abschalten und dann wie bereits passiert auf Gleichheit prüfen.

            Wenn du sowohl bei Leer-Eingabe als auch bei nicht übereinstimmenden Passwörtern einen roten Rahmen haben möchtest, solltest du (1) wählen. Der Code dazu würde dann wir folgt aussehen:

            PHP-Code:
            ...
            if(
            $Form__Register->get('isSent')){
               ...
               
            $userpass $Form__Register->getFormElementByName("userpass");
               
            $userpass2 $Form__Register->getFormElementByName("userpass2");
               
               if(
            $userpass->getAttribute('value') != $userpass2->getAttribute('value')) {
                  
            $userpass->setAttribute('style',$userpass->getAttribute('style').'; border: 2px solid red;');
                  
            $userpass2->setAttribute('style',$userpass2->getAttribute('style').'; border: 2px solid red;');
                  
            $Form__Register->set('isValid',false);
                  ...
               }
               
               ...
               
               if(!
            $Form__Register->get('isValid')){
                  
            $Form__Register->transformOnPlace();
               }
               
               ...
               
            }
            ... 
            Soweit nun klar? Falls nicht, poste mir nochmal deinen Quelltext und ich bau die Änderung ein, dann siehst du, wie das im Kontext zu lösen ist.
            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


            • #36
              Ich habe es nun folgendermaßen, funktioniert prima:
              HTML-Code
              Code:
              <@controller namespace="modules::game::register::pres::documentcontroller" file="register_controller" class="RegisterController" @>
              <core:addtaglib namespace="tools::form::taglib" prefix="html" class="form" />
              Die Registrierungsdaten werden auch f&uuml;r das Portal verwendet
              <html:form name="RegisterForm" method="post" action="">
              	<form:text name="username" class="eingabe_feld" validate="true" validator="Text" button="register" />
              	<form:password name="userpass" class="eingabe_feld" validate="true" validator="Text" button="register" />
              	<form:password name="userpass2" class="eingabe_feld" validate="true" validator="Text" button="register" />
              	<form:text name="useremail" class="eingabe_feld" validate="true" validator="EMail" button="register" />
              	<form:text name="useremail2" class="eingabe_feld" validate="true" validator="EMail" button="register" />
              	<form:select name="rasse" />
              	<form:button name="register" value="Registrieren" class="eingabe_feld" />
              </html:form>
              PHP-Code
              PHP-Code:
              public function transformContent() {
                          
              $transform true;
                          
              $Form__Register $this->__getForm("RegisterForm");
                          if(
              $Form__Register->get("isSent") && $Form__Register->get('isValid')) {
                              
              $transform false;
                              
              $userpass $Form__Register->getFormElementByName("userpass");
                              
              $userpass2 $Form__Register->getFormElementByName("userpass2");
                              if(
              $userpass->getAttribute('value')!=$userpass2->getAttribute('value')) {
                                  
              $userpass->setAttribute('style',$userpass->getAttribute('style').'; border: 2px solid red;');
                                  
              $userpass2->setAttribute('style',$userpass2->getAttribute('style').'; border: 2px solid red;');
                                  
              $Form__Register->set('isValid',false);
                                  
              $transform true;
                              }
                              
              $useremail $Form__Register->getFormElementByName("useremail");
                              
              $useremail2 $Form__Register->getFormElementByName("useremail2");
                              if(
              $useremail->getAttribute('value')!=$useremail2->getAttribute('value')) {
                                  
              $useremail->setAttribute('value',"");
                                  
              $useremail->setAttribute('style',$useremail->getAttribute('style').'; border: 2px solid red;');
                                  
              $useremail2->setAttribute('value',"");
                                  
              $useremail2->setAttribute('style',$useremail2->getAttribute('style').'; border: 2px solid red;');
                                  
              $Form__Register->set('isValid',false);
                                  
              $transform true;
                              }
                              if(
              $transform) {
                                  
              $userpass->setAttribute('value',"");
                                  
              $userpass2->setAttribute('value',"");
                              }
                          }
                          if(
              $transform) {
                              
              $Select__Race $Form__Register->getFormElementByName("rasse");
                              for(
              $i=0;$i<count($this->races);$i++) {
                                  
              $Select__Race->addOption($this->races[$i],$i+1);
                              }
                              
              $Form__Register->transformOnPlace();
                          }
                      } 
              Wegen der zweiten Frage von heute morgen, die hat sich erledigt, habe alles gefunden was ich brauche um ein Captcha einzubauen, allerdings finde ich das in der Doku sehr ungenau, dort steht, es reicht einfach diesen Tag einzufügen usw.

              Kommentar


              • #37
                Hallo KarlEgon,

                schön, dass es nun funktioniert!

                Wegen der zweiten Frage von heute morgen, die hat sich erledigt, habe alles gefunden was ich brauche um ein Captcha einzubauen, allerdings finde ich das in der Doku sehr ungenau, dort steht, es reicht einfach diesen Tag einzufügen usw.
                Schau mal unter Mitgelieferte Module :: Adventure PHP Framework (APF), dort findest du eine ausführliche Anleitung.

                Solltest du noch Fragen haben, dann immer 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


                • #38
                  Irgendwie muss ich etwas übersehen, also folgendes:
                  ./index.php
                  PHP-Code:
                  <?php
                      
                  include_once('./core/pagecontroller/pagecontroller.php');
                      
                  import('core::frontcontroller','Frontcontroller');
                      
                  $fC = &Singleton::getInstance('Frontcontroller');
                      
                  $fC->start('sites::main::pres::templates','main');
                  ?>
                  ./sites/main/pres/templates/main.html
                  Code:
                  <core:importdesign
                  	namespace="sites::main::pres::templates"
                  	template="empty"
                  />
                  ./sites/main/pres/templates/empty.html
                  Steht einfach nichts drin

                  Fehlermeldung
                  Code:
                  [Document::__loadContentFromFile()] Design "" not existent in namespace ""!
                  Ich weiß nicht warum er mir diesen Fehler ausgibt, irgendwie scheint er <core:importdesign> nicht gescheit auslesen zu können. Übersehe ich irgendwas? -.- Stehe irgendwie aufm Schlauch

                  Edit:
                  Nehme ich <core:importdesign> raus aus der main.html, dann wird mir eine weiße seite ohne Fehlermeldung angezeigt

                  Edit2:
                  Kann es sein, dass das normale <core:importdesign> sich nicht mit dem Frontcontroller verträgt? *probier* mh, ne wenn ich es über PageController, loadDesign und transform mache kommt der gleiche Fehler -.-

                  Edit3:
                  Kann es einfach nur sein, dass ich keine Tabs innerhalb des <core:importdesign> Tags machen darf?

                  Edit4:
                  Bin mir nun ziemlich sicher, das keine tabs vorkommen dürfen, allerdings sind Fehlermeldungen wie
                  Code:
                  Error-ID: 4b584f0a1c4397a47554371f8cf489c4 
                  Message: [Document::__loadContentFromFile()] Design "" not existent in namespace ""! 
                  Number: 256 
                  File: C:\xampp\xampp\htdocs\APF\core\pagecontroller\pagecontroller.php 
                  Line: 1339
                  nicht sehr aussagekräftig, da man keine Ahnung hat woher nun der Fehler kommt, man weiß nur das es im Pagecontroller aufgetreten ist, aber ich könnte jetzt nicht sagen, welches Template diesen Fehler verursacht.

                  Kommentar


                  • #39
                    Hallo,

                    ich habe leider gerade keine Entwicklungsumgebung da, den Fehler verstehe ich jedoch trotzdem nicht. An sich ist die Fehlermeldung klar, sofern weder "namespace" noch "template" bekannt sind, kann auch kein Template geladen werden. Was sicher nicht der Fall ist, dass sich importdesign und der FrontController nicht vertragen, da letzterer einfach den PageController zur Generierung der Seiten nutzt.

                    Was das Thema Tab angeht, so sollte das theoretisch kein Problem sein, da ich die relevanten Token per strpos() suche und Tags dann nicht relevant sind.

                    Ich prüfe das jedoch heute abend nochmal mit den daten deines Posts und melde mich.
                    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


                    • #40
                      Hallo KarlEgon,

                      gratuliere, deine letzte Vermutung entspricht auch der Tatsache.
                      Der Tag-String-Parser (xmlParser::getTagAttributes()) erwartet ein Leerzeichen als Trennzeichen zwischen dem Tag-Token und dem ersten Attribut-Namen. Damit wird aus dem Aufruf des Parsers ein leeres Parameter-Array zurückgegeben, worüber sich der importdesign-Tag natürlich zu Recht aufregt.

                      Da es mir jedoch durchaus sinnvoll erscheint, auf ein Tab zu verwenden habe ich diese Erweiterung im Parser für dich im SVN vorgenommen. Wichtig ist dabei natürlich, dass ein reiner Zeilenumbruch nicht zu der Klasse der gültigen Trennzeichen gehört. Bitte teste deine Template mit der Datei pagecontroller.php5 (bitte in .php umbenennen) aus SourceForge.net Repository - [adventurephpfra] Index of /trunk/core/pagecontroller. Der diff kann online unter SourceForge.net Repository - [adventurephpfra] Diff of /trunk/core/pagecontroller/pagecontroller.php5 eingesehen werden.

                      Ich hoffe, damit kannst du nun arbeiten.

                      //EDIT:
                      nicht sehr aussagekräftig, da man keine Ahnung hat woher nun der Fehler kommt, man weiß nur das es im Pagecontroller aufgetreten ist, aber ich könnte jetzt nicht sagen, welches Template diesen Fehler verursacht.
                      Zugegeben, man sieht das nicht auf den ersten Blick, der Stacktrace verrät dir jedoch in welcher Methode es knallt und damit implizit, in welchem Template. Das ist natürlich schwierig zu verargumentieren, deshalb versuche ich im Tag noch eine aussagekräftigere Fehlermeldung ausgeben zu können. "Versuchen" deshalb, da das allgemeingültig und für alle DOM-Strukturen funktionieren muss und das etwas Zeit zum Testen braucht.

                      //EDIT2:
                      Als ungetestete Lösung zu EDIT kann ich dir folgendes anbieten: ersetzte die Methode Document::__loadContentFromFile() mit folgenden Code:

                      PHP-Code:
                            function __loadContentFromFile($Namespace,$Design){

                               
                      $File APPS__PATH.'/'.str_replace('::','/',$Namespace).'/'.$Design.'.html';

                               if(!
                      file_exists($File)){
                                  
                      $code htmlentities($this->__ParentObject->get('Content'));
                                  
                      trigger_error('[Document::__loadContentFromFile()] Design "'.$Design.'" not existent in namespace "'.$Namespace.'"! Please check your template code ('.$code.').',E_USER_ERROR);
                                  exit();
                                
                      // end if
                               
                      }
                               else{
                                  
                      $this->__Content file_get_contents($File);
                                
                      // end else
                               
                      }

                             
                      // end function
                            

                      Damit solltest du wenigstens den relevanten Template-Code bekommen und einfacher Debuggen können. Ist der Patch ausführlicher getestet, werde ich ihn mit in das SVN aufnehmen.
                      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


                      • #41
                        Also das mit dem Tab geht nicht bei mir, ist aber auch erstmal nicht so wichtig, habe die Tabs nun ersetzt.

                        Deine Error Erweiterung funktioniert auch nicht bei dem Problem, die Fehlermeldung bleibt gleich. Und im Stack Trace kann ich nur sehen, dass der Fehler durch $fC->start(...) in der index.php verursacht wird.

                        Trotzdem danke für die Anpassungen

                        Edit:
                        Funktioniert doch wunderbar beim <core:importdesign>, beim generic (den du ja geschrieben hast [mit template und namespace aus dem Model]) funktioniert es allerdings nicht, aber wie gesagt nicht schlimm im Moment.

                        Kommentar


                        • #42
                          Hallo KarlEgon,

                          Also das mit dem Tab geht nicht bei mir, ist aber auch erstmal nicht so wichtig, habe die Tabs nun ersetzt.
                          Das wundert mich doch etwas. Ich habe exakt dein Beispiel verwendet um das Verhalten nachzustellen?!

                          Deine Error Erweiterung funktioniert auch nicht bei dem Problem, die Fehlermeldung bleibt gleich. Und im Stack Trace kann ich nur sehen, dass der Fehler durch $fC->start(...) in der index.php verursacht wird.
                          Wie gesagt, das war eine ungetestete Idee. Mitlererweile bin ich da schon weiter. Im SVN findest du nun eine Version, die den Code des Templates sauber ausgibt. Allerdings schneidet das trigger_error() die Fehlermeldung bei x Zeichen ab, so dass man nicht alles sieht. Grundsätzlich ist das jedoch deutlich hilfreicher wie zuvor.

                          Bei mir sagt der Stacktrace z.B. folgendes:

                          Code:
                          Frontcontroller->start()	D:\Apache2\htdocs\www\karlegon2\index.php	5
                          Page->loadDesign()	D:\Apache2\htdocs\www\karlegon2\core\frontcontroller\Frontcontroller.php	335
                          Document->loadDesign()	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php	1145
                          Document->__extractTagLibTags()	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php	1321
                          core_taglib_importdesign->onParseTime()	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php	1529
                          Document->__loadContentFromFile()	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php	1840
                          Document->trigger_error()	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php	1354
                          Hier siehst du, dass der Fehler in der Klasse Document passiert. Die Ursache ist ein falsch geschriebener Template-Name im importdesign-Tag. Als Fehler wird ausgegeben:

                          Code:
                          Error-ID:	b30857931375dc83ffc166a01e7df7a8
                          Message:	[Document::__loadContentFromFile()] Design "empty_" not existent in namespace "sites::main::pres::templates"! Please check your template code (fasel<core:importdesign namespace="sites::main::pres::templates" template="empty_" /> ende).
                          Number:	256
                          File:	D:\Apache2\htdocs\www\karlegon2\core\pagecontroller\pagecontroller.php
                          Line:	1354

                          Funktioniert doch wunderbar beim <core:importdesign>, beim generic (den du ja geschrieben hast [mit template und namespace aus dem Model]) funktioniert es allerdings nicht, aber wie gesagt nicht schlimm im Moment.
                          D.h. die Tab-Änderung funktioniert doch? Falls ja, gib mir bitte mal ein Beispiel für den Einsatz des <generic:importdesign />-Tags und die Fehlermeldung. Die durchgeführte Änderung ist so global, dass es nicht bei einen Tag funktioniert und beim anderen nicht. Alle Tags werden mit der selben Methode geparst. Die Doku des Tags findest du übrigens unter Spezielle TagLibs :: 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


                          • #43
                            So hier mal meine Sachen:
                            Die Fehlermeldung
                            Code:
                            Error!
                            
                            Error-ID: 	6e82e8ba0c5e6ee02021186c2241e634
                            Message: 	[Document::__loadContentFromFile()] Design "" not existent in namespace ""! Please check your template code ( </div> </div> </div> <div class="col2"> <core:addtaglib namespace="sites::main::pres::taglib" prefix="generic" class="importdesign" /> <generic:importdesign modelnamespace="sites::main::biz" modelfile="west_TemplateModel" modelclass="WestTemplateModel" templateparam="west.template" namespaceparam="west.namespace" /> </div> <core:addtaglib namespace="sites::main::pres::taglib" prefix="generic" class="importdesign" /> <generic:importdesign modelnamespace="sites::main::biz" modelfile="east_TemplateModel" modelclass="EastTemplateModel" templateparam="east.template" namespaceparam="east.namespace" /> </div> </div> </div> <!-- end #page --> <div id="footer"> <p class="padded">Designed by Megger</p> <!--<p class="padded center">Seite mit {$querys} Querys innerhalb von {$time} Sekunden generiert</p>--> <core:addtaglib namespace="sites::main::pres::taglib" prefix="generic" class="importdesign" /> <generic:importdesign modelnamespace="sites::main::biz" modelfile="main_TemplateModel" modelclass="MainTemplateModel" templateparam="south.template" namespaceparam="south.namespace" /> </div> </div> </body> <!--<script language="JavaScript" src="./include/functions.inc.js"> </script> <script type="text/javascript"> {if isset($timer)} {$timer} {/if} </script>--> </html>).
                            Number: 	256
                            File: 	C:\Projekte\FutureWars\core\pagecontroller\pagecontroller.php
                            Line: 	1350
                            Das Template
                            Vor dem modelnamespace ist ein Tab
                            Code:
                            ...
                            <core:addtaglib namespace="sites::test::pres::taglib" prefix="generic" class="importdesign" />
                            <generic:importdesign
                            	modelnamespace="sites::main::biz"
                                modelfile="east_TemplateModel"
                                modelclass="EastTemplateModel"
                                templateparam="east.template3"
                                namespaceparam="east.namespace3"
                            />
                            ...
                            Das Model
                            PHP-Code:
                            class EastTemplateModel extends coreObject
                                
                            {
                                    public function 
                            __construct(){
                                        
                            $this->__Attributes['east.template1'] = 'empty';
                                        
                            $this->__Attributes['east.namespace1'] = 'sites::main::pres::templates';
                                        
                            $this->__Attributes['east.template2'] = 'empty';
                                        
                            $this->__Attributes['east.namespace2'] = 'sites::main::pres::templates';
                                        
                            $this->__Attributes['east.template3'] = 'empty';
                                        
                            $this->__Attributes['east.namespace3'] = 'sites::main::pres::templates';
                                        
                            $this->__Attributes['east.template4'] = 'empty';
                                        
                            $this->__Attributes['east.namespace4'] = 'sites::main::pres::templates';
                                        
                            $this->__Attributes['east.template5'] = 'empty';
                                        
                            $this->__Attributes['east.namespace5'] = 'sites::main::pres::templates';
                                    }

                                    public function 
                            addTemplate($namespace,$template,$pos) {
                                        
                            $this->__Attributes['east.template'.$pos] = $template;
                                        
                            $this->__Attributes['east.namespace'.$pos] = $namespace;
                                    }
                                } 

                            Kommentar


                            • #44
                              Hallo KarlEgon,

                              es liegt in der Tat auch in diesem Fall am TAB zwischen <generic:importdesign und modelnamespace="..., da die Trennzeichen zwischen den Attributen gemischt auftauchen (TAB und LEERZEICHEN). Damit findet er zuerst das Leerzeichen vor modelfile und erkennt dies als erstes Attribut, modelnamespace bleibt leer.

                              Ich hab deshalb grade eine alternative Implementierung des Parsers evaluiert, nur diese ist auf Grund der zusätzlichen Prüfungen und des Suchens nach einem TAB in jeder Parse-Operation etwas langsamer. Die Änderung findest du wie auch die letzte im trunk des SVN - jedoch unter Vorbehalt, dass diese im nächsten Release wieder entfernt wird (siehe SourceForge.net Repository - [adventurephpfra] Diff of /trunk/core/pagecontroller/pagecontroller.php5).

                              Ich schlage daher vor, dass du die neue Implementierung hinsichtlich Funktion und Performance prüfst, gleichzeitig jedoch auch überlegst, ob du mit der blanc-only Version auch zurecht kommst. Ich würde gerne das Thema Performance nochmal ausgibig testen, denn eine Steigerung der einzelnen Parsing-Zeit bedeutet bei aufwändigen Projekten eine überproportionale Verschlechterung der Performance. Und gerade diese sollte bestenfalls linear und nicht überproportional schlechter werden.

                              Noch ein Hinweis: da der in deinem ZIP-Package enthaltene generische importdesign-Tag kein sauber implementierter Tag war, würde ich dich bitten die Tag-Implementierung aus dem trunk des SVN unter tools/html/taglib/ zu verwenden, der ist sauber (siehe SourceForge.net Repository - [adventurephpfra] View of /trunk/tools/html/taglib/generic_taglib_importdesign.php). Hierzu brauchst du dann folgendes Statement um diesen einzubinden:

                              Code:
                              <core:addtaglib namespace="tools::html::taglib" prefix="generic" class="importdesign" />
                              Ich hoffe damit kannst du nun loslegen!
                              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


                              • #45
                                Danke für deine Zeit.
                                Ich denke ich werde das ganze dann dabei auf Blanks umstellen.

                                Habe im moment nur das Problem, dass ich die Sourceforge Dateien nicht einbinden kann, liegt irgendwie an dem Format oder so, bin mir da nicht so sicher. Gibt auf jedenfall Probleme beim Download, mit deinen Zip Files gab es diese Probleme nicht.

                                Kannst du es vielleicht in ein Zip Ordner packen und bereitstellen? Das wäre sehr nett.

                                Ansonsten komme ich eigentlich ganz gut vorran und arbeite mich langsam ein. Es wird alles ein bisschen durchsichtiger und ich verstehe es besser.

                                Ich habe noch eine Frage:
                                Habe eine zweigeteilte Navigation, einmal oben eine horizontale und links eine vertikale. Die Vertikale zeigt immer verschiedene Sachen an, es kommt halt drauf an, was oben gewählt wurde.
                                Für diese beiden Navigationen habe ich jeweils ein eigenes Template, jeweils einen eigenen Controller und wollte aber das gleiche Model nutzen, darin die Informationen werden über eine Action manipuliert, die jedesmal beim Seitenaufruf ausgeführt wird.

                                Ist dies so die richtige Vorgehensweise oder sollte ich etwas anderes machen?

                                Kann ich irgendwie ein <html:template> global verfügbar machen, sodass ich es aus jedem Controller aufrufen kann?

                                Kommentar

                                Lädt...
                                X