Zum Inhalt springen

FE Formulare entwickeln mit Formidable(ameos_formidable)

Erstellt am 26. Mai 2008 · 3 Antworten · letzte Antwort am 28. Mai 2008

Tags: Frage

sefer ·

Hi,
ich entwickle gerade eine FE-Extension und habe den Tipp bekommen solche sachen mit ameos_formidable zu machen. Es stellt ja einem vielfältige Möglichkeiten für das Erstellen, Lesen, aktualisieren und löschen von Datensätzen (CRUD=Create, Read, Update, Delete) zur Verfügung. Außerdem, kann man mit wenig Code Userdaten auf Korrektheit überprüfen und Daten per Search and List ausgeben.

Nun habe ich trotz bearbeitung mehrerer Beispiele immer noch einige probleme, deshalb möchte ich hier eine kleine Diskussion zum Thema anzetteln, für all die,die wie ich noch nicht so viel Erfahrung haben.

Hier die wichtigsten Anlaufpunkte zum Thema.

Allgemein:
ENTWICKLER
WIKI
HP des SVN Repository
Newsgroup Benutzung per Newsreader(z.Bsp. Thunderbird)

Beispiele:
siehe unter Features
CRUD

Installation:
ERROR" pi2/locallang.php' is no TYPO3 language file)!"
Entwicklungsprobleme, deshalb Rev.183 benutzen(Datum:26.5.2008-)

Sefer

digedag ·

Hi Sefer,

so einen allgemeinen Thread zu formidable finde ich sehr gut. Allerdings wäre er im Entwicklerforum bestimmt besser aufgehoben. Die Extension ist für den normalen Endanwender ja ohne Nutzen.

Vielleicht kann ein Moderator das Thema ja mal verschieben. 🙂

---------
just2b: done!

sefer ·

Hi,
ich möchte hier ein kleines(großes) Beispiel präsentieren, dass ich für mich als Einstieg erstellt habe.
Es ist kein gutes Programm funktioniert auch nicht ganz sauber, aber es zeigt schon viel Dinge die mit ameos_formidable möglich sind.

Der Sinn des Programms ist es, FE-User als Spieler Mannschaften hinuzufügen, so dass eine Spieler-Historie gebildet werden kann. Also bei welchen Vereinen hat der Spieler bisher gespielt.
Der FE-User muss hierfür registriert sein, damit eine automatische Zuordnung möglich ist.
Im einzelnen:
-Einloggen als FE-User (geschieht extern)
-Mannschaften erstellen
-Liste der Spieler(FE-User) ausgeben
-Spieler einer Mannschaft zuordnen
-Historie des Spielers als Liste ausgeben

Damit das ganze auf euerm System funktioniert müsst ihr noch die beiden DB Tabellen anlegen.
Falls ihr das hier bei mir testet, dann registriert euch oder bentutzt den DUMMY FE-USER(Name:"dummy" Passwort:"123456")

Sefer

1.DB Tabellen anlegen:

