Manual Modulos Caste Llano

download Manual Modulos Caste Llano

of 24

Transcript of Manual Modulos Caste Llano

Proyecto: Creacin de un mdulo para prestashopModelo de clases reutilizable para futuros mdulos Creadopor: LaurentRaulier 30dejuliode2008 Corregidopor: LudovicBodin 14deagosto,2008 Traduccin: NoelLpez 5deseptiembre2008 Objetivodelproyecto:Proporcionar una forma sencilla de crear nuevos mdulos para la solucin de comercioelectrnicoPrestashopmediantelacreacindeun"patrndediseo"para laestructuradeunmdulo.

Medios: Elusodelasactualesclasesymtodosdeprestashop.**ParaseguirestemanualesnecesariotenernocionesdeProgramacinorientadaaobjetos.

ndice A.CreacindemduloPrestashop .................................................................................................................................................. 4 A.1rbolPrestashop ........................................................................................................................................ 4 A.2Tiposdemdulos ....................................................................................................................................... 5 A.3Patrndediseo ......................................................................................................................................... 5 A.4Lastraduccionesdemdulos ..................................................................................................................... 6 A.5Elcdigodenuestromdulo ..................................................................................................................... 8

B.ElBackoffice ................................................................................................................................................ 11 B.1Terminologa ............................................................................................................................................ 11 B.2Losmdulos ............................................................................................................................................. 12

C.ElFrontoffice ................................................................................................................................................ 15 C.1Presentacin ............................................................................................................................................. 15 C.2LaadicindeunmtododeFrontoffice ................................................................................................. 16 C.3Modificarlaposicin ............................................................................................................................... 19

D.Losmtodosgenricos ................................................................................................................................................. 21 D.1Generalidades ............................................................................................................................................ 21 D.2Elusodeestosmtodos ........................................................................................................................... 22 D.3Casodeestudio ......................................................................................................................................... 22

A.CreacindemduloPrestashopPrestashoptienelacapacidaddeincorporaranuevosmdulosalosyaexistentes. LaorganizacindePrestashoppermitemodificartantolapartevisible(Frontend)comola partedeadministracin(Backoffice). Paraentendermejorcmoseestructuranlosmdulossepuedeobservarelrboldearchivos quesepresentaacontinuacin:

A.1rbolPrestashop

Lapartequenosinteresaaques,porsupuesto,eldirectorio"mdulos".Enlafigurapueden verse un rbol que contiene los mdulos incluidos por defecto en la instalacin de Prestashop. Estosmdulossedividenenvariostiposdemdulos,haymdulos'block'querepresentan ensmismosuntipodeobjetoutilizableytambinhaymdulosms"Genricos".

A.2Tiposdemdulos

Todoslosmdulosestnorganizadosdelamismamanera,haciendoasmssencillocrear unnuevomdulo. Sepodrahablardeun"patrn"delosmdulosPrestashop.Yesteesrelativamentesimple.

A.3PatrndediseoVamosatomarcomoejemploelmduloprestashop/modules/blockcategories.

Todo mdulo incluye como mnimo un archivo .php y otro .tpl. EnnuestorejemplodeBlockcategorieselrboldedirectoriossera: +Blockcategories Blockcategories.php Blockcategories.tpl Conyadije,conestosdosarchivosessuficienteparacrearunnuevomdulo. Eneldirectoriodeejemplo,sepuedeobservartambinlapresenciadeunarchivologo.gif quevaasereliconoquesemuestreenlatablademdulosdeadministracin(Backoffice). Encontramostambinotrosarchivos(scriptphp)representadosconabreviaturasdecdigos depases: es:Espaol en:Ingls fr.:Francs d:Alemn nl:Holands ..

A.4LastraduccionesdemdulosLos script php cuyo nombre est formado por las abreviaturas de cdigos de pases contienenlastraduccionesdelmduloaesalengua.Enlasiguienteimagenpodemosveruna capturadelarchivofr.phpdelmduloblockcategories.

Estosarchivossongeneradosusandolaherramientadetraduccindel"Backoffice",no tienesporlotantoquepreocuparte...graciasPrestashop!. Slolapartedelaizquierdaeslaquenosinteresaaqu,sonlasfrasesyexpresionesque Prestashopseencargadetraducirporti.

