Puente Zubizuri Bilbao

Componente personalizado para Joomla

Con el desarrollo de este componente se podrá implementar en Joomla cualquier aplicación imaginable.

Puedes crearlo aquí con lo mínimo requerido si prefieres cambiarle el nombre. Copia después la personalización.

Si antes de leer esto prefieres probarlo directamente te lo dejo aquí-> COMPROD-JOOMLA5.zip.

El punto de entrada del componente, en su raíz, está el archivo prod.php del que no hay que explicar mucho. Simplemente lo que hace es cargar el controlador y ejecutar el método que queramos cuando escribimos la url en el navegador, dependiendo del valor de task se ejecutará un método u otro: index.php?option=com_prod&task=getProd

Si clicaste en el enlace anterior verás que la url es "componente/task/getProd". Esto está configurado en el archivo .htaccess: RewriteRule ^componente/task/(.*)$ index.php?option=com_prod&task=$1 [NC,L]

punto de entrada del componente

components/com_prod/prod.php
    
$controller = 'cProd'; //nombre del controlador
$path = JPATH_COMPONENT.'/controllers/'.$controller.'.php'; //ruta
$input = Factory::getApplication()->input;  
require_once($path);  //lo cargamos
$classname = 'ProdController'.$controller;
$controller = new $classname();  //instanciamos la clase
if($input->get('task') !=='')
  {$task = $input->get('task');}
  else {$task = 'default';}
  //y ejecutamos el método elegido
$controller->execute($task); 
  

controlador

Usaremos el patrón de diseño MVC (MODELO, VISTA, CONTROLADOR)

En el controlador creo un método public function getobjDatos() que devuelve un objeto que quiero propagar por todo el componente para así, tener acceso a sus propiedades en la vista y en el modelo.

 components/com_prod/controllers/cProd.php 
public function getobjDatos() {
$urlbase = JUri::base();
$language = JFactory::getLanguage();
$obj = new \stdClass();
 $obj->dbname = "tu-base-de-datos";
 $obj->dbuser = "usuario-bbdd";
 $obj->dbpass = "password-bbdd";
 $obj->server="localhost";
 return $obj;
}

Analicemos el método al que llamamos por url task=getProd. Ten en cuenta que, en el CONTROLADOR, incluimos el modelo: require_once (JPATH_COMPONENT.'/models/mProd.php');  

   public function getProd(){ 
   //instanciamos la clase del modelo
  $clase = new ProdModelMProd(); 
  //creamos la variable $getProd
  $getProd=$clase->getProd($this->getobjDatos()); 
  //incluimos la vista
 require_once ($clase->getview('GetProd'));
 }
  

Como puedes ver, creamos una variable $getProd con el valor de lo que devuelve el método getProd($this->getobjDatos()) del modelo al que pasamos como argumento el objeto que devuelve getobjDatos()

Por último incluimos la vista en la que tenemos acceso a la varible $getProd que hemos creado y que, como verás más adelante, es un objeto.

en el MODELO tendremos toda la lógica de negocio

Veamos como obtengo la ruta de la vista dependiendo de si la llamamos por url o en el controlador

Primará la vista que llamemos por url: componente/task/getProd?vplay=category, antes que la que tenemos en el controlador: require_once ($clase->getview('GetProd'))

 components/com_prod/models/mProd.php
 public function getview($viewParam)
    {
        $input = Factory::getApplication()->input;  
        if ($input->get("vplay") == "") {
            $view = $viewParam;
        } else {
            $view = $input->get("vplay");
        }
        $VPATH = JPATH_COMPONENT . "/views/v" . $view . ".php";
        return $VPATH;
    }

Ahora vemos nuestro método que llamamos por url: task=getProd

 public function getProd($objDatos)  {
   $obj = new \stdClass();
   $obj->urlbase = $objDatos->urlbase;
   $obj->getContent = $this->getContent($objDatos);
        return $obj;
    }

Como vemos, devuelve un objeto que es el valor de la variable $getProd del controlador. Así, en la vista podemos tener acceso, por ejemplo, a la propiedad urlbase: $getProd->urlbase

Veamos la propiedad getContent del objeto:
$this->getContent($objDatos) que es el retorno de otro método del modelo: public function getContent($objDatos).

En este método lo que hago es un query usando PDO. Te preguntarás por que no utilizo los queries de Joomla y la respuesta es que así puedo trasladar todo el componente a cualquier framework en php con las mínimas modificaciones.

Podemos comprobar que esta estructura es escalable cien por cien ya que, podemos crear múltiples métodos en el modelo y asignar sus valores a propiedades del objeto que devuelve getProd($objDatos) con lo que tendríamos acceso a todas esas propiedades en la vista.

por último, tenemos la VISTA

En la vista tenemos acceso a todas las funcionalidades del modelo, por ejemplo, podemos tener una lista de los títulos de nuestros artículos:

components/com_prod/views/vGetProd.php
foreach($getProd->getContent as $ar){
	print_r($ar->title);	 
}
Inicio
Home
Política de privacidad
Desarrollo Joomla en Bilbao
Componente personalizado para Joomla 5
wordpress
Diseño de Prestashop en Bilbao
Profesional SEO en Bilbao

Y esto es todo. Espero que hayas disfrutado y tengas otro punto de vista de mi CMS preferido.

© 2023 AppWebBilbao Joomla 5 software