Tutorial: Como crear un componente para Joomla!1.5 IV
Frameworks, Joomla, Programación
Índice de la serie: desarrollo de extensiones con Joomla
- Hacer componentes en Joomla!
- Patrón MVC
- Concepto de Front-End y Back-End
- Primer componente MVC simple con Joomla!
- Segundo componente, Back-End y acceso a datos.
- Crear el xml del componente de joomla y generar instalable.
- Hacer Módulos para Joomla!
- Hacer Plugins para Joomla!
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:
CREATE TABLE 'jos_prueba' ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `mensaje` VARCHAR( 30 ) NOT NULL DEFAULT 'mensaje' ) ENGINE = innodb;
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:
A continuación puedes observar el diagrama del componente que vamos a crear:
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:
defined('_JEXEC') or die(); jimport( 'joomla.application.component.model' ); class PruebaAdminModelPruebaAdmin extends JModel { var $datos; function getData() { if (empty( $this->datos )) { $query = ' SELECT * ' . ' FROM #__prueba '; $this->datos = $this->_getList( $query ); } return $this->datos; } }
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/view.html.php :
defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view'); class PruebaAdminViewPruebaadmin extends JView { function display($tpl = null) { $model =& $this->getModel(); $datos = $model->getData(); $this->assignRef( 'mensajes', $datos ); parent::display($tpl); } }
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 :
<table class="adminlist">
<thead>
<tr>
<th width="5">ID </th>
<th>Mensaje </th>
</tr>
</thead>
<tbody>
<?php
$n =count( $this->mensajes );
for ($i=0; $i < $n; $i++)
{
$row =& $this->mensajes[$i];
?>
<tr>
<td> <?php echo $row->id; ?> </td>
<td><?php echo $row->mensaje; ?> </td>
</tr>
<?php
}
?>
<tr>
<td> </td>
<td><a href="<?php echo JURI::base();?> index.php?option=com_prueba&view=introduceNuevo">Nuevo Mensaje </a></td>
</tr>
</tbody>
</table>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:
defined( '_JEXEC' ) or die( 'Restricted access' ); jimport( 'joomla.application.component.view'); class PruebaAdminViewIntroduceNuevo extends JView { function display($tpl = null) { parent::display($tpl); } }
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 :
<form action="index.php" method="post"> <table border="0"> <tbody> <tr> <td>ID</td> <td>Mensaje</td> </tr> <tr> <td><input disabled size="3" name="id" /></td> <td><input maxlength="30" size="30" name="mensaje" /></td> </tr> <tr> <td> </td> <td><input type="submit" value="Enviar" /></td> </tr> </tbody> </table> <input type="hidden" value="com_prueba" name="option" /> <input type="hidden" value="introduceMensaje" name="task" /> </form>
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:
function introduceMensaje(){ $option = JRequest::getCmd('option'); $modelo = $this->getModel('pruebaAdmin'); $res = $modelo->introduce(JRequest::get('post')); if($res == 1){ $this->setMessage('Mensage introducido!'); $this->setRedirect('index.php?option=' . $option. '&view=pruebaAdmin'); }else{ $this->setMessage('Error al introducir!'); $this->setRedirect('index.php?option=' . $option. '&view=Error'); } }
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:
defined( '_JEXEC' ) or die( 'Restricted access' ); class TableMensajes extends JTable { var $id = null; var $mensaje = null; function __construct(&$db) { parent::__construct( '#__prueba', 'id', $db ); } }
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:
function introduce($post){ $row =& JTable::getInstance('Mensajes', 'Table'); if (!$row->bind($post)) { return JError::raiseWarning(500, $row->getError()); } if (!$row->store()) { return JError::raiseWarning(500, $row->getError()); } return 1; }
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 :
if($res == 1){ $this->setMessage('Mensage introducido!'); $this->setRedirect('index.php?option=' . $option. '&view=pruebaAdmin'); }else{ $this->setMessage('Error al introducir!'); $this->setRedirect('index.php?option=' . $option. '&view=Error'); }
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 escribiré algo de módulos.
Comentarios
Trackbacks
- Tutorial: Módulos para Joomla! 1.5 | nosoloCodigo
- Crear el XML del componente de Joomla y generar instalable | nosoloCodigo
- Tutorial: Componente para Joomla 1.5 III | nosoloCodigo
- Tutorial: Componentes para Joomla! 1.5 II | nosoloCodigo
- Utilizar el calendario que incorpora el API de Joomla | nosoloCodigo
- Patrón MVC para crear componentes en Joomla | Nosolocodigo