CREATE TABLE tbl_team (
team_uid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
team_name VARCHAR(50) NOT NULL,
crdate INT(11) NOT NULL,
team_image VARCHAR(100) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;


CREATE TABLE tbl_player_team (
player_team_uid INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
team_uid  INT NOT NULL,
player_uid  INT NOT NULL,
crdate INT(11) NOT NULL,
position VARCHAR(50) NOT NULL)ENGINE=MyISAM DEFAULT CHARSET=utf8;

2.Die komplette XML DATEI:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<formidable version="0.7.1" xmlns:datahandler="http://www.ameos.com/formidable/071/datahandler" xmlns:renderer="http://www.ameos.com/formidable/071/renderer" xmlns:renderlet="http://www.ameos.com/formidable/071/renderlet" xmlns:validator="http://www.ameos.com/formidable/071/validator" xmlns:actionlet="http://www.ameos.com/formidable/071/actionlet">

	<meta>
		<name>Blank Formidable XML</name>
		<form formid="my_formid"/>
		<displaylabels>true</displaylabels>
		<debug>false</debug>
	</meta>

	<control>
		<datahandler:STANDARD/>
		
    <datasources>
			<datasource:DB name="ds_team">
				<sql><![CDATA[
					SELECT * FROM tbl_team
				]]></sql>
			</datasource:DB>
			
			<datasource:DB name="ds_player">
				<sql><![CDATA[
					SELECT * FROM fe_users
				]]></sql>
			</datasource:DB>
			
			<datasource:DB name="ds_player_team">
				<sql><![CDATA[
					SELECT * FROM tbl_player_team
				]]></sql>
			</datasource:DB>
			
			<datasource:DB name="ds-history">
				<sql><![CDATA[
					
					SELECT
						fe_users.uid				AS uid,
						fe_users.username			AS username,
					
						tbl_team.team_name				AS team_name,
						tbl_team.crdate			AS crdate,
						
            tbl_player_team.position AS position
					
          FROM
						fe_users, tbl_team, tbl_player_team
					WHERE
						fe_users.uid = tbl_player_team.player_uid
						AND
						tbl_team.team_uid = tbl_player_team.team_uid


				]]></sql>
			</datasource:DB>
			
		</datasources>
		
		<renderer:STANDARD>
			<style><![CDATA[
				
				#box_menu, #box_login_please, #box_team,
        #box_player, #box_player_to_team,
        #box_player_history  { display: none;}

				#box_menu {
					background-color: #ff8c00;
					color: white;
					padding: 5px;
				}

				#step2_replacedata {
					text-decoration: underline;
				}

				h3 {
					margin: 0;
					margin-left: -5px;
					margin-right: -5px;
					margin-top: 5px;
					padding-left: 5px;

					color: white;
					background-color: #FF6D06;
					border-top: 2px solid #CB5702;
					border-bottom: 2px solid #CB5702;

					padding-top: 10px;
					padding-bottom: 10px;
				}

			]]></style>
		</renderer:STANDARD>

			<sandbox>
			<userobj>
				<php><![CDATA[/*<?*/
					
          function display_array($array){
                echo "<pre>";
                echo "<br>This ia a sandbox-function. This have to be between the tags <br><control><sandbox><userobj><php>";
                echo "<br>### Here your function ###";
                echo "<br>### At this moment it displays the content of an array through the function print_r ###";
                echo "<br></php></userobj></sandbox></control>";
                print_r($array); 
          }

				/*?>*/]]></php>
			</userobj>
		</sandbox>
		
	</control>

	<elements>
	
			<renderlet:BUTTON name="btn_start" label="This Aplication only works if you are registered! PLEASE CLICK ME!">
			<onclick runat="client">
				<userobj>
					<php><![CDATA[
						$logged=$GLOBALS["TSFE"]->fe_user->user["uid"];
						if ($logged){
                          return array(
                  							  $this->aORenderlets["box_menu"]->majixDisplayBlock(),
                  							  $this->aORenderlets["btn_start"]->majixDisplayNone(),
                  							  $this->aORenderlets["box_your_name_is"]->majixReplaceData(
                                  "
                                   <b>Your username is: <span style='color: purple;'>" .$GLOBALS["TSFE"]->fe_user->user["username"] . "</span> </b><br>
                                   <b>Your user_id is: <span style='color: purple;'>" .$GLOBALS["TSFE"]->fe_user->user["uid"] . "</span> </b><br><br>
                                  "
                                  ),
									
                  				);
            }else{
                 return $this->aORenderlets["box_login_please"]->majixDisplayBlock();
                }
                

					]]></php>
				</userobj>
			</onclick>
		</renderlet:BUTTON>
		
  
  
    <renderlet:BOX name="box_login_please">
		  <childs>
        <renderlet:BOX name="box_link_to_login">
			     <html><![CDATA[
				<br>You are not logged in!
				<br>Here you can login: 
				<br>NAME: dummy
				<br>Password: 123456
        <a href="http://www.amafu.de/tvweb_3_3/index.php?id=89" target="_self" title="">LOGIN</a>  


			 ]]></html>
    		</renderlet:BOX>
		  </childs>
		</renderlet:BOX>
		
	
