Índice de la serie: desarrollo de extensiones con Joomla

  1. Hacer componentes en Joomla!
    1. Patrón MVC
    2. Concepto de Front-End y Back-End
    3. Primer componente MVC simple con Joomla!
    4. Segundo componente, Back-End y acceso a datos.
    5. Crear el xml del componente de joomla y generar instalable.
  2. Hacer Módulos para Joomla!
  3. Hacer Plugins para Joomla!

En los anteriores posts he hablado sobre el patrón MVC y sobre el concepto de front-end y back-end en Joomla!. Una vez entendido se puede empezar a programar un componente MVC en condiciones.

Iniciación: Construir un componente simple en Joomla! 1.5 Usando el patrón MVC.

Siguiendo el patrón MVC, vamos a crear un componente simple para joomla 1.5 al que llamaremos prueba. El objetivo de esta primera toma de contacto es entender la metodología de trabajo para crear el componente de joomla! 1.5.

Lo primero que haremos será ir a la carpeta principal de Joomla en nuestro servidor web. Dentro de esa carpeta localizar el directorio components .
Observa que dentro del directorio existen otros directorios que empiezan por com_xxxx . Esta es la primera norma que pone Joomla!: los componentes se deben de ubicar en un directorio cuyo nombre empieze por com_ seguido del nombre del componente, por ejemplo para el componente prueba seria com_prueba (este aspecto es similar a la parte de módulos que hemos visto anteriormente)

Por lo tanto creamos un directorio dentro del directorio components y lo llamamos com_prueba. Cuando llamemos a nuestro componente, lo primero que hace Joomla es buscar el archivo php que hay dentro con el mismo nombre que el componente y ejecutarlo. Este es el punto de entrada del componente. Creamos el fichero prueba.php dentro del directorio y de momento lo dejamos en blanco. Por ahora solo estamos creando la estructura del componente. Lo siguiente es crear el archivo controller.php, y de momento también lo dejaremos en blanco. Ahora necesitamos crear los directorios en los que ubicaremos nuestro Modelo y nuestra Vista.

Crea un directorio con nombre models y otro con nombre views.

Dentro del directorio views, hay que crear un directorio por cada vista y el directorio tiene que tener el nombre de la vista; crea el directorio prueba dentro del directorio views.

Dentro del directorio views/prueba crea el directorio tmpl , aquí es donde se guardarán los layouts de la vista. El layout es el fichero final que se mostrará por el navegador, más adelante explicaré esto.

Crea el fichero views/prueba/view.html.php , este fichero también es necesario. Ahora crea el fichero prueba.php dentro de models.

Ya tienes la estructura básica del componente, aunque aún no hemos introducido código.

Componente de Joomla

Como podrás imaginar el modelo del componente irá dentro de la carpeta models , las vistas se ubicaran dentro del directorio views, y el controlador en el archivo controller.php .

Joomla! 1.5 sabe qué componente tiene que cargar porque busca en la query string de la petición el parámetro “option”, del cual obtiene el nombre del componente a cargar. Es decir, nosotros para llamar a nuestro componente prueba, introduciremos en joomla la URL acabada con index.php?option=com_prueba. Esto muestra la pagina principal de nuestro componente, que por defecto carga la vista con el mismo nombre del componente, es decir, la vista con nombre “prueba”.

Cuando se carga el componente, se ejecuta el punto de entrada a este, prueba.php, y en el punto de entrada será donde nosotros crearemos una instancia de nuestro componente.

Introduce el siguiente código en el punto de entrada de tu componente:

defined( '_JEXEC' ) or die( 'Restricted access' ); 
require_once( JPATH_COMPONENT.DS.'controller.php' );
 
if($controller = JRequest::getWord('controller')) {
    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    if (file_exists($path)) {
        require_once $path;
    } else {
        $controller = '';
    }
}
 
$classname    = 'pruebaController'.$controller;
$controller   = new $classname( );
 
$controller->execute( JRequest::getVar( 'task' ) );
 
$controller->redirect();

Vamos a comentar el siguiente codigo paso a paso:

La primera línea comprueba si esta definida la variable “_JEXEC”, y si no esta definida se muestra un mensaje de error por pantalla mediante la función “die”. Esto es una medida de seguridad que incluye el marco de trabajo Joomla! y que es recomendable usar en todos nuestros archivos .php que tengamos en el sitio, y que evitara que la gente acceda a las paginas directamente sin hacer antes las comprobaciones de seguridad que lleva incluida Joomla!

Seguidamente se importa el fichero controller.php donde crearemos nuestra clase que contendrá el controlador.

JPATH_COMPONENT y DS son constantes que define el marco de trabajo de Joomla! y que contienen el path al componente en el sistema y el separador de directorios adecuado para el sistema que se este utilizando, “\” para Windows y “/” para sistemas Unix. Utilizar estas constantes nos facilitara el trabajo más adelante y hará nuestras aplicaciones portables e independientes de la plataforma donde se estén utilizando.