Estoestansencillocomo:Enlosmdulosenquelasexpresionesdebentenerseencuentase pasanalmtodoldelaclaseabstractaModule.php: $this->description = $this->l('Adds a block featuring product categories'); Estemtodoesunodelos"motores"paralainternacionalizacindetusitio.

Nospermitetraducirtodaslasexpresionesquesequieran,deunidiomaaotro,ydeesta forma podemos reutilizar para cualquier idioma tanto los script php como las plantillas Smarty. Estosarchivosdeidiomas,paraserutilizadosenlastraducciones,debenencontrarseenel directoriorazdelmdulo.Prestashopnolosencontrarsiseencuentranporejemploenlos subdirectorios. Latraduccinsehardelamismamaneraparaexpresiones,siempreencapsulandoenel "Mtododetraduccin,"paralosarchivospresentesenelfrontoffice(razprestashop)yen lasplantillas(templates)detemasprestashop(prestashopDemo/themes/prestashop). Anivelprctico,lomejoresconstruirsumduloconunidiomade"referencia"yatravs delBackofficeutilizarlaherramientade"traduccin"paraeditarotrosidiomasyguardar susexpresionestraducidas. Dependiendodelaeleccindeidiomaenelmenaccedersalasexpresionesatraducir. Enlasplantillas,lasintaxisdelallamadaesunpocodiferente: {l s = 'la expresin' mod = 'el mdulo'} Sinoseponeelatributomod,laexpresinnosetraducircorrectamente. Otros comentarios: utilizar slo las comillas simples, escapar de apstrofes con barra invertida:\ydespusdecopiarypegarcuidadoconduplicarespacios"White"(blancos). Aniveldelrboldedirectorios,siesnecesarioagregarclasesyfunciones"enlazadas"al mdulo, por convenio crearemos un directorio (llamado "Class" por ejemplo) para almacenarlas. Dehecho,enelscriptbsicodelmdulosedebenincluirsololasfuncionesyconstructores necesarios (su interfaz) y las funcionalidades que se desee aadir mejor en archivos separados. Paracrearnuestronuevomdulo,hacefaltaunmnimodecdigo(todoloqueannoseha automatizado)paraindicarlainformacinrelativaaestemdulo(nombre,elquepartedel administrador),comounaclase,unconstructorylosmtodos.

A.5ElcdigodenuestromduloNuestraclasemdulovaaheredardelaclaseModule(prestashop/clases/Module.php)y, portanto,yatendrunaspocaspropiedadesymtodosdesdeelprincipio.

class BlockCategories extends Module { function __construct() { $this->name = 'blockcategories'; $this->tab = 'Blocks'; $this->version = 1.0 } } Elnombredelaclaseesladeldirectorioconunamayscula.LosdesarrolladoresPrestashop utilizanunanotacinUpperCamelCasecomounaextensindelaclasemadre. function __construct : Elconstructordenuestraclasetendrlossiguientesatributos: $this->name = 'blockcategories' : Elatributonamecontieneelnombredenuestraclase. $this->tab = 'Blocks' "Asignacindeunvaloralapestaa(tab)"Esteatributocontiene"elvalorutilizadoenla tablademdulosdegestinenlaadministracin(Backoffice);nuestromdulosemostrar enelgrupodemdulosBlock(siponemoselvalordelejemplo). $this->version = 1.0 laversion! Larazdelcdigo. $this->page = basename(__FILE__, '.php'); $this->displayName = $this->l('Categories block'); $this->description = $this->l('Adds a block featuring product categories'); $this->page = basename(__FILE__, '.php'); Laasignacindelarutadelscript. Comentario:lafuncinbasenameseparaelnombredelficheroyelnombredelacarpeta, __FILE__contienelarutacompletayelnombredearchivo(desdePHP4.0.2,__FILE__ contienelarutaabsoluta) $this->displayName = $this->l('Categories block'); El nombre queseutilizar enPrestashop.Utiliza el mtodo"l"delquehemoshablado anteriormente,asquesertraducidoporPrestashop. Si comienzas a escribir la informacin en Ingls (que es una buena cosa para la internacionalizacindelmdulo),secontinuarenestaidiomanoesbuenoquesemezcle Inglsconfrancsporejemplo,otodoquedarmuymezclado.