<!--THIS IS THE CONTAINER BOX_MENU-->						
		<renderlet:BOX name="box_menu">
			<childs>

    <renderlet:BOX name="box_your_name_is">
			<html><![CDATA[
				
      <br>This text is replaced through the function majixReplaceData() in the btn_start

			]]></html>
		</renderlet:BOX>
		
				<renderlet:LISTBOX name="function_selection">
					<data>
						<items>
							<item caption="Create Team" value="create_team" />
              <item caption="Show Player(FE User)" value="show_player" />    
    					<item caption="Add me to Team" value="add_player_to_team" />
    					<item caption="Show Player History" value="show_player_history" />
						</items>
					</data>
				</renderlet:LISTBOX>

				<renderlet:BUTTON label="send">
					<onclick runat="ajax" require="modalbox" params="function_selection">
						<userobj>
							<php><![CDATA[
								
								$aParams = func_get_arg(1);
								
								switch($aParams["function_selection"]) {
									case "create_team": {
										
        								return array(
        							  $this->aORenderlets["box_team"]->majixDisplayBlock(),
        							  $this->aORenderlets["box_player"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player_to_team"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player_history"]->majixDisplayNone(),
        								);
										break;
									}
									
									case "show_player": {
										
        								return array(
        							  $this->aORenderlets["box_player"]->majixDisplayBlock(),
        							  $this->aORenderlets["box_team"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player_to_team"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player_history"]->majixDisplayNone(),

        								);
										break;
									}
									case "add_player_to_team": {
										
        								return array(
        							  $this->aORenderlets["box_player_to_team"]->majixDisplayBlock(),
        							  $this->aORenderlets["box_team"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player"]->majixDisplayNone(),
                        $this->aORenderlets["box_player_history"]->majixDisplayNone(),
        								);
										break;
									}
									case "show_player_history": {
										
        								return array(
        							  $this->aORenderlets["box_player_history"]->majixDisplayBlock(),
        							  $this->aORenderlets["box_team"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player"]->majixDisplayNone(),
        							  $this->aORenderlets["box_player_to_team"]->majixDisplayNone(),

        								);
										break;
									}
									
								}



							]]></php>
						</userobj>
					</onclick>
				</renderlet:BUTTON>

				

			</childs>
		</renderlet:BOX>
		
<!--THIS IS THE CONTAINER BOX_TEAM-->		
		<renderlet:BOX name="box_team">
			<childs>
			   <renderlet:LISTER name="lister_team">
          <datasource use="ds_team" />
          <pager>
            <rows>
              <perpage>5</perpage>
            </rows>
    				<sort column="team_uid" direction="desc" />
    			</pager>
    			
    			<columns>
    				<column name="team_uid" type="renderlet:TEXT" listHeader="Team UID" />
    				<column name="team_name" type="renderlet:TEXT" listHeader="Team NAME" />
    				<column name="team_image" type="renderlet:TEXT" listHeader="Team IMAGE" />
    				<column name="crdate" type="renderlet:DATE" listHeader="CRDATE">
    				  <data>
						    <datetime format="%d/%B/%Y %H:%M:%S" />
					    </data>
					  </column>
    			</columns>
    		</renderlet:LISTER>

				<renderlet:TEXT name="team_name" label="Team Name:" />
        <renderlet:UPLOAD name="team_image" label="Team Photo">
                <data>
                    <targetdir>uploads/</targetdir>
                    <includexml>EXT:ameos_formidable/res/shared/xml/imageprocess/shaded.xml</includexml>
                </data>
        </renderlet:UPLOAD>
  

 
				<renderlet:BUTTON label="Create Team">
					<onclick runat="ajax"  params="team_name, team_image">
						<userobj>
							<php><![CDATA[
								
								$aParams = func_get_arg(1);
								$insertValuesArray = array(
                    'team_name' => $aParams["team_name"],
                    'team_image' => $aParams["team_image"],
                    'crdate' => time(),
                    );
                    
                    $newDataQuery = $GLOBALS['TYPO3_DB']->exec_INSERTquery(
                                'tbl_team',
                                $insertValuesArray
                        );       

								return array(
									$this->aORenderlets["box_team"]->majixDisplayNone(),
									//$this->oSandBox->display_array($aParams),
									
								);

							]]></php>
						</userobj>
					</onclick>
				</renderlet:BUTTON>

			</childs>
		</renderlet:BOX>

<!--THIS IS THE CONTAINER BOX_PLAYER-->		
		<renderlet:BOX name="box_player">
			<childs>
			   <renderlet:LISTER name="lister_player">
          <datasource use="ds_player" />
          <pager>
            <rows>
              <perpage>5</perpage>
            </rows>
    				<sort column="uid" direction="desc" />
    			</pager>
    			
    			<columns>
    				<column name="uid" type="renderlet:TEXT" listHeader="Player UID" />
    				<column name="username" type="renderlet:TEXT" listHeader="Player NAME" />
    				<column name="image" type="renderlet:TEXT" listHeader="Player IMAGE" />
    				<column name="date_of_birth" type="renderlet:DATE" listHeader="Player BIRTHDAY" />
    			</columns>
    		</renderlet:LISTER>

				

			</childs>
		</renderlet:BOX>
		
<!--THIS IS THE CONTAINER BOX_PLAYER_TO_TEAM-->		
		<renderlet:BOX name="box_player_to_team">
			<childs>
			   <renderlet:LISTER name="lister_player_to_team">
          <datasource use="ds_player_team" />
          <pager>
            <rows>
              <perpage>5</perpage>
            </rows>
    				<sort column="player_team_uid" direction="desc" />
    			</pager>
    			
    			<columns>
    				<column type="renderlet:TEXT" name="player_team_uid"  listHeader="Payer-Team UID" />
    				<column type="renderlet:TEXT" name="team_uid"         listHeader="Team UID" />
    				<column type="renderlet:TEXT" name="player_uid"       listHeader="Player UID" />
    				<column type="renderlet:TEXT" name="position"         listHeader="POSITION" />
    				<column type="renderlet:DATE" name="crdate"           listHeader="CRDATE" >
    				  <data>
						    <datetime format="%d/%B/%Y %H:%M:%S" />
					    </data>
					  </column>
    			</columns>
    			
    		</renderlet:LISTER>
    		
    		<renderlet:LISTBOX  name="listbox_team" label="LISTBOX TEAM:">
					<data>
						<userobj>
							<php><![CDATA[
								
								return $GLOBALS["TYPO3_DB"]->exec_SELECTgetRows(
									"team_uid as value, team_name as caption",
									"tbl_team",
									"",
									"",
									"caption ASC"
								);

							]]></php>
						</userobj>
					</data>
				</renderlet:LISTBOX>

    		<renderlet:LISTBOX name="listbox_position" label="LISTBOX POSITION">
					<data>
					   <items>
							<item caption="Goalkeeper" value="goalkeeper" />
							<item caption="Defender" value="defender" />
							<item caption="Midfield" value="midfield" />
							<item caption="Forward" value="forward" />
						</items>
					</data>
				</renderlet:LISTBOX>

 
				<renderlet:BUTTON label="Create PLAYER TO TEAM">
					<onclick runat="ajax"  params="listbox_team, listbox_position ">
						<userobj>
							<php><![CDATA[
								
								$aParams = func_get_arg(1);
								
								$insertValuesArray = array(
                    'team_uid' => $aParams["listbox_team"],
                    'position' => $aParams["listbox_position"],
                    'player_uid' => $GLOBALS["TSFE"]->fe_user->user["uid"],
                    'crdate' => time(),
                    );
                    
                    $newDataQuery = $GLOBALS['TYPO3_DB']->exec_INSERTquery(
                                'tbl_player_team',
                                $insertValuesArray
                        ); 
                  

								return array(
									$this->aORenderlets["box_player_to_team"]->majixDisplayNone(),
									//$this->oSandBox->display_array($aParams),
									
								);

							]]></php>
						</userobj>
					</onclick>
				</renderlet:BUTTON>

			</childs>
		</renderlet:BOX>
		
<!--THIS IS THE CONTAINER BOX_PLAYER_HISTORY-->		
		<renderlet:BOX name="box_player_history">
			<childs>

          <renderlet:BOX name="box_player_history_header" mode="h3" html="Here you can see your own history!" />
      
        
      		<renderlet:LISTER name="mylist3">
      			<datasource use="ds-history" />
      			<pager>
            <rows>
              <perpage>100</perpage>
            </rows>
    				<sort column="player_team_uid" direction="desc" />
    			</pager>
      			<columns>
      				<column name="username" type="renderlet:TEXT" listHeader="Player Name:" />
      				<column name="team_name" type="renderlet:TEXT" listHeader="Team Name:" />
      				<column name="crdate" type="renderlet:DATE" listHeader="Season:">
      					<data>
      						<datetime format="%Y" />
      					</data>
      				</column>
      				<column name="position" type="renderlet:TEXT" listHeader="Position" />      			
      			</columns>
      		</renderlet:LISTER>
          		


			</childs>
		</renderlet:BOX>
		
	</elements>

</formidable>
sefer ·

Hi,
im obigen Beispiel funktionieren zur Zeit einige Dinge nicht, wie ihr vielleicht getestet habt.
1.)Upload der Bilder. Es wird nur der Lokale Pfad gespeichert. Das Bild wird auch nicht upgeloadet.

2.)Nachdem man z.B. eine Mannschaft erstellt hat wird die erstellte Mannschaft nicht sofort in der Liste angezeigt. Erst ein REFRESH(F5) ist nötig. Hierdurch muss man sich aber bis zur gewünschten Liste erneut durchklicken.

3.)Unter "Show player History" werden die historien aller Spieler aufgelistet. Hier sollte allerdings nur die Historie des eingeloggten Spielers angezeigt werden.

3.1)Eventuell könnte man eine Suche implementieren, die nur die Historie der gesuchten Spieler ausgibt. Die Suchfelder könnten Mannschaft, Datum und Spieler_name sein.

Vielleicht kann mir jemand helfen #angry#
Es ist natürlich nicht ausgeschlossen, dass mein Konzept falsch ist, vielleicht muss man das menue und alles einfacher gestalten und nicht per runat="ajax", sondern per runat="server" ausführen.

thx,
Sefer