Después de importar el controlador, se comprueba si existe el parámetro “controller” en la query string, y si existe establece la variable path a JPATH_COMPONENT/controllers/$controller.php, para luego hacer un require_once de path, e importar el controlador que se especifica en la petición y que se sitúa en la carpeta controllers .

Nosotros no hemos creado la carpeta controllers, por que de momento solo crearemos un controlador, pero también se pueden crear varios controladores y se instanciará uno u otro según el parámetro controller que se establezca en la query string.

Después de importar el fichero correspondiente a nuestro controlador, lo instanciamos y ejecutamos el método execute del controlador, y le pasamos como parámetro un string que contiene el valor del parámetro task que hayamos establecido en la query string.

Después de esto se ejecuta el metodo redirect() del controlador, que redigirá el flujo del programa a la vista adecuada.

Parece complicado, pero no lo es tanto simplemente recuerda:

  • Se comprueba si viene un parámetro en la query string que establezca un controlador, y si viene se importa el fichero con el controlador.
  • Se instancia el controlador.
  • Se ejecuta el método execute del controlador.
  • Se ejecuta el método redirect del controlador.

Después de esto, lógicamente, tendremos que incluir el código del controlador que acabamos de instanciar.

Vamos al fichero controller.php y copiamos el siguiente codigo:

defined( '_JEXEC' ) or die( 'Restricted access' );
jimport('joomla.application.component.controller');
 
class pruebaController extends JController
{	
	function display()
	{	
		parent::display();
	}
}

Esta vez lo único que hemos hecho es crear la clase que hará la función de controlador, y es obligatorio que herede de JController.Hemos sobrescrito el metodo display, pero lo único que hacemos es ejecutar el metodo display de la clase padre, es decir, que básicamente no hacemos nada.

En un componente más complejo, antes de ejecutar parent::display(); incluiríamos lógica de negocio en la aplicación, con acceso a datos , etc..

El controlador da paso a la vista correspondiente, que en este caso es la que se llame prueba.

Se le puede especificar la vista que se quiere ver pasándole a la petición un parámetro en la query string , es decir, si en vez de ver la vista por defecto quieres que el controlador redirija a una vista con nombre “noticias”, haremos una petición como la siguiente : index.php?option=com_prueba&view=noticias.

Lo mismo se puede hacer con el parámetro controller, pero en ese caso lo que haría sería instanciar el controlador con el nombre especificado en lugar de el controlador por defecto que se instancia.

Después de crear nuestro controlador, vamos a crear nuestra vista.

Vamos al fichero view.html.php en el directorio views/prueba y copiamos el siguiente código:

    defined( '_JEXEC') or die( 'Restricted access');
    jimport( 'joomla.application.component.view');
 
    class pruebaViewprueba extends JView
    {
	    function display($tpl = null)
	    {
		$model =& $this->getModel();
		$mensaje = $model->getMensaje();
		$this->assignRef('mensaje',$mensaje);
 
		parent::display($tpl);
	    }
 
    }

Observa la definición de la clase. Como puedes observar tiene un nombre un poco peculiar, este nombre no se lo he puesto así por que he querido, sino que he seguido una norma que establece el marco de trabajo Joomla!, y que consiste en poner primero el nombre del componente que lo llama, seguido de view y seguido del nombre de la vista:

NombreComponenteViewNombreVista

Esta norma es la que se sigue también para el modelo.

Lo que vamos a hacer en este caso es sobrescribir el método display y utilizar assignRef para crear referencias que utilizará el “layout”.

La primera línea del método display obtiene el modelo, Joomla busca un modelo con nombre PruebaModelPrueba debido a que no se le pasa ningún parámetro a la función getModel() y lo instancia. Si le hubiéramos pasado el nombre de algún modelo como parámetro, nos hubiera devuelto el modelo especificado.

Una vez tenemos el modelo ejecutamos el método getMensaje de este, que devuelve un string. El string se le pasa al layout por referencia mediante assignRef.

Finalmente se ejecuta el método display de la clase padre, al cual se le puede pasar como parámetro el nombre del layout que se quiere visualizar, en nuestro caso no le pasaremos ninguno y visualizará el layout con nombre default.php .

Crea el fichero views/prueba/tmpl/default.php . Este será el layout que se visualizara por defecto en nuestra vista. Añade el siguiente código:

<h1> <?php  echo $this->mensaje ?> </h1>

Observa que recogemos lareferencia que hemos asignado antes mediante asignRef() simplemente como si fuera una variable local del script php. Yo he puesto este código muy simple, pero tu puedes poner todo el código html que se te ocurra.

Solo nos queda preparar el modelo e implementar el método getMensaje() que hemos usado antes en la vista,

Ves a la carpeta modelsy en el fichero prueba.php escribe el siguiente codigo :

 
defined('_JEXEC') or die("Invalid access");
jimport('joomla.application.component.model');
 
class pruebaModelprueba extends JModel
{
 
	function getMensaje(){
		return "Hola, soy un valor devuelto por el modelo";
	}
}

