Professional Documents
Culture Documents
ExtensionKey: Copyright2007,ChristianBELLET,<christian.bellet@typo3journal.com>,www.typo3journal.com
ThisdocumentispublishedundertheOpenContentLicense availablefromhttp://www.opencontent.org/opl.shtml
ThecontentofthisdocumentisrelatedtoTYPO3 aGNU/GPLCMS/Frameworkavailablefromwww.typo3.com
Table of Contents
Developpementd'extensions.....................1
Introduction....................................................................1 Aquoiasert?..........................................................1 Utilisationdukickstarter...............................................1 Generalinfo................................................................2 Setuplanguages........................................................3 NewDatabaseTables................................................3 Loadpresetfields.......................................................5 Ecrituredesfichierssurleserveur.............................6 Dveloppementlocal.....................................................7 Crationd'enregistrements........................................7
Rcuprationdesfichiers...........................................8 ConfigurationduTCA.................................................8 Insertionduplugin....................................................10 ConstantesetSetupdel'extension..........................10 Utilisationd'untemplateHTMLpourlerendudansle frontend.....................................................................11 Fonctionsconnaitre...............................................11 Complterledveloppement......................................13 Configurationavecdutyposcript..............................13 Ajouterunliensuruneimagepourl'agrandir..........15 Changelog.....................................................................15
Introduction
A quoi a sert ?
Cedidacticielpourobjectifdevousprsenterdemaniresimpleetconciselacrationd'extensionsousTYPO3 Nousallonsconstruireuneextensionassezsimplepourgrerunelistedecontacts.Cetteextensionutiliserauntemplate htmlcontenantdesmarqueurs.Pourchaquecontact,nousauronsunnom,unprnom,unnumrodetlphoneetune adresse.Nousallonsgalementajouteruneimagepourchaquecontactafindecompliquerunpeuleschoses:o) Pourvousaiderdanscetteapprentissage,vouspouveztlchargerl'extensiondfinitive,l'installerdansTYPO3afinde visualiserlecontenudesfichiersdudidacticiel.
Utilisation du kickstarter
Rendezvousdanslegestionnaired'extensions(ExtensionManagerouEM)pourdveloppervotre1reextension.
Developpementd'extensions1
Onentreicilacld'extensionquijelerappelle,doittreunique.
Cliquezensuitesurupdatepourrechargerl'assistant
Developpementd'extensions2
Nousdevonsaupralableremplirquelquesinformationssurlefontionnementdenotreextension.Commenonsparlui donnerunnometunedescriptionenanglais.CliquezsurlacroixsitueprsdeGeneralinfo.
General info
L'tatinitialestalphaetils'agitd'unpluginfrontend.
CliquezensuitesurleboutonUPDATE
Setup languages
Nousallonsicidfinirleslanguespourlesquellesnouseffectueronsunetraduction.Slectionnezlalanguefranaisepuis surUpdate.
Developpementd'extensions3
Voiciquelquesoptionsbienpratiquesquevouspouvezcocheravantdecrerleschampsdansvotretable: AddDeletedfield:ajouteunstatutsupprimmaisconservel'enregistrementenbase AddHiddenflag:permetdecacherlesenregistrements AddAccessgroup:permetderendrevisibledesutilisateursfrontendlalistedesenregistrements Manualorderingofrecords:permetd'ordonnermanuellementlalistedesenregistrementsenmodelist Allowedonpages:permetdecrerdesenregistrementssurdespages,ladiffrencedesdossierssystmes AllowedinInsertRecordsfieldincontentelement:autoriselacrationdeliensdepuisleslmentsde contenu AddSaveandnewbuttoninforms:optionbienpratiquepourcrerdesenregistrementslasuitedesautres ajouteunboutonSaveandnew
Nousallonscrerleschampssuivants:firstname,lastname,street,postcode,cityetimage
VoicicommentnousallonsdemanderauKickstarterd'insrerunchampimagedanslatabledenotreextension.
Developpementd'extensions4
Commevouslevoyez,ils'agitd'unchampdetype'files'.Cliquezsur'Update'pourafficherdesoptionssupplmentaires.
Developpementd'extensions5
Developpementd'extensions6
PuisWRITE.Installezvotreextensioncommevousleferiezpourn'importequelleautreextension.TYPO3nousdemande decrernotretableainsiqu'unrpertoire.
Voicinotreextensiondansl'EM:
Dveloppement local
L'extensionatgnreparlekickstarter.Lesfichierssontactuellementsurleserveuretlaoulestablesonttcres enbasededonnes.
Developpementd'extensions7
Cration d'enregistrements
Nousallonscrerdeuxenregistrementssurunepagedenotresite.CrezunepageappeleContacts.
Passezensuiteenmodelistesurcettepageetcrezquelquesmembres.
Configuration du TCA
Editezensuitelefichiertca.php.Cefichiercontientnotammentlaconfigurationdeschampsdanslebackend.Reprez l'entrepostcode(lenomduchampdanslabasededonnes)carc'estcellequinousintresse.
Developpementd'extensions8
"postcode"=>Array( "exclude"=>1, "label"=> "LLL:EXT:user_contactlist/locallang_db.xml:user_contactlist_members.postcode", "config"=>Array( "type"=>"input", "size"=>"5", "max"=>"5", "eval"=>"int", "checkbox"=>"0", "range"=>Array( "upper"=>"1000", "lower"=>"10" ), "default"=>0 ) ),
TCAsignifieTableConfigurationArray.Vousneserezdoncpassurprisderetrouveruneconfigurationsousformede tableau!Modifiezsizeetmaxvotreconvenance,sachantquelogiquement,lavaleurdesizeestinfrieurelavaleur demax. Voustrouvezd'autresinformationssurleTCAsurcettepage:http://typo3.org/documentation/documentlibrary/core documentation/doc_core_api/4.0.0/view/4/2/ Ecraserensuitelefichiersurleserveuraveccettenouvelleversion. Lefichierext_tables.phpestcomplmentairedetca.php.Onretrouvedanscedernier,ladfinitiondetousleschamps tandisqueext_tables.phpcontientleurreprsentation. Nousavonsicilaconfigurationquigrel'affichagedesdonnesdanslebackend.Lavaleur'label'indiquelechamputilis enpriorit;ils'agiticide'uid'.Nousdevonsafficherleprnometlenomafinquecesoitplusexplicitepourl'utilisateur.Nous allonsdoncmodifier'label'etremplacer'uid'par'firstname'pourleprnometajouter'label_alt'pourleschampsalternatifs, savoir'lastname'.Normalement,'label_alt'contientdesvaleursquiserontaffichessi'label',icifirstname,n'estpas renseign.Nousallonsdoncforcerl'affichageavec'label_alt_force'=>'1' Voicilecode:
$TCA["user_contactlist_members"]=array( "ctrl"=>array( 'title'=>'LLL:EXT:user_contactlist/locallang_db.xml:user_contactlist_members', 'label'=>'firstname', 'label_alt'=>'lastname', 'label_alt_force'=>'1', 'tstamp'=>'tstamp', 'crdate'=>'crdate', 'cruser_id'=>'cruser_id', 'sortby'=>'sorting', 'delete'=>'deleted', 'enablecolumns'=>array( 'disabled'=>'hidden', 'fe_group'=>'fe_group', ), 'dynamicConfigFile'=>t3lib_extMgm::extPath($_EXTKEY).'tca.php', 'iconfile'=> t3lib_extMgm::extRelPath($_EXTKEY).'icon_user_contactlist_members.gif', ), "feInterface"=>array( "fe_admin_fieldList"=>"hidden,fe_group,firstname,lastname,street,postcode,city, image", ) );
Voicinanmoinscequevousdevriezretrouveraprscesdeuxmodifications:
Developpementd'extensions9
Lacrationdefichierstemporairesdans/typo3/typo3confseradsactive.
Insertionduplugin
InsrezensuiteunpluginsurlapageContacts.
Developpementd'extensions10
Aveclalignesuivante,jechangelalgende:
t3lib_extMgm::addStaticFile($_EXTKEY,'static/default_contactlist/','Defaultsetup');
Nousallonsconfigurerlesetupdenotregabaritpourluiindiquerosesituecetemplatehtml.
//Monextension plugin.user_contactlist_pi1{ templateFile=EXT:user_contactlist/pi1/user_contactlist_template.html }
Fonctions connaitre
Lesautresmthodesconnatre: fileResource()oucObj>FILEquivalirelecontenudenotretemplateHTMLcommeleferaitunfreadavecphp getSubpart()rcuprelecontenuentredeuxsubparts substituteMarkerArrayCached()s'occupeduchercherremplacerpourlesmarqueurs/subpartsetlecontenu rcuprenbase pi_wrapInBaseClassestunesimplemthodequiretournelecontenuentourparuneclasseportantlenomde notreextension. Exemple:<divclass="usercontactlistpi1">$content</div>
VoicicequevouspouvezfairesimplementavecquelquesconnaissancesenPHP,unelgrelecturedel'APIpourles principalesfonctionsetdelapratique:
Developpementd'extensions11
CodePHP
functionmain($content,$conf) { $this>conf=$conf; $this>pi_setPiVarDefaults(); $this>pi_loadLL(); ##Debug //t3lib_div::debug($this>conf['templateFile']); ##Autredebug //t3lib_div::debug($this>cObj>fileResource($this>conf["templateFile"])); #PageID //$GLOBALS['TSFE']>id #Getthetemplatecode $this>templateCode=$this>cObj>fileResource($this>conf["templateFile"]); $template=array(); #Getthetotaltemplate $template['total']=$this>cObj>getSubpart($this>templateCode,'###TEMPLATE###'); #Getarow $template['item']=$this>cObj>getSubpart($template['total'],'###ITEM###'); #ConstructtheDBquery $this>orderby='lastname,sorting'; $res=$GLOBALS['TYPO3_DB']>exec_SELECTquery('*','user_contactlist_members','pidIN('. intval($GLOBALS['TSFE']>id).')',''.$this>orderby.'','',''); #Loop $markerArray=array(); while($row=$GLOBALS['TYPO3_DB']>sql_fetch_assoc($res)){ #Fillthemarkersineachitem $markerArray['###FIRSTNAME###']=$row['firstname'];//getfirstname $markerArray['###LASTNAME###']=$row['lastname'];//getlastname $markerArray['###STREET###']=$row['street'];//getstreet $markerArray['###POSTCODE###']=$row['postcode'];//getpostcode $markerArray['###CITY###']=$row['city'];//getcity $markerArray['###IMAGE###']=$row['image'];//getpicture //Fillthetemporaryitem $contentItem.=$this>cObj>substituteMarkerArrayCached($template['item'],$markerArray); } //Fillthecontentwithitemsin$contentItem $subpartArray['###CONTENT###']=$contentItem; //FilltheTEMPLATEsubpart $content=$this>cObj>substituteMarkerArrayCached($template['total'],array(), $subpartArray); //return$content; //$this>pi_getPageLink($GLOBALS['TSFE']>id) //$this>pi_linkToPage('gettothispageagain',$GLOBALS['TSFE']>id) } //$content=''; //Returncontent return$this>pi_wrapInBaseClass($content);
Lesfonctionnalitsdel'extensionsontassezsimplesilestvrai!
Voicilersultatenfrontend:
Developpementd'extensions12
Pasmalmaislerendudesimageslaissedsirer.Forcment,nousavonsrcuprlechampl'tatbrut.
Complter le dveloppement
Nousrcupronsenfrontendlesdonnesstockesenbasededonnes.L'affichageestcorrectmaisnouspouvonsrajouter despropritsentyposcriptpouramliorerlerendu.
Modifionsensuitelamthodemain():
//$markerArray['###IMAGE###']=$row['image'];//getpicture $markerArray['###IMAGE###']=$this>getImage($row['image']);
VouspouvezgalementmodifierleSetupdevotregabaritaveclecodesuivant:
//Monextensionperso plugin.user_contactlist_pi1{ templateFile=EXT:user_contactlist/pi1/user_contactlist_template.html #cObjIMAGE image=IMAGE } Developpementd'extensions13
Voicilersultatenfrontend:
Vouspouvezpasserd'autresparamtresentyposcriptcommeparexempleunebordureautourdel'image(border),une largeur(width)...
Voicilerendu:
Developpementd'extensions14
Unenouvellecapturepourvousmontrerlersultat:
Changelog
Version0.0.1 1reversiondeladocumentationetdel'extensiondetest
Developpementd'extensions15