El tutorial anterior fue una introducción a la creación de componentes en Joomla 1.5, pero aun faltan muchas cosas.

Faltan cosas como el acceso a datos mediante el framework de Joomla, los tasks y más cosas que se me escapan he iré completando más adelante.

Para la parte de back-end, el sistema es el mismo, lo único que deberemos de ubicar el componente en la carpeta administrator/components . El acceso al componente es por la URL …tuSitio/administrator/index.php?option=com_prueba .

El api de Joomla! nos provee de unos objetos específicos para operar con bases de datos.

Siempre que se pueda es recomendable usar estos objetos, en lugar de conectar directamente con las funciones de mysql que tiene php, ya que el API de Joomla! hace mucho trabajo por debajo, como protección contra inyección Sql, optimización, etc…

En ocasiones , necesitaremos un acceso a datos mas profundo, y no nos podremos conformar con lo que nos ofrece el api de Joomla!, en estos casos no queda mas remedio que utilizar el acceso a datos de toda la vida.

En este tutorial el componente se va llamar prueba. Por lo tanto accederemos a el mediante la URL …/administrator/index?option=com_prueba.

Nuestro componente es muy simple: muestra una lista con los mensajes existentes y un formulario de introducción de datos en el que se presenta un campo de texto y un botón para enviar el formulario. Al enviarse el formulario se introduce en una tabla de la base de datos que hemos creado previamente el mensaje y nos lleva a la misma pagina que muestra todos los mensajes insertados y te da la opción de seguir insertando mensajes.