El código habla por si solo, ten en cuenta que yo he devuelto una cadena de texto por simplicidad, pero en una aplicación más compleja nos se devolvería una cadena obtenida de una base de datos o un resultSet, p.e.

Ya está finalizada la creación del componente. Para llamarlo tendremos que pasarle en la url como argumento el nombre del componente, y Joomla lo mostrará por pantalla. Como es lógico, Joomla sólo podrá mostrar un componente simultáneamente por pantalla.

Así quedaría la estructura de directorios para la parte de front-end de los componentes de Joomla!:

­

En el caso del componente que acabo de diseñar, después de introducir en el navegador la dirección http://localhost/sit­ioJoomla/index.php?option=com_prueba , ­ debería mostrar, si todo ha ido bien : “Hola soy un valor que ha devuelto el modelo”.

He explicado cómo hacer la parte de front-end de un componente de Joomla! La parte de back-end se desarrolla de una forma similar, pero bajo la carpeta administrator/components del sistema de directorios de Joomla!, más adelante lo explicaré, así como los metodos mas importantes de acceso a datos que trae el API de Joomla!, que nos ahorrarán mucho tiempo y nos permitrán crear componentes mas seguros.


Descargarse los ficheros del componente

Saludos.

Compartir:
  • del.icio.us
  • BarraPunto
  • Bitacoras.com
  • Facebook
  • Google Bookmarks
  • Meneame
  • Netvibes
  • Technorati
  • FriendFeed
  • Twitter
  • HelloTxt


