Plugins

Instalación de plugin básico

pluginPara esta práctica necesitamos tener conocimientos avanzados de Php y Mysql. Bájate el plugin desde aquí >> downloads/plg_vacio.zip e instálalo como una extensión más. Ahora vas a Extensiones -> gestor de plugins -> plg_vacio  y lo activas.

Un plugin simplemente añade funcionalidades a nuestro sitio: Enviar correos, mostrar botones en artículos y lo que imaginemos. El que hemos instalado está en el directorio plugins -> content -> plg_vacio y como ves sólo tiene dos archivos el xml y el plugin en sí.

Funcionamiento

  Edita plg_vacio.php y verás una función   public function onContentPrepare($context, &$row, &$params, $limitstart)  que se ejecutará antes de que el artículo se imprima en la pantalla y modificará lo que quieras del artículo: el título, el contenido, etc.

Está llena de comentarios para que veas un poco qué puedes mostrar (todo lo que imagines) , pero lo que nos interesa es hacia la línea 52:

 if($context == 'com_content.article'){
             $row->title = "título modificado";
            }                                                                      

 Con esto hemos modificado el Título del artículo. Prueba a poner    $row->title = "título modificado".$row->title; 

Puedes modificar el contenido:    $row->text = "<p>Párrafo antes del contenido</p> ".$row->text;  El resto lo dejo para tu imaginación.

public function onContentBeforeDisplay($context, &$row, &$params, $limitstart)

Esta función se dispara antes de imprimir el contenido del artículo y podemos añadir lo que queramos:

 return sprintf($this->_titulo, '#FF4A00', 'Evento onContentBeforeDisplay');  Podemos ver qué ocurre si ponemos return $row->title;

 public function onContentAfterDisplay($context, &$row, &$params, $limitstart) Esta función se dispara justo después de mostrar el contenido del artículo.

MVC

Vamos a complicar un poco esto. Añade a la carpeta plugins->content->plg_vacio los archivos:

  (Guarda una copia de plg_vacio.php y pegas el contenido del nuevo archivo)

plg_vista.php  helper.php   plg_vacio.php
<?php  
 foreach($comment as $c){
  $row->text =   $c->date . $row->text;
 }
?>
 <?php  defined('_JEXEC') or die;

class plgHelper{

  public function getResult(){
      $db =& JFactory::getDBO();
      $theurl = $_SERVER["REQUEST_URI"];    
      $query = "SELECT id,itemid,comment,date  
                     FROM #__comments WHERE uri = '$theurl' ORDER BY id DESC ";
                     $db->setQuery($query);
                     $datos = $db->loadObjectList();
                     return $datos;
  }

}
?>
 <?php
defined('_JEXEC') or die;
 define(DS,"/");
require_once dirname(__FILE__).DS.'helper.php';

class plgContentPlg_vacio extends JPlugin
{
    public function __construct(&$subject, $config)
    {
        parent::__construct($subject, $config);

    }

    public function onContentPrepare($context, &$row, &$params, $limitstart)
    {  
    
       $clase = new plgHelper();
       $comment = $clase -> getResult();
       if($context == 'com_content.article'){
  require_once dirname(__FILE__).DS.'plg_vista.php';
            }
    }

    public function onContentBeforeDisplay($context, &$row, &$params, $limitstart)
    {
        // return sprintf($this->_titulo, '#FF4A00', 'Evento onContentBeforeDisplay');
        
    }
 
 
    public function onContentAfterDisplay($context, &$row, &$params, $limitstart)
    {
           // return sprintf($this->_titulo, '#1C9202', 'Evento onContentAfterDisplay');
    }
 
}

 Bueno... lo único que he hecho es utilizar de alguna manera MVC para separar un poco el código. En helper.php creo una función getResult() que lo que hace es mostrar el campo date de la tabla #__comments donde el valor de uri es la dirección del navegador que ahora estamos viendo

$theurl = $_SERVER["REQUEST_URI"];

Al principio de plg_vacio.php incluyo helper.php  ->  require_once dirname(__FILE__).DS.'helper.php';

Dentro de la función  onContentPrepare instancio la clase y llamo al método 

  $clase = new plgHelper();
  $comment = $clase -> getResult();   y  llamo a la vista    require_once dirname(__FILE__).DS.'plg_vista.php'; que mostrará los resultados del query.