Me llamo David Noguera, tengo 23 años y soy Desarrollador/Administrador web.
Puedes encontrar algo más de información en la página
14 de Febrero del 2008 a las 6:43 am
Hola David !
Felicitaciones por el tutorial !!
Esta perfecto !!
14 de Febrero del 2008 a las 8:27 am
Hola Enrique!
Eres el primer comentario que recibo…
Muchas gracias!!!
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.
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!
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
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
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.
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 :)
26 de Febrero del 2008 a las 6:27 am
Gracias nicko… ;-)
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.
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!
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.
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.
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!
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.
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 :-)
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.
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.
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…
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.
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
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
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
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
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!!!
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…
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
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
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
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….
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
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
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
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???
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
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!
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.
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!
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
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!!
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!!
11 de Julio del 2008 a las 3:42 am
Oye Sebas, ¿donde dices que hay que poner la línea?
$classname = ‘pruebaAdminController’.$controller;
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
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.
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
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
9 de Septiembre del 2008 a las 8:40 am
Gracias fue de gran ayuda este manual me sirvo mucho espero y sigas creando mas manuales, un saludo y mis agradecimientos.
= )
11 de Septiembre del 2008 a las 7:48 am
Muy bueno el tuto David, si te interesa, una idea podrias tambien realizar un tuto para comensar el desarrollo de un modulo, plugin, componente con joomla y sobre el Overrite las salidas por defecto de el CORE de joomla me falta mucho por aprender pero si te soy de ayuda en lo que pueda mandame un correo.
saludos ^^, y Gracias por el post.
FDO: Seeal
13 de Septiembre del 2008 a las 11:26 am
SEBAS cambia en mensajes.php y pruebaAdmin:
__prueba por jos_prueba.
24 de Septiembre del 2008 a las 1:59 pm
Muy buenas, gracias por el manual, pero tengo una duda, lo he estado probando pero no me introduce nada en la BD, ¿a alguien le funciona? Si es asi, ¿podrian poner un enlace a los ficheros para descargarlos? Es que he cambiado cosas como decia Sylvio lara A, y esa parte me la hace pero no me inserta en la BD.
Saludos.
24 de Septiembre del 2008 a las 2:38 pm
Buenas, me pasa como a SEBAS, he cambiado lo ultimo que pone este8an, pero tampoco va por lo menos a mi :o(
24 de Septiembre del 2008 a las 9:19 pm
Hola, lo he leido, genial…sin mucho mucho, la literatura técnica se llena de “tecnicos”, pero esto está genial.
Muchas pero muchas gracias.
De veras, sugue ahi!!!!
Saludos
Fdo
25 de Septiembre del 2008 a las 6:03 am
Bueno ya he dado con la solucion, por lo menos ya me funciona, el problema era en las comillas simples en el fichero admin.prueba.php, no las tenia bien puestas, con el copy&paste habia puesto otras.
¿Que programa utilizais para crear los ficheros php, html, etc? Yo ahora mismo en linux estoy utilizando Bluefish.
Otra cosa, ¿existe alguna manera de saber si un fichero da error en joomla? esto es, ¿existe algun debugger?
Gracias.
17 de Octubre del 2008 a las 2:34 pm
En hora buena David, voy iniciando en Joomla y lo primero que me pidieron fue implementar el MVC y esto es lo mejor que he leido en una semana de investigacion.
Muchas Felicidades.
23 de Octubre del 2008 a las 12:44 pm
Saludos buen tutorial, para los que tienen el error 500, ya lo resolvi.
Deben estar pendientes de no seguir el tutorial al pie de la letra, porq el directorio /views/pruebaAdmin NO es asi es /views/pruebaadmin todo en minusculas, al igual que el archivo pruebaadmin.php de la carpeta models.
Luego de eso me funciono todo ok
26 de Octubre del 2008 a las 2:44 pm
Por favor, un alma caritativa que me envie el zip, me he quedado parado con el error 500 ??View not found [name, type, prefix]:?? pruebaadmin,html,pruebaadminView he probado a poner los ficheros en minusculas como Jesus pero no he conseguido nada. Muchas gracias. Mi correo es correo.j.m.g.a@gmail.com
27 de Octubre del 2008 a las 6:41 am
He hecho de todo pero no logro que funcione y me aparece este error:
404 – Se ha producido un error
Componente no encontrado
Me pueden ayudar?
6 de Noviembre del 2008 a las 10:45 am
Todavia falta información más detallada por eso recurrí a ebooks oficiales que conseguí en el siguiente post: http://www.taringa.net/posts/ebooks-tutoriales/1730215/Joomla-eBooks.html
Espero les sirva.
12 de Noviembre del 2008 a las 9:06 am
Saludos David. tengo una duda sobre este componente para backend… Por qué no funciona si lo hago para backend? (o sea fuera de administrator/components)… Me aparece el error:
“Fatal error: Call to a member function bind() on a non-object in …\sitioweb_joomla\components\com_buscajosep\models\buscajosep.php on line 22″. Esperaré una pronta respuesta. Gracias por tu atención.
12 de Noviembre del 2008 a las 9:13 am
Saludos David. Tengo una duda sobre este tutorial. Resulta q al pasarlo a modo frontend, me bota el error:
Fatal error: Call to a member function bind() on a non-object in …\sitioweb_joomla\components\com_buscajosep\models\buscajosep.php on line 22. Reemplace todas las entradas de “admin” y no vale. Que puede ser? Es que quiero grabar que la gente complete y envie un formulario y se almacene en la base de datos.
13 de Noviembre del 2008 a las 8:59 am
Hola a todos!! Tengo una serie de dudas que quisiera por favor alguien me ayude a resolver. Primero mi duda es sobre la base de datos, que nombre lleva y de que ficheros se esta haciendo la conexion a esta. Segundo es sobre la carpeta error, que codigo llevan los ficheros que esta contiene? Por otro lado si fuera posible que alguien me envie el componente a mi correo para verificar el mio.. a lunaelimay@gmail.com.
Gracias por toda su ayuda!!!
11 de Diciembre del 2008 a las 8:29 am
Tengo el siguiente problema:
Al presionar el boton enviar me sale el siguiente error:
Fatal error: Call to a member function bind() on a non-object in /var/www/Joomla/administrator/components/com_prueba/models/pruebaadmin.php on line 47
No se que hise mal.
¿Alguien prodria ayudarme por favor?
31 de Diciembre del 2008 a las 6:04 am
hola como estas david espero que muy bien, quiero agradecerte por este trabajo tan completo, y felicitarte por todo lo que es echo para que la comunidad hispana entienda como trabaja joomla, es exelente tu aporte, espero que tengas un feliz año, y prospero ademas.
una corta pregunta, para la parte de instalacion la enpaquetacion del proyecto para el back-end y el front-end, debe ser asi:
prueba/
administrator/prueba/
te deso lo mejor y exitos adios
13 de Enero del 2009 a las 1:49 am
David te felicito por tu estupendo tutorial, de gran ayuda para los que comenzamos a toquetear con el código de joomla.
Tengo un problema que no consigo resolver, algo sencillo pero …, y he visto que le pasa a otros compañeros, a ver si alguien puede darle solución:
Siguiendo con el ejemplo, en la vista introduceNuevo entre las lineas 8 y 9 (antes de “parent::display($tpl);”) he insertado código para acceder a datos de otro modelo llamado prueba2.php (creado todo igual como en el modelo prueba, es decir “class PruebaModelPrueba2 extends JModel”), pero me da el error: “Fatal error: Call to a member function getData() on a non-object in /var/www/administrator/components/com_prueba/views/introducenuevo/view.html.php on line 9″
el código de la vista introduceNuevo donde da el error es el siguiente:
getModel(‘prueba2′);
$datos = $model->getData();
parent::display($tpl);
}
}
?>
El fallo está en que no puedo acceder al modelo “prueba2″, a pesar de estar creado igual que tenia el modelo “prueba”.
¿Que estoy haciendo mal?
Quizás esto no se puede hacer, ¿a alguien le ha pasado o lo ha solucionado o lo ha hecho de alguna otra forma?
Muchas gracias por adelantado.
13 de Enero del 2009 a las 2:06 am
Perdón pero no ha salido bien en el post anterior, lo vuelvo a poner.
El código de la vista introduceNuevo donde da el error es el siguiente:
/*
getModel(‘prueba2′);
$datos = $model->getData();
parent::display($tpl);
}
}
?>
*/
13 de Enero del 2009 a las 9:19 am
Hola a todos los que teneis problemas.
Una posible solucion es la de coger el primer componenete que hemos creado en la zona Front y copialo integramete en los componentes de la zona back (administrator).
Tras esto hacer la comprobacion de que funciona y que muestra lo devuelto como en la primera parte.
Una vez realizado esto hacer as modificacones para el acceso a la Base de Datos, asi minimizareis los posibles fallos de vuestro codigo. Decirme algo.
13 de Enero del 2009 a las 11:37 pm
Hola isi, por defecto en joomla , cuando instancias el modelo desde una vista, solo puedes instanciar un modelo con el mismo nombre que la vista.
Esto a veces puede suponer un inconveniente, ya que puede resultar poco flexible.
Desde el controlador en cambio se puede instanciar cualquier modelo, tenga el nombre que tenga.
La solucion que yo empleo para esto es acceder al modelo mediante el controlador , luego instanciar la vista, pasarle los recordsets mediante assignRef y ejecutar el método display de la vista. Esta es la que creo que es la mejor solución.
El codigo para esto es (Desde el controlador) :
$view =& $this->getView('nombrevista','html'); //instanciar modelo que desees y obtener datos a un //recordset $view->assignRef('misDatos',$recordset); $view->display();Ahora en la vista misDatos tienes la informacion obtenida directamente del modelo que quieras sin la limitación del nombre.
Espero que te aclare las dudas.
Ahora estoy de examenes, cuando acabe espero actulizar el post poniendo los codigos fuente en ficheros ya que veo que estan dando muchos problemas a la gente, y añadiendo algo que pueda resultar interesante.
Saludos!!!
14 de Enero del 2009 a las 2:46 am
Muchas gracias Davis, me estaba volviendo loco con instanciar un modelo distinto desde la vista, pero ya me lo has aclarado todo.
Lo que no se muy bien es como hacerlo, porque si pulso en “Nuevo Mensaje” se ejecuta el codigo del default de la vista prueba:
index.php?option=com_prueba&view=introduceNuevo
y por lo tanto se va a la vista “introducenuevo”, ¿como debo hacer para que salte a un controlador o quizás tengo que llamar a otro método (llamado X) de la vista “introduceNuevo” que coga los datos del controlador y luego del modelo y le pase los datos a default?, es lo que se me ocurre.
Si me puedieras orientar te lo agradecería.
Saludos.
14 de Enero del 2009 a las 5:04 am
Hola de nuevo,
Yo en lugar de llamar a esta URL:
index.php?option=com_prueba&view=introduceNuevo
Llamaría a esta otra :
index.php?option=com_prueba&task=introduceNuevo
Fijate que he cambiado view por task.
La diferencia es que ahora vas a llamar a un task y en ese task va este código:
$view =& $this->getView('introduceNuevo','html'); //Aquí hay que instanciar el modelo que desees y //obtener datos $view->assignRef('misDatos',$recordset); $view->display();Es decir, ejecutas el método display de la vista directamente desde el task, y no debes de hacer redirect, ya que si redireccionas no se mostrará la vista
Espero que te sea de utilidad.
Saludos!
19 de Enero del 2009 a las 8:06 pm
Que más David, excelente trabajo y me encanta tu blog.
Felicitaciones, por acá paso a contarte que como complemento de este maravilloso tutorial he creado al más sobre el backend donde agrego la clase Table y el ToolBar, me encantaria que lo miraras y me contarás como lo vez, si voy por buen camilo y lo demás muchas Gracias por tu atención.
Link 1: blog.webprogramo.com/2009/01/17/como-crear-componentes-con-backend-en-joomla/
Link 2: http://blog.webprogramo.com/2009/01/18/tutorialcomo-crear-componentes-con-backend-en-joomla-ii/
3 de Febrero del 2009 a las 7:59 am
Buenos dias a todos.
estuve probando este tutorial, pero no logro hacerlo funcionar… Podria alguien enviarme un zip, a mi correo
arequipa2000@hotmail.com
19 de Febrero del 2009 a las 9:23 am
Acabo de cambiar el coloreador de código, el que tenía antes desvirtuaba todo el código, a ver si ahora hay menos problemas para seguir el tutorial.
Saludos!!
20 de Febrero del 2009 a las 8:30 am
Gracias por el tutorial David, bueno realmente.
26 de Febrero del 2009 a las 1:20 am
Hola David.
Ante todo, muchas gracias por el tutorial. Llevo tiempo trabajando con Joomla y no había visto antes un tutorial en español tan completo (generalmente está todo en inglés).
Al respecto, me gustaría hacerte un par (o tres) de comentarios:
1) En la creación del fichero XML, ¿es posible que se te haya colado algún “com_test” en lugar de “com_prueba”?
2) Yo había hecho componentes para Joomla 1.0 (por supuesto, sin seguir la arquitectura MVC) y en este tutorial (para la parte del back-end) echo de menos una cosa básica que le da un acabado de calidad a los components. Se trata de la gestión de los TOOLBARS (faltaría el correspondiente toolbar.prueba.php). ¿Lo has omitido por alguna razón? ¿Tienes información al respecto?
3) Ampliando la última pregunta ¿sería posible conocer las fuentes que has utiilizado para hacer este tutorial?
4) Es posible que, en cuanto tenga tiempo, me ponga a escribir un tutorial con un ejemplo práctico y al completo. Como no he encontrado qué tipo de licencia tiene este tutorial, me gustaría saber si tienes algún inconveniente en que pueda utilizar tu material (debidamente referenciado) para realizarlo.
Saludos cordiales
26 de Febrero del 2009 a las 10:47 am
Hola Jesus, la documentación la saqué de la documentación oficial de joomla.org y leyendo por los foros. Conrespecto a lo de los toolbars, no lo puse por que se estaba haciendo muy extenso el tutorial. Yo no uso el fichero toolbars.php, pongo llamadas a la función JToolbar directamente desde el view.
Con respecto a lo del xml, puede ser, voy a comprobarlo, jejejeje
Y Con respecto a lo de la licencia, puedes usar los contenidos siempre y cuando los enlaces debidamente, como has comentado.
Saludos y animo con ese tutorial, yo voy a ir escribiendo alguna cosilla del API de Joomla mientras….
5 de Marzo del 2009 a las 12:42 am
Buenas David!
Gracias por el tutorial, pero soy de los muchos que no consigue echar a andar la parte del backend.
Te agradecería que pusieras un zip con la estructura completa.
Si alguien lo tiene y me lo puede enviar por correo se lo agradecería (nolipuc@gmail.com).
Gracias!
10 de Marzo del 2009 a las 3:15 am
Hola, al igual que mis compañeros he seguido el manual y los post de correcciones pero no consigo hacerlo andar, si alguien tiene la estructura en un zip que me lo envíe a alfonso_list2@terra.es
Gracias
11 de Marzo del 2009 a las 10:04 am
me da error en la linea 17 del archivo controller.php
cuando estoy grabando un mensaje..
$modelo = $this-gt;getModel(‘pruebaAdmin’);
el mensaje es :
Fatal error: Call to undefined function getModel() in C:\Archivos de programa\Apache Software Foundation\Apache2.2\htdocs\Joomla\administrator\components\com_prueba\controller.php on line 17
Alguien puede ayudarmeee!!
Gracias!!
11 de Marzo del 2009 a las 10:49 am
Esta línea esta mal… lo ha puesto así el editor no se por que…
$modelo = $this-gt;getModel(’pruebaAdmin’);
Ya lo he modificado:
$modelo = $this->getModel(’pruebaAdmin’);
16 de Marzo del 2009 a las 12:56 am
Buenos días.
Me estoy iniciando en la programación de componentes joomla y este tutorial me está siendo de mucha utilidad.
Me he encontrado con el siguiente problemilla: cuando llamo de una vista a otra lo hago con:
index.php?option=com_nombrecomponente&view=nombrevista, y esto evidentemente funciona. Pues bien, si intento pasarle una variable url para que lo recoja el fichero default.php de la vista destino así:
index.php?option=com_nombrecomponente&view=nombrevista&var=valor, en la página destino esta variable no contiene nada.
La notación que utilizo para pasar variables url es la usual, por lo que no se qué está ocurriendo.
¿Alguien sabe el problema?
Muchas gracias.
16 de Marzo del 2009 a las 11:14 pm
Hola Patricia, pues eso que has escrito debería de funcionar, comprueba que estás recogiendo bien la variable con JRequest o con $_POST/$_GET, por que esto que has escrito está bien…
Saludos y suerte!!…
17 de Marzo del 2009 a las 2:08 am
Hola David, muchas gracias por contestar. Llevas razón, el problema lo tengo en cómo recojo la variable. Lo estoy haciendo con $variable, que es lo que siempre he hecho, una vez configurado en el php.ini el parámetro register_globals=On, pero no sé por qué ahora no funciona.
De todas formas, recogiéndolo con $_GET['variable'] funciona, así que de momento lo haré así.
Muchas gracias
17 de Marzo del 2009 a las 10:10 am
Saludos.
Lo primero, dar las gracias por este tutorial. Este Lunes me vi obligado a aprender a hacer componentes (por motivos laborales) y, sin tener ni idea previamente, hoy Martes ya he desarrollado dos caso por completo. Supongo que ayuda tener conocimientos de php. Realmente ha sido de lo mejor que he encontrado estos días
A pesar de todo, me ha dado problemas a la hora de usar el JTable. Cuando lo intentaba me daba un error de php indicando que estaba usando el método bind() de algo que no era un objeto. Finalmente lo he arreglado escribiendo la clase de la tabla en el archivo del modelo. No es precisamente lo mejor, pero ha funcionado, aunque me gustaría saber a que se puede deber el error.
El componente que estaba haciendo, naturalmente, es distinto, pero la estructura de directorios (salvo unos cuantos layouts de más que he creado yo) es la misma. No obstante me da la impresión de que no encontraba la clase table, o bien no la buscaba allí
Con el otro componente me ocurrió algo similar, pero esta vez con los modelos. Para que una vista instancie un modelo, he necesitado crear un modelo con el nombre de cada vista (eso si, sin sacarlos del directorio models)
A parte de esos dos fallos (ya corregidos, y que estoy seguro son mios por no seguir bien las instrucciones en algún punto), es un tutorial magnífico. Sobretodo porque sienta las bases para ir creando componentes bastante complejos
Muchas gracias por el esfuerzo
17 de Marzo del 2009 a las 11:47 am
Hola que tal Sr. David,, espero que este muy bien.
Solo queria darle las gracias por sus aportes a este mundo de Joomla, creo que ha sido de utilidad para muchos, me incluyo en esa lista!!
Saludos.
27 de Marzo del 2009 a las 11:51 am
Hola Davis, primero que nada quiero felicitar por todo el contenido de tu blog, es muy sorprendente tu trabajo.
Bueno tengo un problema con la creación de un módulo para joomla, trate de crear el back-end del modulo pero me sale este error
View not found [name, type, prefix]: pruebaadmin,html,pruebaadminView
No se exactamente donde estoy cometiendo el error ya que seguí todos los pasos que indicas en el artículo.
Espero me puedas aclarar porque me sale este error
Desde ya agradezco tu ayuda y me despido
Atentamente Luis
30 de Marzo del 2009 a las 8:25 am
Hola David,
Creo que ya es hora de agrader tan valiosa aportación, despues de haber usado tanto este blog.
Saludos y éxito!
3 de Abril del 2009 a las 5:01 pm
Hola! qué tal?
Me ha parecido muy bueno el tutorial, es un gran aporte y me ha sido muy útil, muchas gracias.
Yo tuve el mismo problema al utilizar el método bind() antes de insertar datos en la db:
$row =& JTable::getInstance(‘Cumpleanos’, ‘Table’);
if (!$row->bind($post)){
return JError::raiseWarning(500, $row->getError());
}
Restulta que no se creaba una instancia de la tabla que yo deseaba.
Solucioné el problema haciendo un
require_once(“Tables”.DS.”Cumpleanos.php”);
en el controlador del componente, justo después de
jimport(‘joomla.application.component.controller’);
llamando a la clase de la tabla que necesitaba utilizar. No sé si será la mejor forma pero por ahora no se me ocurre otro camino y ha funcionado correctamente.
Hasta pronto!
13 de Abril del 2009 a las 7:45 am
David. Muy bueno el tutorial y te felicito por lo facil y entendible que es.
De todas formas tengo 2 dudas sobre puntos que no mencionaste…
la 1º es para la realizacion de update y delete… como seria el procedimiento en esos casos???
y lo 2º como puedo utilizar otra bbdd que no sea el de joomla
Reitero mis agradecimientos por el tutorial y cualquier ayuda o comentario que pudiese resolver mis dudas
19 de Abril del 2009 a las 9:56 am
A mi me sale todo bien excepto la parte en que graba el registro, simplemente no hace nada como puedo hacerle un debug para correrlo linea a linesa?
24 de Abril del 2009 a las 1:08 am
Imagino que ya será un poco tarde, pero por si alguien más tiene dudas con el Update y el Delete…
El Update es exactamente igual que el Insert, utilizando el método store. El propio framework de Joomla hace las distinciones. Si no has introducido ningún valor al campo clave, hace un insert. Si el campo clave tiene un valor introducido, hace un Update.
Por ejemplo, si a una tabla con los campos “id, nombre”, solo le asignamos valor al campo nombre, Joomla hará un insert en la tabla. Si le asignamos valor al campo id, hará un Update.
Imagino, aunque no lo he probado, que si asignamos un id que no existe también hará un Insert, pero insisto, no lo he comprobado.
Para borrar datos (hacer Delete) hay un método de JTable llamado “delete” al que hay que pasarle como parámetro el identificador. Por ejemplo
$tabla->delete(4);
Esa instrucción borraría de nuestra tabla el registro con un id de valor 4.
Para tablas que no sean de Joomla, probablemente las funciones trabajarán igual mientras las tablas estén en la misma base de datos. Tampoco he probado, pero la base de datos en si misma no diferencia cuando una tabla es de Joomla y cuando no. En lugar de poner “#__tabla” habría que poner “tabla” sin más. Si eso falla, bastaría con cambiar el nombre de la tabla en la base de datos para que lleve el mismo prefijo que nuestras tablas de joomla.
Esto último no siempre es posible, o podría ser que quieras acceder a una tabla de una base de datos distinta. En ese caso no habría más remedio que abrir una conexión distinta con las funciones de php (no creo que el framework de joomla esté pensado para trabajar con varias conexiones distintas por si mismo).
Para ver más funciones de objetos de joomla, es bueno revisar esta página: http://api.joomla.org/
Allí hay un desplegable a la izquierda, casi todo lo que busquéis estará en la opción joomla framework.
Para hacer debug, si estás probando con un servidor al que tengas acceso o en uno local, prueba con depuradores de php. Por ejemplo Zend. En la propia página te explican cómo utilizarlo.
29 de Abril del 2009 a las 7:39 am
Hola David, felicidades por el blog.
He estado un poco vuelto loco con la creación del componente en back-end, espero que por fin puedas subir los ejemplos en un .zip creo que serian de gran ayuda para todos.
Muchas Gracias
6 de Mayo del 2009 a las 9:10 am
Hola a todos,muy bueno,excelente el tutorial, yo seguí los pasos al pide de la letra,pero me surgieron dudas en el medio de este. he hecho algunos cambios de acuerdo a lo que han dicho otros participantes y sigo obteniendo el error. si alguien lo tiene funcionando por favor enviarmelo a mi email. alvagar@gmail.com Gracias de antemano
7 de Mayo del 2009 a las 7:00 am
Hola Buen dia. Ya pude poner a funcionar el ejercicio correctamente, era cuestion de acododar los metodos que no estaban bien claron en donde debian de ir, en la clase adecuada. sumandole a la anotacion que dio sebas.
si necesitan .zip escribame a mi mail. alvagar@gmail.com
11 de Mayo del 2009 a las 4:33 pm
Hola David! Excelente Articulo y excelente redaccion, felicitaciones.
Pude realizar el ejercicio sin problema. Solo tuve que modificar en default.php de la vista introduceNuevo el y ponerlo al final para que pueda hacer el submit y funciona perfecto.
Muchas Gracias.
Max
New Zealand
20 de Mayo del 2009 a las 11:21 am
Hola. Estoy creando componentes joomla, y desde aquí intento usar la librería FPDF para generar documentos pdf. Tengo un problema, y es que el código, que en principio es correcto ya que funciona en un programa php, al integrarlo en el componente joomla no megenera el pdf correspondiente. ¿Alguien sabe si hay problemas al integrar esta librería en joomla?¿O si hay que tocar algun fichero de configuración de joomla?
Gracias
21 de Mayo del 2009 a las 2:00 am
Deberás de usar el tipo de vista RAW, ya que fpdf envía cabeceras , y si ya se ha enviado algo en la petición, generará un error, yo he trabajado con esa librería en Joomla y i que me ha funcionado, así que funcionar tiene que funcionar…
Saludos
21 de Mayo del 2009 a las 2:05 pm
David, ¿podrías darme algo de información, o decirme dónde puedo encontrarla, sobre las vistas raw? Estoy un poco perdida en ese tema.
Gracias
23 de Mayo del 2009 a las 5:39 pm
Muy bueno el tutorial, me parece bastante sencillo y expedito….
pero a la vez tengo una consulta…
de que forma puedo hacer que una vista utilice dos modelos (el propio de la vista y otro anexo)
porq con la linea de codigo
$model =& $this->getModel();
llama a su propio modelo de datos…
pero si quisiera llamar a un segundo modelo total mente distinto…
¿como seria?
24 de Mayo del 2009 a las 2:09 pm
Hola David, respecto a mi pregunta anterior, ya he encontrado la solución: las vistas de tipo raw son llamadas a ficheros .php que no forman ninguna vista siguiendo el patrón MVC. Ya consigo generar ficheros pdf desde los componentes joomla.
Gracias
28 de Mayo del 2009 a las 9:22 am
Hola a todos, yo no soy de esos que dicen que el tutorial es cojonudo(aunque lo piense ;-D)… en fin yo tb tube el problema del error 500 View not found [name, type, prefix]:?? pruebaadmin,html,pruebaadminView y me he inchado a probar combinaciones de mayusculas y minusculas. el caso es que al final lo tengo todo en minusculas (excepto el View, Model y Controler) pero creo que lo que ha hecho desaparecer el error es cabiar el nombre del fichero views.html.php que esta en
\joomla1.5.9\administrator\components\com_prueba\views\pruebaadmin
por view.html.php (sobraba la s)
gracias david. y espero esto sirva a alguien mas
28 de Mayo del 2009 a las 10:32 am
Hola arrayman, gracias por comunicarme el error, ahora mismo lo corrigo
30 de Mayo del 2009 a las 10:45 am
Hola que tal, bueno primero quiero felicitarte tambien por este tutorial ya que justo estos dias me pidieron hacer algo en Joomla y no tenia ni idea de como hacerlo, pero bueno con esto ya se me aclaro todo hehe..
arrayman: A mi tambien me salio el error de que no encontraba la vista, bueno felizmente tuve suerte y vi que el error estaba en:
/views/pruebaAdmin/tmpl/default.php
En el atributo “href” del link “Nuevo Mensaje”, lo que pasa es que hay un espacio antes del index.php:
href=” index.php?opt…”
…borrando ese espacio se soluciona todo.
Bueno.. gracias d nuevo David por este tutorial, hasta el momento me ha gustado como esta explicado todo, ahora si me pondre a hacer lo que me pidieron ^^.
Saludos
Paulo
2 de Junio del 2009 a las 12:18 pm
hola david excelente tu blog…. solo que el segúndo ejemplo no me funciona pues no veo el código del punto de entrada y del controlador.
agradezco tu ayuda
2 de Junio del 2009 a las 5:08 pm
El punto de entrada y el controlador se hace igual que se explica en el tutorial anterior, donde se hace un componente para front-end, la mecánica es la misma, no lo puse por que el tutorial se estaba alrgando mucho y esa información ya estaba en el tutorial anterior, y era repetir información. a ver si este verano pongo el código del ejemplo… saludos!
5 de Junio del 2009 a las 1:05 am
Hola david, antes que nada muchas gracias por publicar este tipo de tutoriales.
Bueno te comento que trate de implementar este modelo pero de la forma front end, y puedo ver la vista donde se enlista los datos capturados, asi como el link que me lleva para introducir nuevos datos y se ve bien el formulario el problema esque cuando intento introducir nuevos datos me manda el siguiente error
Call to a member function bind() on a non-object in
no se a que se deba, no se si tengo que importar algo para la usar la clas jtable, te agradecieria mucho si me puedes ayudar.
saludos
9 de Junio del 2009 a las 6:43 am
Hola David… primero, te felicito por tu tutorial… es genial… no lo he llevado a la practica aún, pero si lo he observado y he sacado algunas cosas útiles, y me es muy practico, ya que uso Jumi para colocar código en joomla! + Dreamweaver para ahorrarme algunas tareas de código, jejeje, pero al igual “del porque” no me he metido a trabajar creando componentes, es por la casi nula documentación sobre la API de Joomla! 1.5 en español.
¿tendrás alguna documentación util para poder leer en español?
Mientras tanto, necesito comprobar si el usuario está logeado o no… me podrías ayudar en eso.. please
9 de Junio del 2009 a las 7:34 am
Hola Magallánico, es muy sencillo, simplemente así:
$user =& JFactory::getUser();
if ($user->guest) {
echo “No estás logueado”;
} else {
echo “Si estas logueado.”;
}
Saludos!!
11 de Junio del 2009 a las 1:42 pm
hola david te felcito por el tutorial, quiero hacer un componente para gestionar eventos pero no se como empezar, e seguido tu tutorial paso a paso pero el segundo componente me da error podrias poner el componente en un zip para descargarlo te agradeceria ya que esto es para mi tesis
12 de Junio del 2009 a las 1:38 am
Hola Mariana, en cuanto acabe los exámenes subo el zip, la verdad es que lo debería de haber subido en cuanto hice el tutorial, pero se me pasó.. lo siento…
Saludos
15 de Junio del 2009 a las 7:53 am
por favor sube el zip
18 de Junio del 2009 a las 5:51 pm
hola este post esta bueno aunq veo q le falta un poco mas en las referencias del codigo yo aun estoy dando vueltas dond colocar sierto codigo como esta parte
function introduceMensaje(){
$option = JRequest::getCmd(‘option’);
$modelo = $this->getModel(‘pruebaAdmin’);
$res = $modelo->introduce(JRequest::get(‘post’));
if($res == 1){
$this->setMessage(‘Mensage introducido!’);
$this->setRedirect(‘index.php?option=’ . $option. ‘&view=pruebaAdmin’);
}else{
$this->setMessage(‘Error al introducir!’);
$this->setRedirect(‘index.php?option=’ . $option. ‘&view=Error’);
}
}
yo lo pongo luego de var $datos; en el archivo pruebaAdmin.php q esta en el models
a mi me sale este error
Fatal error: Class ‘pruebaController’ not found in C:\wamp\www\administrator\components\com_prueba\admin.prueba.php on line 15
q corresponde en la parte dond se crea una nueva clase $controller = new $classname( );
esta parte no c dond ponerlo
if($res == 1){
$this->setMessage(‘Mensage introducido!’);
$this->setRedirect(‘index.php?option=’ . $option. ‘&view=pruebaAdmin’);
}else{
$this->setMessage(‘Error al introducir!’);
$this->setRedirect(‘index.php?option=’ . $option. ‘&view=Error’);
}
veo q no mensionan los archivos de la carpeta error no c si pueden poner en un zip la estructura ya que me gustaria ver en q me equiboco para llebar paso a paso y comprender mejor ahorita tendo dias viendo el codigo y lo que veo q esta bien q lo expliquen pero talvez seria bueno tambien q pusierna como queda cada archivo por q por pedasos hay momentos q se habla de otro archivo y ahi es dond ya no c dond poner el codigo d antemano gracias
18 de Junio del 2009 a las 5:55 pm
otra cosa felicidads est por este aporte esta muy bueno ha sido el mejor q he encontrado para explicar como funciona joomla ya que casi no hay mucha informacion o yo no he encontrado gracias espero resuelvan inquietuds
19 de Junio del 2009 a las 3:40 am
Hola David.. Primero que nada, felicitaciones por tu blog y por este post, que realmente es de bastante ayuda para quienes nos iniciamos en el desarrollo con Joomla!.
Tengo unas dudas acerca de por que no me funciona correctamente el componente para el Back-End. El primer componente para el Front-End Funciono a la perfección.
Pero luego de revisar el codigo minuciosamente encuentro, que después de cargar la primera vista donde se muestren los mensajes, tuve un problema pero lo resolvi. No me leia la tabla de la Base de Datos, entonces cambie la sentencia SQL del modelo:
asi:
$query = ‘ SELECT * ‘
. ‘ FROM jos_prueba ‘;
debido a que con: #__prueba no funcionaba, pareciera que no estuviera funcionando bien la API de Joomla.
El otro Problema y aun no resuelto, es que al cargar el layout de introduceNuevo, el formulario parece no enviar la data, o el controlador no la recibe o existe un error en el modelo en la función introduce, no estoy seguro por que no logro insertar un nuevo mensaje en la tabla. Creo que el objeto Jtable funciona correctamente, mas no se si es de nuevo El API de Joomla! el que no deja insertar en la tabla.
En cualquier caso, Agradezco enormemente lo que has publicado y en la medida posible en lo que me puedas ayudar.
Gracias.
Dave Rojas.
19 de Junio del 2009 a las 12:28 pm
@markechon y @Dave, cuando acabe los exámenes que estoy haciendo ahora (en una semana), realizaré el componente y subiré los ficheros. Además revisaré el post que puede que el editor asqueroso WYSIWYG de Wordpress se haya comido algo al limpiar el código HTML.
Un saludo a todos.
29 de Junio del 2009 a las 1:11 pm
hola david. muy bueno el tutorial que nos dejaste. Pero tengo una pregunta. Este mismo sirve para Front-end???
29 de Junio del 2009 a las 2:08 pm
hola david. A la pregunte que hice anteriormente, si sirve para front-end. pero tengo un problema, es que en el enlace que dice con url que tiene index.php?option=com_prueba&view=introduceNuevo
El navegador me dice que no encuentre ese archivo. ¿Cual será la causa?. ¿Que tengo mal?
29 de Junio del 2009 a las 2:10 pm
hola david. A la pregunte que hice anteriormente, si sirve para front-end. pero tengo un problema, es que en el enlace que dice (Nuevo Mensaje) con url que tiene
index.php?option=com_prueba&view=introduceNuevo
El navegador me dice que no encuentre ese archivo. ¿Cual será la causa?. ¿Que tengo mal?
Salio mal el mensaje anterior en el post.
29 de Junio del 2009 a las 2:15 pm
problema resuelto.
No me había fijado que otra persona ya había realizado la misma pregunta en el post. jejeje
Gracias
29 de Junio del 2009 a las 3:29 pm
Esta misma duda le sucedió a un amigo en el post y me sucede también.
Saludos David. tengo una duda sobre este componente para backend… Por qué no funciona si lo hago para backend? (o sea fuera de administrator/components)… Me aparece el error:
“Fatal error: Call to a member function bind() on a non-object in …\sitioweb_joomla\components\com_buscajosep\models\buscajosep.php on line 22″. Esperaré una pronta respuesta. Gracias por tu atención.
30 de Junio del 2009 a las 5:46 am
Hola David… te pasaste, me sirvio de mucho tu ayuda..
Ahora vengo por mas…
necesito hacer una lectura a una tabla.. pero no doy con el código en Joomla! (como te decía por lo de la documentación) para iniciar la lectura de una tabla y leer el campo de un registro..
Eso es todo.
Gracias
30 de Junio del 2009 a las 7:38 pm
Sinceramente… no he conseguido obtener los datos de una tabla mediante la API de Joomla!, para usar con JUMI.
Si saben me avisan.
Gracias
30 de Junio del 2009 a las 9:20 pm
…bueno, he logrado leer la tabla y obtener los datos de cada fila… lo que NO me ha funcionado es el método getNumRows() para obtener el total de filas. Estoy usándolo de esta forma:
setQuery( $query );
$database->loadObject( $datos );
$cuantos = $database->getNumRows();
?>
¿Porque me lanza este error:
“Warning: mysql_num_rows(): 90 is not a valid MySQL result resource”…
Espero tu ayuda
Gracias.
1 de Julio del 2009 a las 11:35 am
Hola amigos del foro.
Pensando en la necesidades de todos y en las ansias de conocimiento, quiero tomar la iniciativa y de proponer una comunidad de desarrollo de Joomla, ya sea para personas con conocimiento o con ganas de aprender.
La manera que se me ocurre sería teniéndonos como contacto en el msn o google talk. Por favor comuniquen su correo en este foro y agreguen a los que ya lo han comunicado.
De antemano, muchas gracias a David por compartirnos este tutorial y espero que él también se una y nos colabore con nuestras dudas.
Les dejo mi correo, eldafec@hotmail.com
PD: David ayúdame con la inquietud que tengo en el post mas arriba.
2 de Julio del 2009 a las 8:19 pm
David quisiera saber si tienes un componente básico de varias vistas con acceso a dato que me puedas facilitar de guía para uno que estoy haciendo, el problema es que con mas de una vista no me funciona, estoy tutorando una tesis sobre joomla 1.5.9 y no quiere correr ningún componente de mas de una vista…
Salu2 y gracias desde ahora…
7 de Julio del 2009 a las 7:56 am
Solo quisiera ver si tienes un ejemplo de componente en donde uses varias instancias, es decir mas de un controlador
gracias
21 de Julio del 2009 a las 3:25 am
buenos dias David:
antes de nada darme mi mas sincera enhorabuena por este manual, que la verdad que me ha servido de mucho a la hora de iniciar en el mundo de la programacion para joomla.
cuando añado mi componente a joomla me da el siguiente error:
500 – Se ha producido un error
View not found [name, type, prefix]: prueba,html,pruebaView
la verdad q no tengo ni idea de porque es, si podeis ayudarme alguien estaría muy agradecido.
por otro lado, si tienes el componente escrito en un archivo .zip colgado de algun sitio también me gustaria conocerlo, sino es mucho pedir.
de nuevo muchas gracias por todo, y sobretodo por este manual, y a los que me ayudeis lo mismo os digo.
un saludito a todos
24 de Julio del 2009 a las 3:05 pm
Ramiro, me parece q el problema que reportas se debe a que en alguno de los archivos “view.html.php” no has iniciado con
David, quiero felicitarte por el estupendo trabajo que has hecho con este tutorial, que me ha animado a crear un par de funcionalidades para mi sitio web en joomla.
Gracias por tu dedicacion y estaremos pendientes de tus publicaciones. :-D
24 de Julio del 2009 a las 3:06 pm
Ramiro, me parece q el problema que reportas se debe a que en alguno de los archivos “view.html.php” no has iniciado con “”
3 de Agosto del 2009 a las 7:44 am
Hola tengo una duda, estoy haciendo un componente para operar con tablas y me salto una duda.
El metodo delete de jtable me va bien con tablas cuando su clave primaria tiene un campo, pero… ¿si tiene mas de 1 funciona?
3 de Agosto del 2009 a las 7:46 am
Ups se me olvido decir el metodo xD, el metodo delete para borrar filas de tablas. No se como pasarle el parametro cuando la clave primaria tiene mas de 1 campo
5 de Agosto del 2009 a las 1:28 pm
Hola a todos. Creo que algunas personas (como yo) tuvieron problemas con un error en la funcion bind. Bueno, para solucionar el error tienen que hacer algo muy sencillo, en el archivo “models/pruebaadmin.php”, busquen la siguiente linea:
$row =& JTable::getInstance(‘mensajes’, ‘Table’);
Y a la Palabra “mensajes” quitenle la s para que quede “mensaje”, asi:
$row =& JTable::getInstance(‘mensaje’, ‘Table’);
Con eso el error bind se va. Por cierto, gracias a la gente que ha comentado, me han ayudado a arreglar el código que aunque es muy bueno, tenía ciertos errores muy pequeños que me estaban rompiendo la cabeza. Y Gracias a ti tambien David, este tutorial realmente me explico “molidito” como hacer componentes, por cierto, unico en español en toda la red (segun Google).
6 de Agosto del 2009 a las 12:49 pm
Viejo, muy bueno el tutorial, todo me funciono a la perfección. Necesito hacer una aplicación y pues en un comienzo estaba pensando en incorporarla a joomla por medio de un wrapper, pero con este tutorial, creo q me voy a arriesgar a hacerla como un componente, y de una vez aprovechar el manejo de usuarios con el community builder.
Muchas gracias.
24 de Agosto del 2009 a las 4:17 pm
Hola a todos los amigos frustados quee no pueden hacer funcionar el componente… bueno yo estuve 2 dias renegando con el mismo y por fin lo pude hacer andar asi que lo comprimi en rar y se los subi a este link http://www.megaupload.com/?d=2S3EL2HM
Gracias David por el tutorial
1 de Septiembre del 2009 a las 3:46 pm
Hola, lo primero muchas gracias por el tutorial, está genial.
Yo tengo un problemilla con un componente q estoy tocando, para hacer un listado. La cosa es que todo funciona bien menos una cosilla en la administracion. Cuando le doy a meter un nuevo registro relleno los datos y todo bien, y el problema es que cuando le doy a Guardar, me inserta bien los datos en la bd pero en vez de redirigirse a la vista del componente y mostrar todos los registros se va al index del backend, es decir me desconecta el usuario. me vonecto y voy al componente otra vez y el registro esta guardadado correctamente. Sin embargo el botón cancelar si que me redireccionacorrectamente, y el setRedirect es igual tanto en el cancelar como en el guardar.
$this->setRedirect( ‘index.php?option=com_ccbrokerage’, $msg );
Alguien me puede echar una mano con ese fallo?? porq no encuentro el problema.
un saludo
9 de Septiembre del 2009 a las 9:51 am
He llevado a cabo el tutorial, por cierto David, un millón de gracias.
Todo ha ido bien, además he añadido la vista Error. Para quien quiera echarle un vistazo:
http://rapidshare.com/files/277575728/com_prueba.zip
Un saludo.
10 de Septiembre del 2009 a las 4:51 am
Muchas gracias Rafa por el aporte, voy a probarlo y a ponerlo como descarga al inicio del tutorial.
Un saludo!!
14 de Septiembre del 2009 a las 11:01 pm
perfecto tutorial pero faltaria un ejemplo de como actualuzar y eliminar registros de una base de datos pero esta muy bien pero con esto que pido seria una enorme base para los nuevos dearrolladores de componentes que somos nuevos en joomla
16 de Septiembre del 2009 a las 11:21 am
Hola smallsof, en este ejemplo se eliminan y se actualizan registros… leelo detenidamente.
Un saludo y gracias!!!
16 de Septiembre del 2009 a las 11:23 am
Muchas gracias a @arkangel75ar y a @RafaParadela por el aporte subino el código del ejemplo.
Saludos!!
22 de Septiembre del 2009 a las 8:44 pm
exelente tutorial, si podrian hacer algo para ayudarnos a manejar la subida de archivos con el JFile a carpetas defidas en un componente y al mismo tiempo manejar el JTable para la Base de datos la verdad me pierdo algo tratando de manejar estos dos en un trabajo conjunto
6 de Octubre del 2009 a las 4:37 pm
Excelente tutorial, muy didáctico. Muchas gracias David. Saludos desde Perú.
8 de Octubre del 2009 a las 3:53 pm
Segun el tutorial para las clases en el modelo o vista es Nombrecomponente+view+nombrevista sin embargo veo que en los nombres de las clases los tienes con mayuscula al principio de cada palabra.
Esto no sera un problema en servidores linux por las mayusculas y minusculas?
24 de Octubre del 2009 a las 10:02 am
hola no puedo descargar el com prueba de rapidshare me dice esto “This file is neither allocated to a Premium Account, or a Collector’s Account, and can therefore only be downloaded 10 times.
This limit is reached.
To download this file, the uploader either needs to transfer this file into his/her Collector’s Account, or upload the file again. The file can later be moved to a Collector’s Account. The uploader just needs to click the delete link of the file to get further information.
”
por favor si me lo pueden enviar a mi correo
es
jio325@gmail.com
27 de Octubre del 2009 a las 12:10 pm
Hola David,
He seguido tu ejemplo pero obtengo este mensaje:
500 – Se ha producido un error
View not found [name, type, prefix]: pruebaAdmin,html,pruebaView
Esto me pasa al poner como url:
administrator/index.php?option=com_prueba&view=pruebaAdmin
Que puede ser?, espero que me ayudes..
Millon gracias
27 de Octubre del 2009 a las 1:30 pm
Hola a todos,
El que tenga el codigo de este ejemplo, por favor que lo ponga en algun sitio para descargar. Tengo muchos problemas con el ejemplo…
Millon gracias de antemano.
29 de Octubre del 2009 a las 8:45 pm
bueno amigo empeze a leer los comentario y en los comentarios alguien subio el ejemplo a megaupload
y esta es la direcciion
http://www.megaupload.com/?d=2S3EL2HM
5 de Noviembre del 2009 a las 6:29 pm
llegastes a publicar el tutorial de Google Maps con joomla? Un slaudo
5 de Noviembre del 2009 a las 7:56 pm
No, está pendiente, como un montón de artícuos que tngo pensado escribir, cuando tenga tiempo ire escribiendo…
6 de Noviembre del 2009 a las 10:18 pm
David, tengo una duda, me e fijado que hay varios componentes que en las vistas tienen mas de un php,
por ejemplo:
com_prueba->view->prueba->tmpl->default.php
com_prueba->view->prueba->tmpl->agregar.php
pongo agregar porque yo quiero incorporar los botones (addNew, editList,delete) pero no quiero separarlos por vistas, mi pregunta es como puedo hacer para llamar a default o agregar dependiendo del boton que presiones??
de antemano agradesco y tus tutoriales me an servido bastante en el mundo de joomla
7 de Noviembre del 2009 a las 6:57 am
La ruta de los ficheros que has indicado es la de los diferentes templates que puede tener una vista. Para acceder a default simplemente usa la URL index.php?option=com_prueba&view=prueba, para acceder al template agregar, tendrás que crear el fichero default_agregar.php en la carpeta tmpl y usar la URL index.php?option=com_prueba&view=prueba&tmpl=agregar.
Espero que te sirva, un saludo!!
9 de Noviembre del 2009 a las 11:06 am
espero el tutorial de google maps en joomla con impaciencia! Gracias por este completo tutorial de fabricacion de componentes.
25 de Noviembre del 2009 a las 2:54 am
Saludos gente, de verdad que está muy bueno este tutorial. Tengo la siguiente duda: Deseo desarrollar un plugin que me permita integrar el easySlider 1.7 de jQuery a Joomla 1.5 y que éste sea lógicamente configurable con ciertos parámetros, por ejemplo los estilos y la carpeta de las imágenes. ¿Cuál sería más o menos la estructura de ese plugin? Gracias de antemano…
25 de Noviembre del 2009 a las 5:17 pm
Hola.
bueno agradecerte de nuevo el tutorial, me vino de perlas para no colocar por todos lados insert y update. ;)
Por otro lado y con tu permiso me permito contestar a kreikol, aunque un poco tarde…
A mi me paso lo mismo cuando colocaba ¡ en esta linea del php del controlador:
…
if($res == 1){
$this->setMessage(‘¡ok!’);
…
el ¡ primero del ¡ok! es el que me daba problemas… me guardaba pero me desconectaba el usuario, si alguien lo puede explicar bien, si no pues no colocando el ¡ despues del ‘ todo solucionado.
Un saludo a todos.
5 de Diciembre del 2009 a las 4:48 pm
david:
solucione mi problema, me ayudo lo que dijiste y tambien puede funcionar de la siguiente manera
function display($tpl = null){
global $mainframe;
$filtro =$mainframe->getUserStateFromRequest( $option.’filtro’, ‘filtro’, ‘Pendiente’);
$model =& $this->getModel();
if ($filtro==’Bloqueado’){
$mensaje = $model->ListadoBloqueadas();
$this->assignRef(‘row’,$mensaje);
$tpl=’agregar’;
}
donde $tpl hace que vaya a default_agregar.
ahora mi duda es como puedo crear multiples controler y como los llamo a cada uno.
7 de Diciembre del 2009 a las 3:15 pm
Excelente tutoria.
8 de Enero del 2010 a las 9:07 pm
Hola a todos.
David muy buen blog, te felicito sinceramente, de verdad que el tiempo que le dedicas para ayudar a los que estamos empezando es muy apreciado. El primer ejemplo del componente me salió perfecto y en el segundo realizando los cambios que citó Sebas:
Para crear el controlador en el modelo:
$classname = ‘pruebaAdminController’.$controller;
Y en el controller.php el class debe ser:
class PruebaAdminController extends JController
con estos cambios que agradezco a Sebas haber publicado tambn funcionó.
Quiero también colaborar con un .zip del componente para quien quiera revisarlo, incluye la vista error funcionando. Un saludo a todos y mil gracias.
http://www.megaupload.com/?d=FPO0FC33
9 de Enero del 2010 a las 7:53 am
Muchas gracias gabriel… se agradece el zip. Un saludo!
18 de Enero del 2010 a las 7:24 pm
Hola, tenia un pequeño problema con la declaración:
$res = $modelo->introduce(JRequest::get(‘post’));
Me aparecía un mensaje de error al tratar de introducir un nuevo mensaje, algo referente a que no podía encontrar la declaración del método introduce(). En mi desesperación, reemplacé el código que escribí siguiendo este tutorial por el zip subido por Gabriel. Así que ya perdí la pista de dónde declaro el método introducce… esa es mi pregunta, ¿en dónde se declara?
22 de Enero del 2010 a las 4:16 pm
Gracias David.
No he probado el componente, he usado el tutorial para entender la estructura y el funcionamiento y la verdad, ha quedado muy claro.
Muchas gracias.
23 de Enero del 2010 a las 5:05 am
Me alegra mucho que te haya servido… ;)
23 de Enero del 2010 a las 5:05 am
Simplemente tengo que decirle que su explicacion es una bendicion, gracias por aportan sus conocimientos a la comunidad.