Comentarios

  1. 7
    Miguel Angel
    26 de Marzo del 2008 a las 8:24 am

    Hola,

    Tengo un problema al implementar el tutorial… directamente no aparece nada en la página :(.

    Creo que el problema inicial está en el fichero de entrada “prueba.php”. Más en concreto en la primera linea:

    <?php defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );

    Comento todo el código y no da fallo (se carga todo excepto el componente). Pero si dejo sólo esa linea no aparece nada. Tipico cuando hay un error en php.

    No he instalado el componente. Sólo he hecho el front-end y utilizado directamente la url que indicas.

    Alguna idea??

    Un saludo,

  2. 8
    David
    26 de Marzo del 2008 a las 2:26 pm

    Hola Miguel Angel, a veces el embellecedor de código del blog, el geshi, juega malas pasadas y cambia algún carácter que puede hacer que la sintaxis sea erronea.
    Si escribes el error que da quizás pueda decirte que le pasa…

    Por ejemplo, en el punto de entrada, en la linea 15, si copias y pegas dará error , ya que lo que he pretendido poner es una cadena vacía, pero si copias y pegas pondrá unas comillas dobles…

    Un saludo

  3. 9
    Miguel Angel
    26 de Marzo del 2008 a las 3:17 pm

    El problema eran las comillas simples :(

    El copiar/pegar tiene esas cosas

  4. 10
    David
    26 de Marzo del 2008 a las 3:32 pm

    Me alegro que te haya funcionado… La verdad es que se hace muy complicado escribir código con el editor de wysiwyg, ojala se mejore esto en los CMS en un futuro…

  5. 11
    Mauricio Moo Aguilar
    28 de Abril del 2008 a las 2:28 pm

    Saludos David:
    Primeramente felicitaciones por los excelentes tutoriales que has subido a internet. Son muy claro y demasiados útiles, muchas gracias por tomarte el tiempo de ayudar a mas gente.
    Tengo una duda que confío en que me puedas ayudar a resolver. ¿Un componente que se construya en Joomla puede mostrarse directamente en la página de inicio?, como por ejemplo en el caso de las encuestas, que pueden aparecer en la posición que yo desee.Mi deseo es construir un componente que aparezca en la posición de mi página principal que yo desee.
    Gracias por tu atencion y de nueva cuenta felicitaciones

  6. 12
    David
    29 de Abril del 2008 a las 2:55 am

    Hola, pues lo que aparece en la pagina prioncipal es el componente com_frontpage, nunca me lo he planteado lo que dices, pero yo lo que haria seria una redireccion en el htaccess para que la página fuera directamente al componente cuando la gente pone la URL de la web en su navegador y conseguir un efecto parecido.

    Si no te sirve, puedes probar a cargarte el componente com_fronpage y crearte uno propio con el mismo nombre a ver que pasa…

    Comentalo si te funciona!!!

    Un saludo.

  7. 13
    Mauricio Moo Aguilar
    5 de Mayo del 2008 a las 1:56 pm

    Hola otra vez David:
    Gracias por tu propuesta. Desistí un poco de mi idea para concentrarme en enriquecer un poco los componente construidos. Por ahora, se solucio mi problema con un modulo y un iframe….jeje… pero ahora… abusando de tu confianza me enfrento a otro detalle.

    He construido un componente para el Front-End, sin embargo, como lo mencionas en este tutorial, mi código html se encuentra dentro de views/prueba/tmpl/default.php pero no se muestra correctamente. Mi codigo contiene imagenes y estilos css, en breve descripcion, una tabla con imagenes de fondo. El resultado es que solo me muestra el texto, pero no las imagenes de fondo.

    Ojala puedas ayudarme, yo sigo buscando y estudiando a joomla para ver si encuentro algo.

    Gracias de nueva cuenta por tu atencion

  8. 14
    Mauricio Moo Aguilar
    5 de Mayo del 2008 a las 2:25 pm

    Hola otra vez…jajaja

    Pues resolvi mi problema… a los 5 minutos de postear. Como las imagenes las tengo dentro de una carpeta, esta estaba tanto en la carpeta tmpl, pero tambien debe de estar en la carpeta principal del sitio. De esta manera, los estilos, imagenes, etc., se mostraron correctamente en mi componente. Describiendo, el componente tiene colores y estilos diferentes a la plantilla del joomla que uso.

    Gracias por tu atencion y el espacio para compartir esto.Saludos

  9. 15
    David
    6 de Mayo del 2008 a las 1:29 am

    Hola Mauricio, de nada!

    Pues eso te iba a decir, que el error se debia seguramente a que habias puesto la ruta de las imgenes mal.

    Usa JURI::base() o las variables JPATH_COMPONENT y JPATH_BASE para evitar estos errores.

    Un saludo!

  10. 16
    Luis
    23 de Mayo del 2008 a las 6:41 am

    Algo que no me gusta de joomla es este problema que tuvo Mauricio. Yo quisiera poder editar el html en Dreamweaver y ver como está quedando, pero al estar trabajando en joomla no se ven los estilos porque están ubicados en otras carpetas o referenciados para que joomla los encuentre.
    Hay alguna solución a esto?
    Saludos y muy muy bueno el tutorial!!

  11. 17
    julian
    20 de Junio del 2008 a las 9:00 am

    El error inicial ke me aparece es el mensaje de “Restricted access ” de la primera linea del fichero me gustaria saber donde se define la variable _EXEC ???? o por que no me deja acceder a la funcionalidad del componente

  12. 18
    Ricardo
    24 de Junio del 2008 a las 10:20 am

    Buenos dias primeramente felicidades es un tutorial simple y conciso, segui los pasos y lei al principio de los post que marcaba un error por copiar y pegar ya cambie las comillas y me sigue dando el mismo error alguien me puede guiar en que pueda ser gracias, el error es el siguiente
    Parse error: parse error, unexpected T_STRING in C:\Program Files\xampp\htdocs\Joomla153\components\com_prueba\controller.php on line 2

  13. 19
    Ricardo
    24 de Junio del 2008 a las 11:04 am

    Mil disculpas ya l oresolvi cambiando las comillas de todos los archivos gracias

  14. 20
    Ricardo
    24 de Junio del 2008 a las 11:17 am

    Ya resolvi el error gracias.

  15. 21
    David
    24 de Junio del 2008 a las 4:44 pm

    Es normal que te de ese error, ya que joomla comprueba si la variable _JEXEC esta definida, y como tu has puesto _EXEC en lugar de _JEXEC, pues joomla no es capaz de encontrarla y lanza el mensaje de error, un saludo!

  16. 22
    dontysk
    1 de Julio del 2008 a las 8:03 am

    Finalmente se ejecuta el método display de la clase padre, al cual se le puede pasar como parámetro el nombre del layout que se quiere visualizar, en nuestro caso no le pasaremos ninguno y visualizará el layout con nombre default.php .

    Intento hacer eso , es decir pasarle otro layout para que se visualice y no lo consigo. En concreto hago esto
    parent::display(‘veragenda.php’);
    ¿Que hago mal?.
    Un saludo

  17. 23
    Maykel
    1 de Julio del 2008 a las 11:54 am

    Me hace falta la estructura de los componentes, el link esta mal, esta apuntando a los pluggin en vez de a los componentes

  18. 24
    Micki
    9 de Julio del 2008 a las 9:53 pm

    Simplemente genial. De verdad, muchas gracias por tus tutoriales.

    ¡¡¡Me has abierto un mundo dentro del nuevo Joomla!!!

  19. 25
    Brody
    28 de Julio del 2008 a las 10:46 am

    Puto cambio de comillas, lo agarran uno dormido la neta,
    un dia perdido..

  20. 26
    Osmar
    20 de Agosto del 2008 a las 7:52 pm

    hola a todos disculpen por mi ignorancia soy nuevo en esto me sale el siguiente error:

    Parse error: syntax error, unexpected T_STRING in C:\wamp\www\prueba\components\com_prueba\prueba.php on line 3

    En los post lei que decia que cambie de comilla: a cual comillas te refieres a ” ” o a ´´ “

  21. 27
    Osmar
    20 de Agosto del 2008 a las 7:54 pm

    O talvez la version que tenga no es compatible tengo la version Joomla 1.5.4

    Se lo agradeceria mucho que me repondiera

  22. 28
    xayide
    16 de Septiembre del 2008 a las 11:31 pm

    Hola!
    Es la primera toma de contacto que tengo con Joomla, por lo que estoy un poco verde. He seguido el ejemplo explicado en esta página. He corregido el problema de las comillas al copiar y pegar. Pero al instalar el componente me dice “Tipo de archivo desconocido” y después me da un warnign :

    “Warning: file_put_contents(C:\wamp\www\Joomla_1.5.6-Spanish-pack_completo\tmp\index.php?option=com_prueba) [function.file-put-contents]: failed to open stream: No error in C:\wamp\www\Joomla_1.5.6-Spanish-pack_completo\libraries\joomla\filesystem\file.php on line 298″, Imposible encontrar el paquete de instalación.

    Alguien sabe qué pasa? Qué es lo que estoy haciendo mal?

    muchas gracias

  23. 29
    lupanvi
    13 de Octubre del 2008 a las 10:04 am

    Hola, tengo una duda, yo lo unico que quiero hacer es en una caja de texto escribir un texto y ese texto mostrarlo al momento de darle click al boton enviar, en que momento recibo ese parametro de la caja de texto?, no se si es en el controlador o en el modelo.

  24. 30
    Ulises
    15 de Octubre del 2008 a las 3:22 pm

    Gracias por el tutorial que has realizado, la verdad está muy bien explicado.
    Estuve leyendo los otros comentarios y se preguntaba “Tengo una duda que confío en que me puedas ayudar a resolver. ¿Un componente que se construya en Joomla puede mostrarse directamente en la página de inicio?, como por ejemplo en el caso de las encuestas, que pueden aparecer en la posición que yo desee.Mi deseo es construir un componente que aparezca en la posición de mi página principal que yo desee.

    Para poder poner un componente en la página principal basta con crear el enlace desde el mainmenu y luego seleccionarlo y hacer click en el botón predeterminado, una vez realizado esto, la página principal apuntará al componente que hayas linkeado.

  25. 31
    Jorge
    4 de Diciembre del 2008 a las 3:12 am

    Hola, he realizado el ejemplo y al ejecutarlo me sale el mensaje, pero dejajo no sale nada mas, y encima del mensaje me sale la palabra ‘Home’.

    ¿Alguna idea por que me puede estar pasando esto?

    Gracias por el artículo me está ayudando a ir centrandome mas en este mundo de Joomla.

  26. 32
    amontiel
    18 de Enero del 2009 a las 10:35 am

    Hola para ver si me pueden ayudar con este error que me da.

    Fatal error: Call to undefined method JRequest::getword() in C:\Program Files\wamp\www\adan\components\com_prueba\prueba.php on line 7

  27. 33
    carlos
    4 de Febrero del 2009 a las 5:10 am

    buenos dias a todos, ya logre generar mi componenten y lo estoy usuando muy bien

    pero tengo una duda, lo que sucede es que tengo varias vista, modelos y controladores, en mi componente, el problema que es la unica forma que en encontra de direccionar de una vista a otra es usar
    JRequest::setVar( ‘view’, ‘hello’ );
    JRequest::setVar( ‘layout’, ‘form’ );
    JRequest::setVar(‘hidemainmenu’, 1);

    parent::display();
    pero me parece que el direccionamiento debe hacerce asi
    $link = ‘index.php?option=com_hello’;
    $this->setRedirect($link, $msg);

    me pueden colaborar no se como solucionar ese problema y necesito que cuando termine el proceso en una vista el direcciona a la siguiente vista o a la vista anterior

  28. 34
    list
    10 de Febrero del 2009 a las 12:07 pm

    Hola, este tutorial está genial, sin embargo, tengo un problemilla que no se resolver, usar una nueva vista.

    En prueba.php he incluido un
    switch (JRequest::getVar( ‘task’ ))
    {
    case ‘1′:
    $controller->nuevafuncion();
    break;
    default:
    $controller->display();
    break;
    }

    En función del valor de esa variable realizo una llamada al controlador: en mi caso nuevafuncion().

    Esta función la defino en el controlador y aquí realizo una llamada a otra función definida en view.html.php. Pero parece que está función no está visible.

    ¿alguien sabe que me puede estar pasando?

    Gracias

  29. 35
    Isabel
    18 de Febrero del 2009 a las 11:18 am

    Buenas Tardes,

    Ante todo muchas gracias por este tutorial , es muy concreto y fácil de seguir. Aun así al ejecutar el ejemplo que propones me ha surgido un problema , al invocar el componente me resulta este error: Vista no encontrada [nombre, el tipo, el prefijo]: prueba,html,pruebaView.

    Soy novata en esto de Joomla y la verdad le he dao mil vueltas al tema de la vista y no consigo ver nada raro. ¿ Alguna idea ?

    Ante todo gracias.

  30. 36
    David
    18 de Febrero del 2009 a las 1:18 pm

    Hola Isabel, pues el problema es que el el plugin que decora el código fuente codifica mal los caracteres, tengo pensado volver ha hacer el tutorial y poner el código en txt para descargar, en cuanto tenga un poco de tiempo libre lo subo. Saludos!!!

  31. 38
    gemu
    4 de Abril del 2009 a las 7:41 am

    Hola, me parece bien explicado como crear el componente, pero lo que no entiendo es para que dificultan tanto las cosas, para un “hola mundo” hacen falta tantas clases y tantos archivos? no entiendo la real ventaja de este diseño, podrias explicar un poco la utilidad final que tiene tanta estructura?

  32. 39
    David
    4 de Abril del 2009 a las 2:08 pm

    Hola gemu, pues es verdad, para hacer un hola mundo es muy pesado, pero tal como se va alargando el componente favorece la claridad del código por que está todo ordenado siguiendo la estructura, y se hace más fácil de seguir. Y si encima se programa entre varias personas, donde cada uno tiene sus manias a la hora de crear los ficheros etc… pues es completamente necesario.

    Saludos!

  33. 40
    yuli
    8 de Abril del 2009 a las 8:56 am

    holaa espero que esten bien mi problema es que me sale un error al instalar el componente. Dice que no existe el fichero views.html.php y yo lo cree sequi el tutorial. soy nueva gracias

  34. 41
    Nicola
    14 de Abril del 2009 a las 9:40 am

    Hola David, gracias por este tutorial..yo soy bastante nuevo en joomla y gracias a blog como el tuyo se pueden aprender muchas cosas..
    tengo un problema cuando llamo index.php?option=com_prueba me sale que no encuentra el componente..error 404..
    mi joomla se encuentra en http://localhost/joomla/ y veo que tu has puesto http://localhost/sitiojoomla/ puede que sea este el problema? como se definiría JPATH en mi caso?
    veo que nadie tiene mi problema..uso linux ubuntu será por eso? he probado a cambiar las comillas pero como tienen que ser dobles “” o singulas?

  35. 42
    Ricardo Andres
    23 de Abril del 2009 a las 10:58 am

    Hola

    Lo primero es destacar que el tutuorial esta exelente

    Mi proble es que no he podido acceder a la funcionalidad del componente ya que me sale este error “Restricted access” que al parecer hace referencia a que la variable “_JEXEC” no esta definida mi pregunta es ¿ como hago para definir esta variable?

  36. 43
    Gustavo
    24 de Abril del 2009 a las 8:35 am

    Felcitaciones por el Tutorial.

    Tengo el mismo problema que Ricardo Andres, cuando carga el componente me da el error “Restricted access”, debido a la falta de definicion de la variable _JEXEC. Como resuelvo esto? Gracias.

  37. 44
    David
    24 de Abril del 2009 a las 10:53 am

    Estas accediendo a la vista correctamente mediante la url “index.php?option=com_nombredelComponente&view=nombreVista” ??, ese mensaje sale cuando intentas acceder al fichero directamente, es decir, cuando pones en el navegador directamente la URLdel fichero, en este caso, seguramente visitros estareis poniendo como URL lo siguiente, o algo similar:
    components/com_componente/views/nombreVista/tmpl/default.php …..

    En este caso, Joomla , por seguridad, saca el mensaje de Restricted acces….

    Saludos!

  38. 45
    ExeNet
    1 de Mayo del 2009 a las 1:53 pm

    De la calidad de este articulo ni hablar, lo mejor que he visto en internet.
    Tengo un problema, hago mi componente en mi localhost, al terminarlo y comporbar que funciona correctamente genero el XML y trato de montarlo en mi sitio que tiene Hosting en internet y le hago un vinculo en el menu principal, pero que sucede, cuando tratato de acceder desde internet, o sea sin usar localhost me sale el error 500 – Vista no encontrada, cuando realmente esta ahi la vista, la url esta escrita: index.php?option=com_prueba&view=introduceNuevo
    Alguna idea…

  39. 46
    David
    1 de Mayo del 2009 a las 5:13 pm

    Pues la verdad es que no se que puede pasar, supongo que será un hosting compartido y por algún motivo no tienes permisos sobre el fichero view.html.php… puedes cambiar los permisos del fichero en tu hosting???
    Comprueba que existe el fichero view.html.php.
    No dió error en la instalación??

    Espero que se te solucione pronto…Saludos!!

  40. 47
    ExeNet
    1 de Mayo del 2009 a las 8:19 pm

    La verdad que no dio ni un error, dime a que correo puedo escribirte?

  41. 48
    David
    2 de Mayo del 2009 a las 12:28 pm

    En la página de “sobre mí” pone mi correo electronico…

  42. 49
    Diego
    4 de Mayo del 2009 a las 3:59 pm

    Hola, recien estoy dando mis primeros pasos en esto de los componentes para el joomla, pero despues de probar y probar (y que no funcione) descubro que hay un error en el codigo de la clase del controlador: especificamente, la clase se tendría que llamar pruebaController y no pruebaControllerprueba. Con solo ese cambio funciona perfectamente… Aunque no entiendo como puede ser que a todos los que lo probaron les funcione (quizas sea la versión del joomla que estoy usando, es la 1.5.10) Desde ya muchisimas gracias David por tu gran aporte!

  43. 50
    David
    4 de Mayo del 2009 a las 4:44 pm

    Hola Diego, es cierto,a los demás si que les funcionará por que lo acabo de cambiar hace un momento, ya que el editor WYSIWYG había cortado partes del código, y al arreglarlo lo había puesto mal, muchas gracias, si no llegas a poner el comentario no me habría dado cuenta.

    Ya lo he corregido.

    Saludos!

  44. 51
    JULIO
    10 de Mayo del 2009 a las 12:40 pm

    Buenas Disculpen tengo un problema soy Nuevo en esto pero toy tratando de subir Un Theme a un joomla k instale el joomla 1.5.10 pero no sube me sale que tengo k logearme de nuevo osea nada de nada sale que el theme ya fue cargado y ps toy con eso k no entiendo mucho y ps kisiera saber si hay alguna forma de que se me pueda resolver mi problema por favor si hay dejo mi msn :

    w w w . f u l l j o d a . t k @ h o t m a i l . c o m

    Gracias

  45. 52
    kraxbox
    21 de Mayo del 2009 a las 8:56 am

    Hola que tal primero que nada quiero felicitarte por este buen tuto ya que ha sido mi impulso en la programacion joomla, quisiera preguntarte u orientarme de como se lleva a cabo la paginacion del lado del front-end, con la del bakc-end no tengo ningun problema pero en front-end si me pagina y numero de resultados con select 5,10,20,etc, quiero filtrar una tabla desc y asc y no es posible llevar a cabo esto no funciona filter_older y filter_order_Dir, este siempre es desc y claro si filtra desc la primera vez pero asc nunca lo hace, quisiera saber del como se cambian los valores para asc y desc y cuando no haya algun filtrado gracias espero me puedas ayudar te lo agradeceria!!!

  46. 53
    María
    28 de Mayo del 2009 a las 7:28 am

    Hola,
    He seguido todos los pasos para crear el front-end y al escribir la URL me aparece esto donde debería aparecer “hola soy un valor que ha devuelto el modelo”:

    defined( ‘_JEXEC’ ) or die( ‘Restricted access’ ); require_once( JPATH_COMPONENT.DS.’controller.php’ ); if($controller = JRequest::getWord(‘controller’)) { $path = JPATH_COMPONENT.DS.’controllers’.DS.$controller.’.php’; if (file_exists($path)) { require_once $path; } else { $controller = ”; } } $classname = ‘pruebaController’.$controller; $controller = new $classname( ); $controller->execute( JRequest::getVar( ‘task’ ) ); $controller->redirect();

    Alguien puede ayudarme???????

  47. 54
    María
    28 de Mayo del 2009 a las 8:32 am

    Hola otra vez,

    He cambiado las comillas del punto de entrada por comillas dobles “, y ahora me da el siguiente error:

    500 – Vista no encontrada [nombre, el tipo, el prefijo]: prueba,html,pruebaView

  48. 55
    mariana
    10 de Junio del 2009 a las 2:37 pm

    maria recuerda que es codigo php y tiene que iniciar con <?php espero te sirva

  49. 58
    oscar
    14 de Julio del 2009 a las 11:26 am

    excelente tutorial , lo hice y me sirvio!!!!!!!!

  50. 59
    David
    14 de Julio del 2009 a las 11:59 am

    Muchas gracias!! Me alegro mucho!!!

  51. 60
    sam
    16 de Julio del 2009 a las 8:45 pm

    segui el tutorial pero me sale erro 404 componente no encontrado qu me sugieren que haga soy novato en esto gracias.

  52. 64
    Stiwart
    19 de Agosto del 2009 a las 8:41 am

    Hola, excelente tus tutoriales, pero tengo una duda que me ha surgido con respecto a la comunida, me gustaria saber si alguien me puede ayudar.
    Tengo un problema con el toolbar de la comunidad.Me explico,cuando inicio sesion en la comunidad y si hago clic en la barra de Mensajes o Cursos y luego cierro sesio todo va bien. El problema se presenta cuando ingreso de nuevo a la comunidad y trato de iniciar sesion me da un mensaje de error “500 CC VIEW NOT FOUND”.Le doy clic a ir a la pagina principal y veo que si me autentique.
    No se porque aparece ese mensaje.
    Por favor necesito de su ayuda.
    la pagina es http://www.centroformativointernacional.com

    gracias

    Gracias.

  53. 65
    Gustavo
    23 de Agosto del 2009 a las 8:16 am

    Excelente amigo muchas gracias por tu tiempo y tu explicación esto sirve un montón. No te preocupes por los quejumbrosos tu trabajo es muy bueno

  54. 66
    David
    24 de Agosto del 2009 a las 12:31 am

    Muchas gracias gustavo…

  55. 67
    Luis
    25 de Agosto del 2009 a las 6:21 pm

    Hola, espero alguien me pueda ayudar.

    Tenemos componentes ya creados que se pueden acceder independiente si el usuario inicio sesión en joomla. Como se restringe el acceso al componente para solo aquellos usuarios que hayan iniciado sesión.

    agradeceria cualquier ayuda….

  56. 68
    Farith Vilaseca
    27 de Agosto del 2009 a las 10:44 am

    Muy buen tutoril, me finciona a la perfeccion….
    Felicidades!!

    Saludos.

  57. 69
    Antonio Peña Lamorú
    1 de Septiembre del 2009 a las 8:20 am

    Hola!

    La verdad es que no tengo palabras para agradecer el buen tutorial que ha preparado, felicidades!, me ha servido de mucho. Muchas gracias!!

    Si lo pudiera ayudar en algo para mi seria un inmenso placer.

    Saludos Tony.

  58. 70
    David
    1 de Septiembre del 2009 a las 9:15 am

    Muchas gracias Tony, con el agradecimiento ya me has ayudado dandome ánimos para seguir adelante.

    Un saludo!!

  59. 74
    alalca
    8 de Septiembre del 2009 a las 1:13 pm

    Perfecto!!! funcionó a la primera y me sirvio para desarrollar mi componente. Saludos

  60. 75
    smallsof
    14 de Septiembre del 2009 a las 10:39 pm

    hola es un muy buen tutorial pero creo que faltan ejemplos mas avanzados en cuastion de bases de datos como un segumneton completo desde inserta datos,editar,y eliminar datos para tener una base completa para los que somos nuevos trabajando con joomla y el mvc

  61. 76
    ocbatusai
    16 de Septiembre del 2009 a las 5:29 pm

    La verdad es que el tutorial me viene perfecto, muchas gracias por el esfuerzo :D

    La cosa es que no me funciona este ejemplo, cuando meto la URL me sale joomla arriba, menu principal a la izquierda, y a la derecha un copiar y pegar del prueba.php del directorio com_prueba (creo que le llamais entrada ), sabeis por qué podría ser??

    gracias de antemano

  62. 77
    ocbatusai
    16 de Septiembre del 2009 a las 5:49 pm

    nada, que no puse lo de <?php al inicio, y ?< al final xD

  63. 79
    Luis
    14 de Octubre del 2009 a las 10:03 pm

    Hola, que saben sobre el desarrollo de joomla por medio del Framework para Joomla ??

    Saludos

  64. 80
    Javier
    24 de Noviembre del 2009 a las 9:03 pm

    Brillante!!! Clarisimo!!

  65. 81
    Maxi
    5 de Enero del 2010 a las 6:28 am

    Hola. Muy bueno el tutorial. Entendi bastantes cosas. Parece ser que eres un experto en esto de Joomla. Quisiera aprovechar la oportunidad para preguntarte si es posible modificar algun modulo existente para hacer que se muestre en otro lugar de la pantalla. Mi idea seria mover el formulario de registro de usuario para que en lugar de cargarse en el main content se cargue en otro lugar, por ejemplo en algun modulo que cree.. Estoy buscando por muchos foros pero no tengo respuestas.. Necesitaria por favor que me ayudaras. Muchas gracias.

  66. 82
    David
    5 de Enero del 2010 a las 1:13 pm

    Hola Maxi, el formulario de registro es un componente, y como tal se muestra en el main content, si lo quieres mostrar en otro lugar de la pantalla deberas de usar templates diferentes para ese item de menu o hacer alguna chapucilla con javascrip, es lo primero que se me ocurre.

    Un saludo!

Trackbacks

  1. Tutorial: Componente para Joomla 1.5 IV | nosoloCodigo
  2. Programación de componentes bajo Joomla! 1.5. | nosoloCodigo
  3. Tutorial: Módulos para Joomla! 1.5 | nosoloCodigo
  4. Crear el XML del componente de Joomla y generar instalable | nosoloCodigo
  5. Tutorial: Componentes para Joomla! 1.5 II | nosoloCodigo
  6. Subir ficheros al servidor con el API de Joomla! | nosoloCodigo
  7. Utilizar el calendario que incorpora el API de Joomla | nosoloCodigo
  8. Componentes para Joomla! 1.5 I | nosoloCodigo
  9. ¿Qué es Joomla? | Nosolocodigo | Desarrollo web con Joomla, Wordpress y demás herramientas de software libre
  10. 5 razones por las cuales deberías usar Joomla en lugar de Wordpress | Nosolocodigo | Desarrollo web con Joomla, Wordpress y demás herramientas de software libre
  11. ¿Como instalo extensión Joomla que no esté en zip? « en vida y tecnología …misterioaqo…
  12. » Cómo proteger nuestros desarrollos en Joomla de ataques XSS
  13. 5 razones por las que deberías usar WordPress en lugar de Joomla | Ayuda WordPress
  14. Comparando lo incomparable: Joomla vs Wordpress round 2 | Nosolocodigo
  15. » 5 razones por las cuales deberías usar Joomla en lugar de Wordpress
  16. Popups elegantes en Joomla usando Mootools | Nosolocodigo