Una de las caracteristicas más potente de TYPO3 es la capacidad de adaptarse a las necesidades de nuestro proyecto, generalmente la parte visual es las más facil, pero no se olviden de la capacidad de typo y las extensiones para typo de extenderse sin control... ahhhhhhh!!!.
Me imagino que más de alguno se ha preguntado para que sirve( más de alguno debe saberlo).
el array $TYPO3_CONF_VARS['BE']['XCLASS'] y $TYPO3_CONF_VARS[FE]['XCLASS'] o resumiendo XCLASS que lo encuentran siempre en los archivos autogenerados por kickstarter y se ve así:
bueno simplemente eso sirve para poder incluir un archivo extra a nuestro pi veamos un ejemplo:
imaginemos que hemos hecho una extensión y nuestro pi1 tiene una clase tx_myextkey_pi1 la cual posee 3 metodos main(), getForm() y saveData(). El
template de nuestro plugin es simplemente el formulario en html (pues nuestra aplicación esta fija en un solo idioma), supongamos ahora que nuestra extensión esta terminada, probada entregada y pagada. Unos meses despues llega el cliente, diciendo ¡necesito agregar un conjundo de campos y que estos se guarden en otro servidor de bd en el formulario de ingreso de beneficiarios!, tu dices ok se hace el respectivo acuerdo y comenzamos, pero como comenzamos? Modificamos el pi1 o lo extendemos?, ya sabemos como funciona la extensión y especificamente la clase tx_myextkey_pi1, cual reprecenta al dicho formualario. Es aquí donde podemos usar nuestra famosa pieza de código la inclusión, denominado como los XCLASS.
Para ellos debemos crear una nueva extensión myextkey2 y en el archivo ext_localconf.php de esta definimos la ruta del archivo que usaremos para extenter nuestro tx_myextkey_pi1 de la sisguiente forma.
$GLOBALS['TYPO3_CONF_VARS'][TYPO3_MODE]['XCLASS']["ext/myextkey/pi1/class.tx_myextkey_pi1.php"]= t3lib_extMgm::extPath('myextkey2').'ux_tx_myextkey_pi.php';
Nota: el ux_ (user extension)debe ir siempre cuando se trata de una extensión mediante inclusión en XCLASS y tambien se debe mantener el nombre del archivos original, es decir, ux_nombre del archivo en donde esta la clase que deseo extender.
El contenido de ux_tx_myextkey_pi1.php sera así:
nuestra nueva clase ux_tx_myextkey_pi1 se basa en tx_myextkey_pi1, es decir, estamos en precencia de la herencia :). Y eso es todo (obviamente se debe escribir las instrucciones para el metodo saveDataInOtherServer y agregar los campos al formulario al template).
Pero nos queda la interrogante. Como hace typo3 para ejecutar mi extensión con la nueva clase y no la original??
typo3 usa un metodo estático t3lib_div::makeInstance($className), este metodo devuelve una referencia al objeto de la clase que es pasada mediante el parametro $className, pero antes de instanciar $className se instenta recursivamente ver si existe la clase ux_$className para ser instanciada.
Entoces, cuando se esta a punto de ejecutar el plugin tx_myextkey_pi1, typo3 hace la llamada t3lib_div::makeInstance('tx_myextkey_pi1') que itenta primero ver si existe las clase ux_tx_myextkey_pi1, la que si existe dentro del script que se ejecutando class.tx_myextkey_pi1.php gracias a la inclusión del archivo ux_tx_myextkey_pi1.php en el array XCLASS entonces se instancia nuestra ux_clase y hemos extendido nuestra propia extensión, o sea, estamos en presencia de una extensión extendida :).





Ricardo Mieres ha comentado el jueves, 24-04-08 23:59.
Recomienda que visites http://www.youtube.com/user/rmier001
Sip, ademas de ser una buena pr·ctica de desarrollo, se ahorran horas al momento de extender extensiones de otras personas, se busca el metodo correcto para agregar tus funcionalidades y listo.