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

  • #61
    Hatte ein Problem und bin mit einer Lösung hier rausgekommen die es in sich hat ^^

    Also ich werde es auf jedenfall weiterempfehlen, auch wenn man sich erstmal einarbeiten muss, man merkt doch das es später um einiges leichter ist. Wenn ich schon dran denke wieviel PHP Code ich schon allein für das Registrierungsformular geschrieben habe um die Eingaben zu überprüfen usw.
    Nun ist das alles schön im Controller und es ist einfacher zu bearbeiten.

    Kommentar


    • #62
      Ich bin es nochmal, habe da folgende Frage.
      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="usernick" 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="userrasse" />
      	<!-- <form:addtaglib namespace="modules::captcha::pres::taglib" prefix="form" class="captcha" />
          <form:captcha
                    text_class="eingabe_feld"
                    text_style="width: 150px;"
                    validate="true"
                    button="register1"
          />-->
      	<form:button name="register" value="Registrieren" class="eingabe_feld" />
      </html:form>
      Dies ist mein Registrierungsformular.
      Und nun mein Controller:
      PHP-Code:
      $transform true;
                  
      $Manager__Register = &$this->__getServiceObject('modules::game::register::biz','RegisterManager');
                  
      $Form__Register $this->__getForm("RegisterForm");
                  
      $usernick $Form__Register->getFormElementByName("usernick");
                  
      $userpass $Form__Register->getFormElementByName("userpass");
                  
      $userpass2 $Form__Register->getFormElementByName("userpass2");
                  
      $useremail $Form__Register->getFormElementByName("useremail");
                  
      $useremail2 $Form__Register->getFormElementByName("useremail2");
                  
      $userrasse $Form__Register->getFormElementByName("userrasse");
      if(
      $Form__Register->get("isSent")) {
                      
      $Form__Register->set('isValid',true);
                      if(
      $Form__Register->get('isValid')) {
                          
      $transform false;
                      }
                      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;
                      }
                      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',"");
                      
      $Races $Manager__Register->loadRaces();
                      foreach(
      $Races as $Race) {
                          
      $userrasse->addOption($Race->getAttribute('name'),$Race->getAttribute('ID'));
                      }
                      
      $Form__Register->transformOnPlace();
                  } else {
                      
      $usernick $usernick->getAttribute('value');
                      
      $userpass hash('sha256',$userpass->getAttribute('value'));
                      
      $useremail $useremail->getAttribute('value');
                      
      $userrasse1 = &$userrasse->getSelectedOption();
                      
      debugprint($userrasse1);
                      
      $Manager__Register->registerUser($usernick,$userpass,$useremail,1);
                  } 
      Nun habe ich das Problem, dass ich die Select Felder nicht auslesen kann, das Debugprint (ein formatiertes print_r) zeigt nichts an, habe schon einiges versucht, aber es wird einfach nichts zurück gegeben. Woran kann das liegen?

      Kommentar


      • #63
        Hallo KarlEgon,

        ich nehme an, das liegt an den Kontrollstrukturen. Das Select-Feld wird nur dann gefüllt, wenn die Variable $transform ein true enthält.Ist das nicht so, kann das Presetting auch keine selektierte Option finden und gibt dir null zurück. Siehe hierzu Adventure PHP Framework (tools): form_taglib_select Class Reference.


        Ich würde die Befüllung daher vor das if ziehen, dann sollte das klappen.


        Viele Grüße,
        Christian
        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


        • #64
          Danke! Hätte ich auch selbst drauf kommen können! Nun kann ich weiter machen ^^

          Kommentar


          • #65
            Hallo KarlEgon,

            Die Sache mit dem Parent Template werde ich wahrscheinlich heute Abend ausprobieren, finde ich ganz nützlich für Listen usw.
            Ich habe am Wochenende im Rahmen der neuen Dokumentationsseite (still beta ) den <core:appendnode />-Tag implementiert. Dieser sollte dir bei der Aufgabenstellung, wiederverwendbare Template-Fragmente einzubinden auf jeden Fall helfen. Hinweise zur Nutzung und zur Doku findest du unter forum.adventure-php-framework.org [de] &bull; Thema anzeigen - Einführung <core:appendnode />-Tag. Würde mich über Feedback hier oder im APF-Forum sehr freuen.

            Wie weit bist du mit dem Rest deiner Implementierung schon gekommen? Gab es noch andere Herausforderungen?


            Viele Grüße,
            Christian
            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


            • #66
              Also die Sache mit dem Parent Template habe ich folgendermaßen realisiert.

              Im Controller:
              PHP-Code:
              $parentTemplateName 'list';
              $docParent $this->__Document;
              while(
              $docParent->hasParent() && $docParent->__ParentObject->hasParent()) {
                  
              $docParent $docParent->__ParentObject;
              }
              $Template__List $this->searchTemplate($docParent,$parentTemplateName);
              if(
              $Template__List!=null) {
                  
              $Navigation__Manager = &$this->__getServiceObject('modules::game::navigation::biz','NavigationManager');
                  
              $NaviList $Navigation__Manager->getNavigation();
                  
              $buffer = (string)'';
                  if(
              $NaviList!=-1) {
                      foreach(
              $NaviList as $NaviItem) {
                          
              $buffer .= $this->buildNaviItem($NaviItem);
                      }
                  }
                  
              $Template__List->setPlaceHolder('item',$buffer);
                  return 
              $Template__List->transformTemplate();
              }

              private function 
              searchTemplate($parent,$searchedTemplateName) {
                  
              $parentTemplate null;
                  
              $children $parent->getByReference('Children');
                  foreach(
              $children as $objectID => $DUMMY) {
                      if(
              get_class($children[$objectID]) == 'html_taglib_template' && $children[$objectID]->getAttribute('name') == $searchedTemplateName) {
                          
              $parentTemplate $children[$objectID];
                          break;
                      } else {
                          if(
              $children[$objectID]->hasChildren()) {
                              
              $parentTemplate $this->searchTemplate($children[$objectID],$searchedTemplateName);
                              if(
              $parentTemplate->getAttribute('name')==$searchedTemplateName) {
                                  break;
                              }
                          }
                      }
                  }
                  return 
              $parentTemplate;

              Und den Pagecontroller habe ich folgendermaßen erweitert:
              PHP-Code:
              function hasParent() {
                  if(
              $this->__ParentObject!=null) {
                      return 
              true;
                  }
                  return 
              false;
              }

              function 
              hasChildren() {
                  return 
              count($this->__Children);

              core:appendnode habe ich noch nicht ausprobiert. Sonst gab es eigentlich erstmal keine Probleme aber wir sprechen das ja gerade durch ^^

              Kommentar


              • #67
                Hallo KarlEgon,

                einige Anmerkungen zum Code:

                $docParent->__ParentObject->hasParent()
                Das funktioniert nur, weil __ParentObject noch (!) public ist. ich würde hier ein

                PHP-Code:
                $grandParent = &$docParent->getByReference('ParentObject'); 
                (PHP4) oder ein

                PHP-Code:
                $grandParent $docParent->getByReference('ParentObject'); 
                in PHP 5 schreiben.


                Und den Pagecontroller habe ich folgendermaßen erweitert:
                Wo hast du das eingefügt? In der pagecontroller.php? Falls ja, würde ich das im nächsten Release mit aufnehmen, denn das sind Funktionen, die öfter gebraucht werden können.


                core:appendnode habe ich noch nicht ausprobiert.
                Das Tag ist sicher an anderer Stelle auch für dich hilfreich, denn über das Tag eingebundene Templates verhalten sich wie likal definierte, so dass du eine Wiederverwendbarkeit von Templates hast.


                Sonst gab es eigentlich erstmal keine Probleme aber wir sprechen das ja gerade durch ^^
                Freut mich. Solltest du mal was zum zeigen haben, würde ich mich über einen Demo-Link freuen.


                Viele Grüße,
                Christian
                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


                • #68
                  Wo hast du das eingefügt? In der pagecontroller.php? Falls ja, würde ich das im nächsten Release mit aufnehmen, denn das sind Funktionen, die öfter gebraucht werden können.
                  Ja das habe ich in die pagecontroller.php eingefügt.

                  Das funktioniert nur, weil __ParentObject noch (!) public ist. ich würde hier ein
                  ...
                  Ja das werde ich noch ändern, habe das so übernommen, da du irgendwann mal ein Beispiel damit gebracht hast, habe es nicht weiter angeschaut, aber Recht hast du natürlich.

                  Freut mich. Solltest du mal was zum zeigen haben, würde ich mich über einen Demo-Link freuen.
                  Werde ich dir zukommen lassen, allerdings ist noch nicht sehr viel realisiert, eigentlich nur die Navigation und halbwegs die Registrierung.

                  Kommentar


                  • #69
                    Hi,

                    ok, dann nehme ich die Änderungen in das Release 1.8-RC2 auf, RC1 gibt es noch in dieser Woche.
                    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


                    • #70
                      Darauf freue ich mich schon.

                      Werde mich wieder melden, falls irgendwelche Probleme auftauchen.

                      Kommentar

                      Lädt...
                      X