$this->description = $this->l('Adds a block featuring product categories'); Unabrevedescripcindelmodulo,tambintraducido. Yfinalmente parent::__construct (); Llamaalconstructordelaclasepadre. Unpequeoejemplo: Estructura: +Mdulo +Unmodule unmodule.php unmodule.tpl Cdigounmodule.php:

Resultadosenlapartedeadministracin: ElresultadodenuestrocdigoestarpresenteenlosmdulosyaccesibledesdeelBack officeatravsdelapestaaMdulos

Si lo instalas no har nada ms que llamar al mtodo de instalar de la clase padre Module.php,queregistrarlosdatosenlatablamoduledelabasededatos.

Aadiruniconoenelbackoffice: Paraaadiruniconoalmdulodesdeel"Backoffice"simplementehayqueinsertaruna imagende16x16eneldirectoriodelmdulonombrndolocomologo.gif. Puedesencontrarmsde700miniiconosenwww.famfamfam.com/lab/icons/silk/

B.ElBackofficeB.1TerminologaConelfindecomprendernosyhablardelasmismascosas,yaqueaveceslaterminologa BackofficeyFrontofficeseconfundeenunsitiodecomercioelectrnico,vamosarealizar unpequeorepasodetrminosquenuncavienemal:

Backoffice:literalmente"trastienda"loqueelclientenove,loqueelusuariodelsitiono sabenisiquieraqueexiste. Frontoffice:eslapartevisible,lainterfazdeusuario,porlaquesepuedeinteractuarcon laempresa,laweb. Diseo MVC: (modelovistacontrolador), basado en que cada una de las partes est separada. Ahoraquetenemosclaroslostrminospodemosentrarenla"Trastienda".

B.2LosmdulosLapartequenospreocupaenestemomentoesladelosmdulos

Parallegarhastaaqu(Backoffice),tienesqueidentificarte.Estodemuestraquetodoel mundonopuedetocarlo! Lo interesante es que podemos actuar en un mdulo y, por tanto, modificar algunos parmetrosdeinformacindesdeelBackoffice. Por lo tanto, desde el Back office ms que crear el mdulo lo personalizamos, as los mdulossondeusomsflexibleycubrimosmayornmerodesituaciones. Noestoyhablandodelcolordeunbotndecomandos,hablomsbiendeoportunidadesy opcionesdisponiblesparaadministrarelsistema. Enelmomentodelaconcepcindelmdulo,sueltaeltecladoyorganizatumduloantesde escribirelcdigo