Vamos a crear la base de datos, esta es la sentencia SQL que yo he usado:­

  1. CREATE TABLE `jos_prueba` (
  2. `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY ,
  3. `mensaje` VARCHAR( 30 ) NOT NULL DEFAULT ‘mensaje’
  4. ) ENGINE = innodb;
  5.  

Como puedes observar son dos campos; una tabla muy simple. Vamos a crear la estructura principal de nuestro componente como en el tutorial anterior, si tienes dudas, pégale un vistazo . La estructura principal del componente es esta:

Vista por defecto del admin

A continuación puedes observar el diagrama del componente que vamos a crear:

esquema de la apliación

La vista Prueba Admin es la que se muestra por defecto en nuestro componente, en ella se hará un listado de todos los mensajes creados en la base de datos, y al fina pondré un enlace que redirija a la vista IntroduceNuevo.

En la vista IntroduceNuevo, se presenta un formulario con una caja de texto y un botón de submit. Este boton de submit redirige al task IntroduceMensaje, donde introduciremos el mensaje en la base de datos y redirigiremos a la vista PruebaAdmin de nuevo para que se muestren todos los mensajes insertados y te da la opción de seguir insertando.

Lo primero que necesitamos es un modelo para nuestra vista PruebaAdmin, creamos la carpeta models, y dentro un archivo con nombre pruebaAdmin.php , dentro de este archivo crearemos la clase que contiene el modelo.

El modelo tiene que recuperar todos los datos de la base de datos y devolverlos para que la vista pueda mostrarlos.

Dentro de la carpeta models crea el fichero pruebaAdmin.php . De momento vamos a agregar el código necesario para recuperar los datos de la tabla. Este es el código que he usado:

  1.  
  2. <?php
  3. defined(‘_JEXEC’) or die();
  4. jimport( ‘joomla.application.component.model’ );
  5. class PruebaAdminModelPruebaAdmin extends JModel
  6. {
  7.     var $datos;
  8.     function getData()
  9.     {
  10.         if (empty( $this->datos ))
  11.         {
  12.             $query = ‘ SELECT * ‘
  13.             . ‘ FROM #__prueba ‘;
  14.  
  15.             $this->datos = $this->_getList( $query );
  16.         }
  17.  
  18.         return $this->datos;
  19.     }
  20.  
  21. }
  22. ­
  23.  

Como siempre la primera línea hace una comprobación para ver si se esta accediendo desde Joomla! o se esta haciendo un acceso directo, esta medida de seguridad debe de estar siempre presente.

La segunda línea se utiliza la función jimport del api de Joomla!, esta función importa la clase abstracta para el modelo.

Observa que la nomenclatura sigue la norma descrita:

Nombre de la Vista– Model – Nombre del modelo

Al tener este nombre , el controaldor PruebaAdminController podra acceder directamente a los métodos de este modelo.

La función getData() comprueba si la variable $datos esta vacia, y si lo esta, entonces almacena en ella los datos de la tabla jos_prueba en la variable.Para ello utiliza el metodo getList() . Este método es heredado por la clase padre y lo que hace es devolver una lista de objetos con los resultados de la consulta. Cada objeto de la lista tendrá tantas propiedades como campos tenga la tabla consultada.Por lo tanto en la variable $datos se almacena

una lista de objetos con los resultados de la consulta.

Lo siguiente es mostrar estos datos en la vista PruebaAdmin.

Introduce el siguiente código en el fichero views/pruebaAdmin/views.html.php

­

  1.  
  2. <?php
  3. defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );
  4. jimport( ‘joomla.application.component.view’);
  5. class PruebaAdminViewPruebaadmin extends JView
  6. {
  7.     function display($tpl = null)
  8.     {
  9.         $model =& $this->getModel();
  10.         $datos = $model->getData();
  11.         $this->assignRef( ‘mensajes’,   $datos );
  12.         parent::display($tpl);
  13.     }
  14. }
  15. ?>
  16.  

Las dos primeras líneas ya no necesitan explicación.

La nomenclatura de la Vista sigue el patrón descrito.

Se sobrescribe el método display() , lo primero es obtener el modelo, al seguir las nombras de nombrado no hace falta especificar el nombre del modelo en el método getModel().

Almacenamos en la variable $datos la lista de objetos que devuelve el método que hemos creado anteriormente en el modelo, y se la pasamos al layout mediante el método assignRef.

Código para el layout default.php de la vista :

  1.  
  2. <table class="adminlist">
  3. <thead>
  4. <tr>
  5. <th width="5">
  6.                 ID
  7.             </th>
  8. <th >
  9.                 Mensaje
  10.             </th>
  11. </tr>
  12. </thead>
  13.  
  14.     <?php
  15.     $n =count( $this->mensajes );
  16.     for ($i=0; $i < $n; $i++)
  17.     {
  18.         $row =& $this->mensajes[$i];
  19.         ?>
  20. <tr>
  21. <td>
  22.                 <?php echo $row->id; ?>
  23.             </td>
  24. <td>
  25.                 <?php echo $row->mensaje; ?>
  26.             </td>
  27. </tr>
  28.  
  29.         <?php
  30.  
  31.     }
  32.     ?>
  33. <tr>
  34. <td></td>
  35. <td><a href="<?php echo JURI::base();?> index.php?option=com_prueba&view=introduceNuevo"> Nuevo Mensaje </a>  </td>
  36. </tr>
  37. </table>
  38.  

Recorremos la lista de objetos “mensajes” y creamos un elemento “tr” por cada mensaje, observa que estamos accediendo a la propiedad id y mensaje de cada objeto de la lista, esto es por que como he explicado antes se crea tantas propiedades como campos tenga el resultado de la consulta.

Al final de la tabla, he agregado un enlace que redirige a la vista que crearemos luego y que permitirá introducir un nuevo mensaje. El método estático JURI::base() devuelve la url base del sitio, para realizar la petición correctamente.

Introduce algunos datos en tu tabla y comprueba que todo funciona correctamente.

Vamos a crear la vista introduceNuevo.

Crea el directorio introduceNuevo dentro de la carpeta views , crea el directorio tmpl y los archivos view.html.php y tmpl/default.php correspondientes .

Introduce el siguiente código en view.html.php:

  1.  
  2. <?php
  3. defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );
  4. jimport( ‘joomla.application.component.view’);
  5. class PruebaAdminViewIntroduceNuevo extends JView
  6. {
  7.     function display($tpl = null)
  8.     {
  9.         parent::display($tpl);
  10.     }
  11. }
  12. ?>
  13.  

No se realiza ningún acceso a datos , simplemente se ejecuta el método display() y se visualiza el layout por defecto (“tmpl/default.php”) .La nomenclatura de la vista ha de seguir el patrón que ya se ha explicado anteriormente :

Nombre componente – View – Nombre de la vista .

Ahora vamos a ver el código del layout :

  1.  
  2. <form action="index.php" method="post">
  3. </form>
  4. </tr>
  5. </tbody>
  6. </table>
  7. <table>
  8. <tbody>
  9. <tr>
  10. <td>ID</td>
  11. <td>Mensaje</td>
  12. </tr>
  13. <tr>
  14. <td>
  15. <input name="id" disabled="true" size="3" type="text" /></td>
  16. <td>
  17. <input name="mensaje" size="30" maxlength="30" type="text" /></td>
  18. </tr>
  19. <tr>
  20. <td>
  21.   </td>
  22. <td>
  23. <input value="Enviar" type="submit" /></td>
  24. </tr>
  25. </tbody>
  26. </table>
  27. <input name="option" value="com_prueba" type="hidden" />
  28. <input name="task" value="introduceMensaje" type="hidden" />

Como puedes observar, he creado un formulario que envía la información a index.php , y le he puesto una caja de texto para introducir el mensaje y otra para el id, la del id permanece bloqueada ya que se trata de un campo autoincremental y se ira incrementando automáticamente en la base de datos.

Esta información la tiene que procesar el task introduceMensaje . La forma de indicar que la información ha de ser procesada por este task es poniendo un input de tipo hidden con atributo name igual a task y un valor igual al nombre del task que deseamos que procese el formulario. En el otro input de tipo hidden se se indica el option para indicar a Joomla! que el task se encuentra dentro del componente com_prueba.

Los nombre de los campos input deben de coincidir con los nombres de los campos de la tabla en la que introduciremos los datos.

Vamos a crear el task introduceMensaje :

En la clase controlador PruebaAdminController que debes haber creado anteriormente introduce el siguiente método:

  1. function introduceMensaje(){
  2.  
  3.         $option = JRequest::getCmd(‘option’);
  4.         $modelo = $this->getModel(‘pruebaAdmin’);
  5.          $res = $modelo->introduce(JRequest::get(‘post’));
  6.          if($res == 1){
  7.             $this->setMessage(‘Mensage introducido!’);
  8.             $this->setRedirect(‘index.php?option=’ . $option. ‘&view=pruebaAdmin’);
  9.          }else{
  10.             $this->setMessage(‘Error al introducir!’);
  11.             $this->setRedirect(‘index.php?option=’ . $option. ‘&view=Error’);
  12.          }
  13.  

Al pulsar submit en el formulario anterior , los datos son enviados a index.php, el marco de trabajo Joomla! lee los parámetros de entrada y detecta que hay un parámetro que indica el componente de destino , el componente com_prueba recibe la petición y el controlador detecta que existe un parámetro task, este parámetro es un parámetro especial que se usa en Joomla! para procesar acciones de formularios, Joomla! buscara en la clase controlador un metodo que tenga el mismo nombre que el valor del parámetro task y le concedera el control. Es por eso que el nombre del método ha de coincidir con el nombre del task que pusimos en el formulario. Se pueden mapear task’s a métodos diferentes, pero esto queda pendiente para otro articulo.

En este task volvemos a utilizar el API de Joomla! para acceder a datos, pero en este caso vamos a usar el objeto JTable, para introducir datos.

Podríamos utilizar funciones como mysql_query() para realizar consultas de tipo insert y update, sin embargo estas funciones son mas difíciles de generar, requieren de conocimientos de lenguaje SQL y probablemente nos dejemos huecos de seguridad que dan lugar a inyecciones SQL y otros fallos.

El API de Joomla! proporciona el objeto JTable para crear, leer , actualizar y borrar registros de una tabla.

Crea la carpeta tables , y dentro de esta carpeta crea el archivo Mensajes.php , El nombre del archivo a de ser igual que el nombre de la clase JTable, es decir si el archivo se llama Mensajes.php, la clase se llamara TableMensajes. Si no se hace así, Joomla! tendra problemas para encontrar el objeto JTable.

Introduce el siguiente código en el archivo:

  1. ­
  2. <?php
  3.  
  4. defined( ‘_JEXEC’ ) or die( ‘Restricted access’ );
  5. class TableMensajes extends JTable
  6. {
  7.      var $id = null;
  8.      var $mensaje = null;
  9.    function __construct(&$db)
  10.   {
  11.     parent::__construct( ‘#__prueba’, ‘id’, $db );
  12.   }
  13. }
  14.  
  15. ?>
  16.  

Se declaran tantas propiedades como campos tenga la tabla sobre la que se quiere trabajar, el nombre de las propiedades debe ser igual que el nombre de los campos.

En el constructor se le pasa como primer parámetro el nombre de la tabla, como segundo parámetro la clave primaria y en el tercer parámetro la referencia al objeto base de datos del marco de trabajo Joomla!, el nombre de este tercer parámetro es siempre igual.
Ya tenemos el objeto JTable necesario para utilizar desde el modelo pruebaAdmin, por lo tanto cuando ejecutemos el task introduceMensaje, se instanciara el modelo pruebaAdmin y se ejecutara el método introduce de este. Es en el método introduce del modelo pruebaAdmin donde se usa el objeto JTable que acabamos de crear.

Vamos a implementar el método introduce del modelo pruebaAdmin , introduce el siguiente método en el modelo:
­­

  1.  
  2. function introduce($post){
  3.  
  4.   $row =& JTable::getInstance(‘Mensajes’, ‘Table’);
  5.      if (!$row->bind($post)) {
  6.          return JError::raiseWarning(500, $row->getError());
  7.      }
  8.      if (!$row->store()) {
  9.         return JError::raiseWarning(500, $row->getError());
  10.      }
  11.   return 1;
  12.     }
  13.  

Observa que acepta como parámetro una variable a la que llama $post.
En esta variable almacenaremos la petición entera que previamente hemos obtenido en el controlador mediante la instrucción : JRequest::get(’post’)

Esta instrucción recoge los parámetros de entrada de la petición, es como acceder al array $_POST de php, pero mediante el API de Joomla!, lo que nos provee de protección contra inyección de código, etc…
Es importante saber que si se intenta pasar el valor de los parámetros post mediante el objeto JRequest desde otro sitio que no sea el controlador, por ejemplo desde una vista, el objeto JTable no recibirá los parámetros correctamente y generará un error al intentar obtener los valores de la petición.

En la primera línea del método se obtiene una instancia del objeto TableMensajes que hemos creado antes , si no pones los nombre correctamente no se instanciará el objeto.

Después se ejecuta el método bin() del objeto TableMensajes que lo que hace es buscar en los parámetros post de entrada parámetros con el mismo nombre que los campos de la tabla y enlazarlos, por eso es importante que en el formulario hayamos escrito correctamente los nombres de los inputs.

Acto seguido se ejecuta el método store() , que almacena en la base de datos los datos provenientes del formulario. Busca la clave primaria, y si ya existe un un registro con la misma clave primaria ejecuta una consulta update, si aun no esta creada la clave primaria, ejecuta una consulta insert.

Si alguno de estos dos métodos no se ejecuta correctamente se lanza un error el método mediante el código : return JError::raiseWarning(500, $row->getError()) .

De vuelta al task introduce mensaje, obtenemos la devolución del metodo introduce y la procesamos con este código :

  1.  
  2. if($res == 1){
  3.             $this->setMessage(‘Mensage introducido!’);
  4.             $this->setRedirect(‘index.php?option=’ . $option. ‘&view=pruebaAdmin’);
  5.          }else{
  6.             $this->setMessage(‘Error al introducir!’);
  7.             $this->setRedirect(‘index.php?option=’ . $option. ‘&view=Error’);
  8.          }
  9.  

Este código ya lo hemos introducido antes en el task introduceMensaje.
Si todo ha funcionado correctamente , se redirección a la vista pruebaAdmin mediante el método de controlador setRedirect(),en la cual se volverán a mostrar todos los mensajes insertados y un enlace para insertar mas mensajes. Si no, se redirecciona a una vista con nombre error en la cual crearemos un mensaje de error a gusto de cada cual.

El método del controlador setMessage() establece el mensaje que aparecerá en la parte superior izquierda de la pantalla por defecto, o donde este definido en el template de back-end, y hace que se muestre como en la foto :

Si has leido todo, enhorabuena.
Proximamente hablaré sobre como usar el editor wysiwyg de Joomla, sobre como usar AJAX en nuestros componentes y también Google Maps.
También escribire algo de modulos.



Comentarios

  1. 1
    Enrique
    14 de Febrero del 2008 a las 6:43 am

    Hola David !
    Felicitaciones por el tutorial !!
    Esta perfecto !!

  2. 2
    david
    14 de Febrero del 2008 a las 8:27 am

    Hola Enrique!
    Eres el primer comentario que recibo…

    Muchas gracias!!!

  3. 3
    Alicante
    14 de Febrero del 2008 a las 8:18 pm

    Hola que tal, hace mucho tiempo que ocupo Joomla! para mis sites personales, desde sus inicios por allá como mambo cuando eran épocas remotas y te digo que es la primera ocasión que veo un tutorial en español de como hacer un componente desde la “a” a la “z”. En verdad te doy mis mas sinceras felicitaciones amigo, acabas de hacer historia!!!

    enhorabuena con esta importantísima herramienta hecha tutorial.

    un apretón de manos desde la ciudad de la inseguridad, México.

    saludos

    Alicante.

  4. 4
    david
    15 de Febrero del 2008 a las 1:14 am

    Muchas gracias…veo que por lo menos a alguien le esta sirviendo… aún tengo que completar unas cosas y añadir otras tantas.

    Un saludo!

  5. 5
    pako
    20 de Febrero del 2008 a las 12:50 am

    Buen trabajo!
    Que sepas que te vemos más de lo que comentamos y que lo aprovechamos más de lo que pensamos

  6. 6
    Vicente
    21 de Febrero del 2008 a las 12:49 pm

    De mayor…. quiero saber tanto como tu. Creo que te voy a seguir de cerca. Me gusta tu estilo.

    Saludos

  7. 7
    david
    21 de Febrero del 2008 a las 4:36 pm

    Jajajaja… gracias, pero no es para tanto. Será un honor que leas mi blog.

    Un Saludo.

  8. 8
    Nicko
    26 de Febrero del 2008 a las 3:33 am

    Sinceramente, de los contenidos mas increibles, utiles y practicos que e visto en la web sobre joomla.
    Porque somos muchos los que pretendemos participar y ayudar, pero en este caso tú lo estas haciendo extraordinariamente bien.

    Un saludo y te animo para que no lo dejes

    PD:Aunque sabemos lo mucho que cuesta :)

  9. 9
    david
    26 de Febrero del 2008 a las 6:27 am

    Gracias nicko… ;-)

  10. 10
    Jorge Zabala
    27 de Febrero del 2008 a las 12:47 pm

    Muchas gracias por la información, ayer instale jumla, hoy he leido los tutoriales excelentes, pero te digo la verdad nose como crear directamente un programa de base de datos típico con clases y presentar datos en pantalla con un link de aceurdo a una consulta por nombre y que presente en back_end de jumla.

    Creo que son nobatisimo, pero el estilo que utilizas es para algunos que vienen utilizando varios años. Pero me gustaria saber desde lo más elemental, de modo que si tengo un programita lo instale en jumla. !oh debemos seguir estos pasos obligatorios.

  11. 11
    david
    27 de Febrero del 2008 a las 1:00 pm

    Hola Jorge, es cierto lo que dices, para entender bien todo es necesario tener una base en programación orientada a objetos, ya que el framework de Joomla! 1.5 esta completamente orientado a objetos.

    Lo más importante para crear tu propia aplicación en Joomla! es saber lo que quieres, para poder realizar un analisis, crear los campos de la base de datos que necesites y empezar a programar.

    Estos tutoriales solo son una introduccón para saber como hacer componentes simples, para que después tu puedas seguir programando con los conocimientos de php que tengas…

    Si tienes alguna duda en concreto ponla aquí y se intentara responder…

    Un saludo!

  12. 16
    Cirlord
    26 de Marzo del 2008 a las 12:59 pm

    Lo hecho todo siguiendo a la perfección cada uno de los pasos, pero no me muestra el listado de los mensajes que he insertado manualmente ne la base de datos, solo me muestra la tabla con el enlace Nuevo Mensaje, despues cuando doy click en el link va a estar direccion: http://localhost:5901/Oficial/administrator/%20index.php?option=com_prueba&view=introduceNuevo y dice que no la encuentra, dime que puedo estar haciendo mal, porque es la tercera vez que lo intento.

  13. 17
    Cirlord
    26 de Marzo del 2008 a las 1:50 pm

    Creo que si dejamos en claro el código que tiene que tener la controladora y el punto de entrada se entendería al máximo el presente post.

  14. 18
    david
    26 de Marzo del 2008 a las 2:31 pm

    Pues en el enlace que has puesto creo que te has dejado un espacio en blanco justo antes de index.php… eso puede dar error…

    Esto que he escrito aquí lo he probado yo previamente en ordenador y funcionaba todo correctamente, despues he copiado y pegado, si da algun error puede ser un problema de que el embellecedor de código haya interpretado mal algún carácter…

    Un saludo!

  15. 19
    Cilord
    26 de Marzo del 2008 a las 8:01 pm

    Tenías toda la razón en lo del espacio en blanco, el problema es que cuando se copia de tu poster para un embellecedor se queda ese espacio y uno no se da cuenta. El problema también es que soy nuevo en esto de hacer componentes, el del front-end, que publicaste si me salio bien, pero para este, no sé qué poner en el punto de entrada y la controladora.
    Lo único que no trabaja ahora, es a la hora de enviar un nuevo mensaje para insertarlo en la base de dato, pero creo que el problema es el que te plantee, que no reconoce bien el TASK, si me puedes ayudar con el código del Punto de Entrada y la Controller, estaría perfecto.
    PD: Muchas gracias por los tutoriales, la verdad que están súper.

  16. 20
    Fran
    31 de Marzo del 2008 a las 9:54 am

    Hola David,

    ¿No faltan algunas cosas en este tutorial?

    Cuando dices “En la clase controlador PruebaAdminController que debes haber creado anteriormente”, ¿a qué clase te refieres? no hay instrucciones previas para crear esa clase :-?

    Además, el archivo admin.prueba.php que señalas al principio como punto de entrada no se vuelve a mencionar en todo el artículo, ¿qué hay que poner en ese archivo?.

    A lo mejor es torpeza mía que no entiendo bien las cosas, en ese caso te ruego que disculpes las molestias.

    Gracias :-)

  17. 21
    david
    31 de Marzo del 2008 a las 1:26 pm

    Hola Fran, para crear la estructura del componente mriate el
    el primer tutorial de componentes, allí se explica como crear la clase controladora…
    Para crear el controlador en la parte de backend se hace de igual forma que en front end, lo único es que el punto de entrada en el back-end se crea en un fichero con nombre admin.nombreComponente.php .
    Lo demás es igual.
    Este sería el código para el controlador del artículo:

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

    //Importa el controlador base
    require_once( JPATH_COMPONENT.DS.'controller.php' );

    // Si viene en la peticion, se importa el controlador especifico
    //El controlador especifico hereda del controlador base, pro eso es necesario importar tambien el base
    if($controller = JRequest::getWord('controller')) {
    $path = JPATH_COMPONENT.DS.'controllers'.DS.$controller.'.php';
    if (file_exists($path)) {
    require_once $path;
    } else {
    $controller = '';
    }
    }

    // Se crea el controlador
    $classname = 'pruebaController'.$controller;
    $controller = new $classname( );
    //El nombre del controlador es obtenido dinamicamente con el string $classname

    // Sele pasa la tarea ( task) al controlador y se ejecuta su metodo execute
    $controller->execute( JRequest::getVar( ‘task’ ) );

    // Redirect if set by the controller
    $controller->redirect();
    ?>

    Espero que te funcione, cuando tenga un poco más de tiempo pondre en un zip el componente de ejemplo para descargar.

    Un saludo.

  18. 22
    Cirlord
    1 de Abril del 2008 a las 9:51 am

    Sería bueno que publicaras el ejemplo, porque he sido al pie de la letra todo el post y no hay forma de que inserte en la BD, no se donde puede radicar el problema y quiero guiarme por ese, para desarrollar todos los módulos que tengo que hacer para la empresa.

  19. 23
    david
    1 de Abril del 2008 a las 12:09 pm

    Hola Cirlord, visto los problemas que estan surgiendo, en cuanto tenga un poco de tiempo, hago el componente y lo pongo para descargar. Comentaré todo el código para que no hayan problemas.

    Últimamente estoy muy liado con el trabajo y otras cosas, a ver si este fin de semana saco algo de tiempo…

  20. 24
    Cirlord
    7 de Abril del 2008 a las 4:01 pm

    Hola David, sé que tienes tus propias cosas que realizar, y estoy muy agradecido por todo el tiempo que le has dedicado a todos los que me como yo, les ha resultado muy productivo el trabajo, recuerda que aun estamos esperando la publicacion del componente, sin mas, un saludo para ti.

  21. 25
    Sylvio lara A
    28 de Abril del 2008 a las 6:27 am

    en el punto de la generacion del tmpl/default.php
    ————-

    —————–
    el debe ir al fin del scrip, ya que como se puede ver al realizar el submid debe ser sobre la forma
    ——————-

    .
    .
    .
    .

    ————-
    est aseria la forma ne que funciona
    El tutorial es super bueno y gracias, hay muy poca informacion estrucuturada de esta forma.

    Saludos

  22. 26
    Sylvio lara A
    28 de Abril del 2008 a las 6:34 am

    Hola David,
    Este es un comentario para un pequeño problema,
    en el punto de la generacion del tmpl/default.php
    ————
    form action=index.php method=post

    /form
    .
    .
    .
    .
    ————
    el /form, debe ir al fin del scrip, ya que como se puede ver al realizar el submid debe ser sobre la forma
    ——–

    form action=index.php method=post
    .
    .
    .
    .
    /form

    Esta seria la forma en que funciona
    El tutorial es super bueno y gracias, hay muy poca informacion estrucuturada de esta forma.

    Saludos

  23. 27
    Sylvio lara A
    29 de Abril del 2008 a las 4:16 am

    Buen Dia
    El ejemplo una ves echo, ese pequeño cambio que comunique, funciona exelentemente.

    El mismo lo repeti con un nueba tabla, con mas campos y añadiendo en las formas los campos adicionales, y al inserta crea el registro de acuerdo a lo que fue genrado en el constructor y datos defould de la tabla, osea no ingresa la informacion solicitada, por lo cual sobre el mismo de prueba cambie la tabla y añadi un campo adicional, de igual forma tampoco me inserto el valor del nuevo campo, lo e revisado y en realidad no veo donde sea el problema, tegradesco si me peudes dar una sugerencia

    Gracias

  24. 28
    tunya
    6 de Mayo del 2008 a las 9:06 am

    Hola David, primero de todo felicitaciones (una vez más, pero es verdad)

    Por otro lado tengo una pregunta, ¿cómo se puede cambiar el desde el view.html.php que en vez de mostrarte el default,php te muestre laQueYoQuiero.php?

    Muchas gracias

  25. 29
    tunya
    6 de Mayo del 2008 a las 9:20 am

    Bueno ya he visto lo que me pasaba:
    desde la vista (view.html.php) habia puesto el
    editaArticle
    pero resulta que las plantillas tienen que estar totalemente en minúsculas para poder ser mostradas
    así que renombrando el archivo de la carpeta tmpl
    editaarticle
    ha funcionado!!!

  26. 30
    david
    7 de Mayo del 2008 a las 12:14 am

    Hola tunya,
    Con respecto a tu primera pregunta, cuando ejecutas el metodo dysplay has de pasarle como parametro el nombre del template, es decir:

    display(’loqueyoquiera’);

    Si no recuerdo mal…

  27. 31
    Eulices
    7 de Mayo del 2008 a las 1:29 pm

    Hola, alguien puede enviarme el .zip con todo esto hecho? la verdad, yo nunca he sido bueno para aprender leyendo, solo de ver ese monton de cosas nuevas me da uuuuuun sueño… asi que prefiero ver el componente montado, y luego adaptar las funciones y los prints a lo que ocupo.
    si pueden mandarmelo a eulices_nicot@hotmail.com cuanto antes se los agradeceré mucho, en especial si es hoy :)

    Saludos

  28. 32
    Eulices
    7 de Mayo del 2008 a las 4:19 pm

    por cierto, hay otras dudas que tengo acerca de esto de los componentes:

    como hago la base de datos? se puede mediante ftp a punta de comandos? o tengo que estar en la misma maquina “servidor” para poder hacerlo? joomla 1.5 trae incluido el mysql? hay que instalarlo como algo adicional? donde en el codigo se especifico el nombre de la base de datos?

    mas saludos

  29. 33
    JoomlaNewbie
    20 de Mayo del 2008 a las 8:09 am

    Buenas… en que parte hice algo mal que me sale este error??

    500 - Se ha producido un error

    View not found [name, type, prefix]: pruebaAdmin,html,pruebaadminView

  30. 34
    carlos robayo
    1 de Junio del 2008 a las 10:33 am

    hola david
    te felicito por tu manual es muy bueno y da una perspectiva del funcionamiento de jommla y mas para personas que estan empezando y no consiguen informacion en español gracias por tu aporte….

  31. 35
    Ricardo
    24 de Junio del 2008 a las 2:39 pm

    Bueno es un buen tutorial bien estructurado pero algunas veces si se pierde la secuencia por que no dice que archivos crear, ni donde seria bueno como opinan los compañeros si lo ponen en un .zip para poderlo estudiar masdetenidamente felicidades y un abrazo

  32. 36
    Ricardo
    25 de Junio del 2008 a las 11:36 am

    segui al paso el tuttorial y ya van varias vecesque lo leo y nada me tira el siguiete error 404 - Component not found alguien sabe por que es necesario cargar el componente ??? y por que no habla nada sobre lo que debe de llevar la vista error gracias a quien me pueda ayudar :D

  33. 37
    Ricardo
    26 de Junio del 2008 a las 7:57 am

    sigo andole y dandole vueltas al tutorial y esperando que le moderador lea mis mensajes jeje, a al guie nle funcion esto por que creo que tiene mal los nombres de las clases o algo asi cualquier comentario gracias

  34. 38
    Ricardo
    26 de Junio del 2008 a las 9:57 am

    otra duda espero alguien sabe por que el punto de entrada se llama admin.prueba en le tuto pasado segun entendi joomla busca un componente de punto de entrada segun como se llame la carpeta en este caso com_prueba no es un error que el punto de netrada se llame admin.prueba???

  35. 39
    Ricardo
    27 de Junio del 2008 a las 12:31 pm

    Bueno por fin funciono haciendole unos pequeños cambios me gustaria si me podrian explicar por que el punto de ntrada se debe de llamar admin.prueba yo lo deje como prueba y me funciono :D de la otra forma no, en el modelo PruebaAdmin me marca error en las funciones
    /* $row =&JTable::getInstance(’Mensajes’, ‘Table’);
    if (!$row->bind($post)) { //20
    return JError::raiseWarning(500, $row->getError());
    }
    if (!$row->store()) {
    return JError::raiseWarning(500, $row->getError());
    }
    return ($row);*/
    asi es que las comente jeje y crie mis propias conecciones y hice lo necesario para insertar, pero me queda la duda de por que me da el siguiente error cuando lo hago como en le tuto el error es

    Fatal error: Call to a member function on a non-object in C:\Program Files\xampp\htdocs\Joomla153\components\com_prueba\models\pruebaadmin.php on line 20

    gracias espero y un dia el moderador vuelva jeje y apruebe mis mensajes mil gracia amor y paz. :D

  36. 40
    david
    27 de Junio del 2008 a las 4:37 pm

    Hola Ricardo, primero que nada disculparme por haber descuidado el blog durante este tiempo, pero el trabajo es lo que manda, y ahora estoy acabando muchos proyectos y no tengo tiempo para casi nada.

    Respecto a lo del punto de entrada, se ha de llamar admin.prueba.php si se trata del punto de entrada de la parte del backend. Yo lo tengo así y me funcionan los componentes correctamente.

    Un saludo!

  37. 41
    Jose
    28 de Junio del 2008 a las 8:19 am

    Hola David, muchas gracias por publicar este tipo de tutoriales tan útiles, estoy tratando de hacer un componente (basandome en el tuyo)que me liste unas consulta de una bd postgres,tengo un formulario que toma cuantas filas se van a mostrar y que tipo de consulta se va a realizar. Lo que quiero hacer es que por medio del controlador se le pase un valor a la vista para que esta pueda saber que va a mostrar, pero cuando llamo ($view = $this->getView(’nombre_vista’)), me dice que no puede encontrar la vista.
    Como se le pueden pasar valor a la vista? o alguna otra idea.
    De antemano muchas gracias y un saludo.

  38. 42
    david
    29 de Junio del 2008 a las 7:14 am

    Hola Jose, desde la vista puedes acceder al modelo para recuperar datos y mostrarlos, si lo que quieres es realizar sentencias SQL de tipo insert o update, mejor que lo hagas desde el controlador.

    Si aún asi quieres pasar un valor a la vista puedes usar la sesión.

    Un saludo!

  39. 43
    dontysk
    1 de Julio del 2008 a las 4:41 am

    Excelente tutorial , sería fantástico tener un *.zip para poder bajarse el ejemplo y destriparlo a gusto.
    Un saludo y felicidades por la labor , aprovecho para comunicarte que estoy pensando hacer un video-tutorial sobre desarrollo de componente y demás para joomla 1.5 y seguramente muchas ideas y ejemplos los coja de aquí, si me decido definitivamente ha hacerlo te pasaré el link para que lo incluyas en tu blog si lo deseas.
    Un saludo y gracias

  40. 44
    Sebas
    2 de Julio del 2008 a las 12:48 am

    Hola david.
    Que excelentísimo paquete de tutoriales te has hecho.

    Tengo un problema, cuando voy a ver el componente, me saca este error: 500 - Se ha producido un error View not found [name, type, prefix]: prueba,html,pruebaView.

    Creo que seguí el tuto al pie de la letra, pero tuve algunas dudas en ciertas partes, como en que archivo va el codigo de function introduceMensaje(), y en que archivo va el código de “Este código ya lo hemos introducido antes en el task introduceMensaje.”

    Nuevamente, muchas gracias por estos excelentes tutoriales, y ojalá los pongas pronto en un zip!!

  41. 45
    Sebas
    6 de Julio del 2008 a las 7:03 pm

    Ya vi cual era mi problema, y tal vez el de muchos

    Para crear el controlador en el modelo:
    $classname = ‘pruebaAdminController’.$controller;

    Y en el controller.php el class debe ser:
    class PruebaAdminController extends JController

    pero aún tengo un problema, y es que no se está grabando la información en la BD, cuando le doy al botón “Enviar”, se redirecciona a index.php?option=com_prueba, pero el cuadro con los datos no se actualicé, y luego fui a revisar la BD, y no hay datos nuevos.

    No sé que pueda estar fallando, si me pueden ayudar les quedo muy agradecido!!

  42. 46
    Micki
    11 de Julio del 2008 a las 3:42 am

    Oye Sebas, ¿donde dices que hay que poner la línea?

    $classname = ‘pruebaAdminController’.$controller;

  43. 47
    Sebas
    18 de Julio del 2008 a las 8:03 am

    Micki, esa línea debe ir en el modelo, osea en el archivo admin.prueba.php, despues de la línea que dice:

    // Se crea el controlador

    —————————————
    Sigo con mi problema, no se está grabando la información en la BD, cuando le doy al botón “Enviar”, se redirecciona a index.php?option=com_prueba, pero el cuadro con los datos no se actualiza.

    Haber si a alguien se le ocurre que puede estar pasando

  44. 48
    Jose
    19 de Julio del 2008 a las 9:20 am

    Cordial Saludo David,
    Otra vez molestando, mi inquietud es la siguiente: he creado un componente y en el archivo view.html.php de la vista por defecto puedo acceder a metodos del modelo haciendo un $model=&$this->getModel() y luego trabajo con los metodos; ahora bien cuando tengo otra vista y me dirijo a ella con un set->redirect desde el controlador, ya no me funciona el getModel() de la segunda vista. Como puedo hacer para llamar metodos del modelo?
    De antemano gracias por la colaboracion prestada.

  45. 49
    juan david
    1 de Agosto del 2008 a las 2:52 pm

    hala david, te felicito de verdad por este tutorial tan bueno, aunque he seguido al pie de la letra los pasos, no me funciona, pero se que alg debo ener mal, no se que tan dificil sea un .zip para comparar y mirar los errores, despues de todo, cogere este com de modelo para los que haga, muchas gracias por tu tiempo, muchas gracias por esnseñarnos, muchas gracias por todo, eres un super pibe

  46. 50
    Fabio
    1 de Septiembre del 2008 a las 11:39 am

    Puede alguien enviarme por favor un archivo zip con el contenido de esta parte. fabio.tamez@gmail.com

    Ya he tratado un buen y me sigue marcando el mismo error:

    View not found [name, type, prefix]: pruebaadmin,html,pruebaadminView

Trackbacks

  1. Tutorial: Módulos para Joomla! 1.5 | nosoloCodigo
  2. Crear el XML del componente de Joomla y generar instalable | nosoloCodigo
  3. Tutorial: Componente para Joomla 1.5 III | nosoloCodigo
  4. Tutorial: Componentes para Joomla! 1.5 II | nosoloCodigo

Deja un Comentario

blank
[x] Cerrar
E-mail