Piensa en si el mdulo ser accesible para el usuario (mdulo de prestacin de nuevas funcionesparaelusuario)osloparaeladministrador(mdulodecontrolyadministracin). Culessonlasfuncionesquevaahacer(elmtodo)?Qudatosdebotener(accesoala basededatos,recuperacindedatosdesdeformularios)?Culdeberaserelresultadoala salida?Qusalida?Ysitengoquemostrar,cmo? Aquestunalista(noesexhaustiva)depreguntas. Paraaccederalaconfiguracindelmdulo,sedebeaadirelsiguientemtodoanuestro mdulo: public function getContent () { // Instruciones . } Este poco cdigo, aade en el Back office un enlace hacia la pgina de configuracin asociada.

Sisesigueelenlace,lapginadestinoestarvacademomento. TengaencuentaqueesinteresantepasarlosparmetrosporelmtodoGET: /index.php? tab=AdminModules&configure=unmodule&token=604ae5....etc Porotrolado,paraqueunmdulose"aada"aunapartede"Frontoffice"deberreferirsea un "gancho" (Hook) que debe existir en la tabla Prestashop del mismo nombre. LastablasdeHookpresentesenPrestashopson: 1. payment 2. newOrder 3. paymentConfirm 4. paymentReturn 5. updateQuantity 6. rightColumn 7. leftColumn 8. home 9. header 10. cart 11. authentication 12. addproduct 13. updateproduct 14. top 15. extra 16. deleteproduct 17. productfooter 18. invoice 19. updateOrderStatus 20. adminOrder 21. footer 22. PDFInvoice 23. adminCustomers 24. orderConfirmation 25. createAccount 26. customerAccount 27. orderSlip 28. productTab 29. productTabContent 30. shoppingCart

Elnuevocdigoquedaraas: class BlockUnModule extends Module { function __construct() { $this->name = 'blockunmodule'; $this->tab = 'Divers'; $this->version = 1.0; parent::__construct(); $this->page = basename(__FILE__, '.php'); $this->displayName = $this->l('Module block'); $this->description = $this->l('Adds a block featuring nothing'); } function install() { if(parent::install() == false OR !$this>registerHook('leftColumn')) return false; return true; } public function getContent() { } function hookLeftColumn($params) { global $smarty; return $this->display(__FILE__, 'blockunmodule.tpl'); } function hookRightColumn($params) { return $this->hookLeftColumn($params); } } Unodelospuntosmsimportanteeslallamada,denuestromduloaciertaspartesdel Frontoffice(enelcasodesernecesarioobviamente). LasintaxisutilizadaesaqulaquelosusuariosdeZendFrameworkseguramenteconocen:la concatenacindelhookyelnom_del_hook:hookLeftColumnyhookRightColumn. Enestecaso,sisequiere"enganchar"unmdulo(suinterfazopartevisible)aladerecha,es redirigidohacialacolumnadeizquierda...Nohacemossiempreloquequeremosenlavida!

VolveremosmstardeaestanocindelBackofficeydelainteraccinentremdulos,pero en esta primera aproximacin a la concepcin de un nuevo mdulo de Prestashop, nos quedaremosenloesencialyacontinuacinpasamosainteresarnosporcomomostrarel Frontofficeyenelcdigodelfichero'blockunmodule.tpl'(lavista).

C.ElFrontofficeC.1PresentacinComohemossealadoanteriormenteelFrontofficeeslapartevisibleporelusuariode nuestrositiodecomercioelectrnico. Lapginaestorganizadaendistintaspartes,tantoparalaorganizacindemduloscomo paraeldiseoCSS. Para comprender mejor esta estructura basta con abrir su "demoPrestashop " con su navegadorfavorito("FireFox")yhabilitarfirebug... Ps:firebugesunaextensindeFireFoxindispensableparacualquierdesarrolloweb.

Cuando enganches el mdulo gracias al mtodo HookLeftColumn desde su clase vas a aadirsteal"div"identificadoporsu"id"left_column(unaetiquetadivcssesuntipode bloque,esdecir,quepuedecontenerotroselementos).

NocreoqueseasolamenteunacoincidenciaquelosdesarrolladoresdePrestashopasociaron bienestas2partesenelmomentodelaconcepcindelproyecto. Simirasunpocomscercalacapturadepantallaeste"block"contieneelblockdelaclase myaccount. Es importante entender la forma en que estos mdulos estn organizados y su relacinconlavistadelashojasdeestilocss. Deberaestarfamiliarizadoconlashojasdeestilosinoesasunadireccin:alsacrations (enfrancs) Es hora de interesarse un poco ms por nuestro archivo que va a aadir un preciososuperbloqueenlacolumnaizquierda. Blockmonmodule.tpl

Seacualseaelnombrequeledes,indcaloenelmtodohookLeftColumnreturn$this> display(__FILE__,'blockmonmodule.tpl),estosignificaquenuestroarchivo.tmpest eneldirectorioactual.Sinembargo,puedesponerlodondequierasheindicarlaruta. Ps: fijate bien en el nombre del .tpl ya que si copias el ejemplo debes cambiar blockunmodule.tpl por blockmonmodule.tpl o bien crear el .tpl con el nombre blockunmodule.tpl. DeberamosabordaraqupartedeSmartyydecssaunqueestenoeselpropsitodeeste tutorial.Asquevamosapasardepuntillasestaparteytendremosencuentasolamentelo relacionadodirectamenteconlacreacindelmdulo.

C.2LaadicindeunmtododeFrontofficeSiseprevquenuestromduloaadirfuncionalidadesparalosusuarios,hayqueagregar, naturalmente,losmtodosquetenganencuentalasaccionesrealizadasporesteusuario. Porlotanto,desdeelbloquepreviamenteaadi,sealamosunlugar(unanuevapgina) queseencargardetratarestasaccionesdelosusuarios. Ennuestroarchivo'blockmonmodule.tpl',aadiremos unenlaceaestanuevapgina.En cuanto al estilo reutilizamos el de Prestashop, mediante la aplicacin de clases css ya definidasenelarchivoglobal.css(Demo\prestashop\temas\prestashop\css\global.css). {l s='Block' mod='blockunmodule'}

  • {l s='Nouvelles fonctions' mod='blockunmodule'}

Sihasseguidocorrectamenteeltutorialdesdeelcomienzo,deberstenerentuFrontoffice unbonitobloqueconunenlaceanuestroscriptunmodule.function.phpqueseencontraren nuestrorepertoriodeclasesdelmdulo. Podramos ponerestefichero descript directamente conlosotrosficheros descriptdel "Front", pero es mejor tenerlo en nuestro mdulo, para ser coherentes con nuestra maneradehacerproyectosypoderinstalarlofcilmente. Ps:unpequeodetalle"purista"respectodelcdigodenuestromdulodelacolumna izquierda: Noesnecesarioeinclusopuedeconsiderarsecomo"divites"utilizarunaetiqueta"div"que contenga unaetiqueta "ul", dehecho,lasetiquetas' ulyaestnetiquetadas comoType bloqueyesintil,porlotanto,elencapsularenundivsuperfluo.Lamejorsolucinsera aplicarelestilodirectamentealul:

  • // vos listes ...

Como ya dijimos el link Nouvelles fonctions apunta al script que contendr nuestras funciones. Para hacer una prueba, puedes aadir un " hello mis nuevas funciones " en el fichero blockunmodule\classes\unmodule.function.php. Unpocodecepcionanteelresultado,peroeselesperado,ypodemosobservarquenuestro ficherophpfunciona. Con carcter excepcional, hablaremos un poco de Smarty para poder hacer esta pgina "Prestashop". Smarty es la biblioteca que maneja la vista de nuestra aplicacin. En pocas palabras Smartyanalizadeformadinmicalaspartesentrecorchetes{}paratransformarlasen cdigohtmllegibleporelnavegador.

Bastaconaadirlasplantillasheader.tplyfooter.tpl(definidasporPrestashop)anuestro fichero.phpparaqueestesecargueenlapginadePrestashop. Ps:Sisefijalasrutasdellamadaalosficherossonabsolutas(../../../). Estanoeslamejormaneradesolucionarlarutadeldirectoriodenuestraclase,seramejor tenerun"macro"define().Prestashopyapensenesto:_PS_ROOT_DIR_ Hayque"importar"losvaloresdeestas"macro". Sin embargo, los archivos invocados son archivos php! Esto es porque este archivo header.phpdefinelaspropiedadesylosdatostransmitidosaSmarty. Lainvocacinquesehacedesdeheader.php: /* CSS */ $css_files[_THEME_CSS_DIR_.'global.css'] = 'all'; ... etc $smarty->assign(array( 'HOOK_HEADER' => Module::hookExec('header'), 'HOOK_LEFT_COLUMN' => Module::hookExec('leftColumn'), 'HOOK_TOP' => Module::hookExec('top'), 'static_token' => Tools::getToken(false), 'token' => Tools::getToken() )); .... etc $smarty->display(_PS_THEME_DIR_.'header.tpl'); Estoestamsclaroahora...no?Volveremosalasclasesabstractasmstarde. Fjateenlasintaxis:'HOOK_HEADER'=>Module::hookExec(header')

Entuarchivounmodulefunction.tpl,debesaadirtucdigo,aadeporejemplo: "Lasnuevascaractersticas",yrecargalapgina... Esoestodoloquequeda,escribirnuestrosmtodosparaaadirfuncionalidadessiguiendo losmismosprincipios: o recuperarlosdatosparaserprocesados o tratamientodeestosdatosatravsdenuestrasfunciones o mostrarelresultadodeestostratamientos ApartirdeaquentraenjuegotutalentocomoprogramadorPHP!

C.3ModificarlaposicinComo nuestras nuevas funciones de usuario son ms importantes que otras, y la parte inferiorizquierdadelapginanoeselmejorsitioparanuestromdulo,podemoshacera nuestromdulodeprimeraclaseatravsdenuestroBackoffice: BackOffice>>Modules>>Positions

podemosllevarloalaprimeraposicinporejemplo!

Loqueparanuestroegoesmuchomejor.

Esyaelmomentodeirunpocomsalcdigoyverdeterminadosmtodosyfuncionesde Prestashopyapresentes,paraaccederanuestrabasededatosocualquierotrainformacin tilparanuestrotratamiento. C.4Importatuspropiosestilos Aadeatuarchivo.tpllasiguientelnea: @import url({$base_dir}modules/unmodule/css/module.css); Creaundirectoriocsseneldirectoriodetumduloyaadirunarchivo.cssdeestetipo: /* unmodule block */ #unmodule{ } #unmodule_xxx{ }

D.LosmtodosgenricosD.1GeneralidadesNo se trata de una lista exhaustiva de mtodos Prestashop para que puedas generar la documentacinconPHPDocumentoroyendodirectamenteadocprestashop,sinomsbien unrecordatoriodelasoportunidadesqueofreceestaclasedeherramientas. Convienerevisarlosantesdeescribirunafuncinparacomprobarquenoestyapresentaen PrestaShop. Algunosejemplos: Siesttrabajandodelladodel Backofficesindudanecesitarenalgnmomentoun identificador;estesepasacomounargumentoGETenlaURL,algocomoesto: token=604ae5e405da9eb32fc414a. Laherramientasiempreda2mtodos:getTokenygetAdminToken Puedeasociarlaherramienta:::getValueamenudo. SiseutilizaunformularioyenvasdatosconlosmtodosGEToPOST,paracomprobar siunvalorestpresente,puedeutilizarelmtodoisSubmit. SitienesqueenviarunaSQL,pararecuperarlaconexin"Persistente"alabasededatos desdelaclaseDbpuedeshacerlofcilmenteconelmtodogetInstance. YluegoutilizarEjecutarparaenviarloamysql. En muchos casos, ser til poder recuperar un valor de configuracin de la tabla "configuracin". Enlugardereescribirunafuncin,puedesusarConfiguration::get(nom_configaration). Tienesquebasarteentuexperienciaybuscarlasfuncionesqueseadaptenati. Parahaceresto,bastaconhacerunasencillaprueba echo Configuration ::get('BLOCK_CATEG_MAX_DEPTH' ); Configuration::updateValue('BLOCK_CATEG_MAX_DEPTH', intval($valeur)); echo Configuration ::get('BLOCK_CATEG_MAX_DEPTH' ); Vealoscambiosenlatablaconfiguration,yelefectoproducidosobreelsitio. Prueba a editar un script y ver el cdigo y las observaciones formuladas por los desarrolladoresdePrestashop.

Escribe sentencias SQLypruebalosmtodos dB(vaselafichadeclaseresumenDb. Clase)...ymodificaelcdigoquenodejardetenererrores!

D.2ElusodeestosmtodosHesentidoquetehedejadounpocofrustradoalfinaldelcaptuloanterior,cuandotedej conunapginaenblancoyunttulo. Pero despus de esta breve presentacin de mtodos "genricos" (que yo mismo llamo "utilidades"),podemoscrearelcdigodeunaaplicacinsimplequepermitaalosusuarios ver la informacin sobre sus ltimas rdenes y si el cliente ha echo ms de 2 pedidos ofrecerleunfotodeuncoche

D.3CasodeestudioLoprimero,necesitamoselnombredelcliente;recuperarsunmerodeidentificacinde cliente(enid_customerprestashop),elnmerodepedidosasociadosconestecliente,siel nmerodepedidosesestrictamentesuperiora1ganuncoche Estassonlas"funciones"aprogramar: o Sielclienteestconectadorecuperarsuidentificadorsino,nosehacenada. o PreparalaconsultaSQL. o HacerlaconexinalabasededatosconDb:getInstanceyejecutarlaconsulta. o Tratarlarespuesta(laclasificacinydeltratamiento). o PreparalosdatosparapasaraSmarty o Mostrarlarespuesta Yatenemosnuestros2archivos:unmodulefunction.phpyunmodulefunction.tpl. Elusuario llegar alapginadetratamientoatravsdelenlaceennuestromdulo;en nuestroscriptactuaremosenfuncindesuestado:conectadoono global $smarty; include('../../../config/config.inc.php'); include(_PS_ROOT_DIR_.'/header.php'); // Le client est il connect ou non // Si pas connect if (!$cookie->isLogged()) { // Donnes transmettre $message = "pour profiter de tout nos avantages et connaitre les derniers infos, merci de vous identifiez"; $smarty->assign('message',$message); } else

{ // Donnes transmettre $message = "bonjour"; $smarty->assign('message',$message); } $smarty->display(dirname(__FILE__).'/unmodulefunction.tpl'); include(_PS_ROOT_DIR_.'/footer.php'); Ponapruebatucdigo... Sielclienteestregistrado,esmejordarlelabienvenidamostrandosunombre,onombrey apellido,elcasoeshacerlesaberqueestclaramenteidentificadoyquehasidoreconocido. Losdatos estnenlabasededatos,ypodemosusarelIDpararecuperardatos quese necesitan: $customer = new Customer(intval($cookie->id_customer)); Nohaynadaparticular... VamosapasarlainformacinquenecesitamosmostraranuestrogestordeSmarty;perono sernecesariopasartodalainformacin. Enunprimerpaso,ponemoslosvaloresquequeremosexcluirdelatabla: $exclusion = array('secure_key', 'date_add','date_upd'); 'old_passwd', 'active',

Esto es slo un ejemplo, por supuesto, adapta la tabla como necesites. Vamosaconstruirnuestro"usuario"comoparmetroaSmartyteniendoencuentanuestras excepciones(camposexcluidos). $fields = $customer->getFields(); foreach ($fields AS $key => $value) if (!in_array($key, $exclusion)) $customer -> {$key}; Denuevonadaespecial,fijateenlasintaxis:$customer>($Key); Vamosahacerunapequeoinciso"tcnico".Unnombredevariableseponedelasiguiente manera: $nom = 123 ;//noesunnombrevlido Utilizando: $key -> {123} ;//'123'ser"permitido"comonombredevariable

Unasimpleprueba: $nom = 123 ; $$nom = 456 ; echo ${123} ;//muestra'456' Paraterminar: $smarty->assign('customer',$customer); Yenelcdigo.tpl: {$message}, {$customer->firstname} PreparemosahoranuestroSQL;recordarquenecesitamosseleccionarelnmerodecompra yapasadopornuestroclienteidentificadoen$cookie>id_customer $sql = "SELECT count( `id_order` ) FROM `orders` JOIN `customer` ON `customer`.`id_customer` =`orders`.`id_customer` WHERE `customer`.`id_customer` = $cookie->id_customer"; UtilizaremoslosmtodosdelaclaseabstractaDbparaejecutarnuestraQuero.Ytambien comoargumentoparaSmarty $reponse = Db::getInstance() -> ExecuteS($sql); $smarty -> assign('commande',$nombre_commande[0]); Ennuestroarchivo.tpl: {$commande} Comoeslgicoprobamoselresultadoantesdecontinuar.Todofuncionacomoestaba previsto? Proseguimos:Consultaenlatabladenuestroproyectoadiccindefuncionesdeusuario. Loquesemuestraacontinuacineselresultadodeltratamiento: Dependiendodesielresultadoesestrictamentemenosde1:mensajeusuario Ysiesporencimade1:vistadelcocheganado+mensaje EltratamientosepuedehacerenelscriptphpoenSmarty. Espreferibletratarlosdatosenelscriptyenviarsloloestrictamentenecesarioalavista paranomezclartodo.

switch($nombre_commande[0]) { case 0 : { $msg = "Aucune commande enregistre votre nom"; $img = _PS_IMG_."logo.jpg"; } break; case 1 : { $msg = "Encore une commande pour gagner !"; $img = _PS_IMG_."logo.jpg"; } break; case 2 : { $msg = "Bravo ! vous avez gagnez une voiture"; $img = _PS_IMG_."voiture.jpg"; } break; default : $msg = "non renseign"} Bueno,afuerzadetransmitirvaloresasmarty,repitelamismasintaxis. Acontinuacinseutilizaunamatrizdevalores: $smarty -> assign(array('customer'=>$customer, 'message'=>$message, 'commande'=>$msg, 'image' =>$img)); Ynoolvidesaadirlasimgenesquequieresmostrar,enelejemploseencuentranendemo/ prestashop/imgperonadaesobligatorioytufuncindeusuarioesfuncional. Acreartuspropiosmdulos Ahhhselcochequesegana: