Creando un componente simple para Joomla! 1.0.X

Moderador: Staff Comunidad Joomla!

Creando un componente simple para Joomla! 1.0.X

Notapor gustavo » Sab Ago 16, 2008 11:07 pm

En el transcursos de estos días, iré mostrando paso a paso el armado de un componente para la rama Joomla! 1.0.X. Se dará por sentado que el lector de este articulo tiene conocimientos previos de php/mysql, por lo cual no entrare en el detalle y la explicación profunda. Mi idea es que el código se explique por si mismo.

Si tuviera que definir las secciones y etapas del desarrollo de un componente serian las siguientes:

Instaladores
  • noticiasimple.xml
  • install.noticiasimple.php
  • uninstall.noticiasimple.php

Administrador
  • noticiasimple.class.php
  • admin.noticiasimple.php
  • admin.noticiasimple.html.php
  • toolbar.noticiasimple.html.php
  • toolbar.noticiasimple.php

Front - Portal
  • noticiasimple.php
Imagen On ne tue point les idées (Las ideas no se matan) | Imagen Perfil profesional Linkedin
Avatar de Usuario
gustavo
Coordinador General
Coordinador General
 
Mensajes: 460
Registrado: Mié Ene 30, 2008 5:30 pm
Ubicación: Bahía Blanca, Argentina

Re: Creando un componente simple para Joomla! 1.0.X

Notapor gustavo » Dom Ago 17, 2008 12:34 am

noticiasimple.xml

Código: Seleccionar todo
<?xml version="1.0" ?>
<mosinstall type="component">
<name>Noticia Simple!</name>
<creationDate>16/8/2008</creationDate>
<author>Gustavo Raúl Aragon</author>
<copyright>Comunidad Joomla!</copyright>
<authorEmail>info@comunidadjoomla.org</authorEmail>
<authorUrl>comunidadjoomla.org</authorUrl>
<version>0.1</version>

<files>
<filename>noticiasimple.php</filename>
</files>

<install>
<queries>
     <query>DROP TABLE IF EXISTS `#__noticiasimple`; </query>
   <query>
      CREATE TABLE IF NOT EXISTS `#__noticiasimple` (
     `idNoticia` int(7) NOT NULL auto_increment,
     `tituloNoticia` varchar(100) NOT NULL,
     `introNoticia` mediumtext NOT NULL,
     `fullNoticia` mediumtext NOT NULL,
     `fechaNoticia` int(7) NOT NULL,
     `noticiaPublicada` int(1) NOT NULL default '0',
      PRIMARY KEY  (`idNoticia`)
   );
   </query>
</queries>
</install>

<uninstall>
<queries>
   <query>
      DROP TABLE IF EXISTS `#__noticiasimple`;
   </query>
</queries>
</uninstall>
<uninstall>

<queries>
   <query>
      DROP TABLE IF EXISTS `#__noticiasimple`;
   </query>
</queries>
</uninstall>

<installfile>
   <filename>install.noticiasimple.php</filename>
</installfile>

<uninstallfile>
   <filename>uninstall.noticiasimple.php</filename>
</uninstallfile>

<administration>
   <menu>Noticias</menu>
   <submenu>
      <menu task="listarNoticias">Listar</menu>
   </submenu>

<files>
        <filename>noticiasimple.class.php</filename>
   <filename>admin.noticiasimple.php</filename>
   <filename>admin.noticiasimple.html.php</filename>
   <filename>toolbar.noticiasimple.php</filename>
   <filename>toolbar.noticiasimple.html.php</filename>
</files>

</administration>
</mosinstall>



install.noticiasimple.php

Código: Seleccionar todo
<?php
function com_install() {
}
?>


uninstall.noticiasimple.php

Código: Seleccionar todo
<?
function com_uninstall() {
}
?>

Imagen On ne tue point les idées (Las ideas no se matan) | Imagen Perfil profesional Linkedin
Avatar de Usuario
gustavo
Coordinador General
Coordinador General
 
Mensajes: 460
Registrado: Mié Ene 30, 2008 5:30 pm
Ubicación: Bahía Blanca, Argentina

Re: Creando un componente simple para Joomla! 1.0.X

Notapor gustavo » Dom Ago 17, 2008 12:38 am

noticiasimple.class.php

Código: Seleccionar todo
<?

defined( '_VALID_MOS' ) or die( 'Acceso denegado.' );

class noticiaSimple extends mosDBTable {

    var $idNoticia = null;
    var $tituloNoticia = null;
    var $introNoticia = null;
    var $fullNoticia = null;
    var $fechaNoticia = null;
    var $noticiaPublicada = null;

        function noticiaSimple () {
      global $database;
      $this->mosDBTable( '#__noticiasimple', 'idNoticia', $database );
   }

}

?>


admin.noticiasimple.php

Código: Seleccionar todo

<?php

defined('_VALID_MOS') or die('Acceso Restringido.');

// comprobamos el nivel de acceso
if (!($acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'all' ) | $acl->acl_check( 'administration', 'edit', 'users', $my->usertype, 'components', 'com_noticiasimple' ))) {

   mosRedirect( 'index2.php', _NOT_AUTH );

}

require_once( $mainframe->getPath( 'admin_html' ) );
require_once( $mainframe->getPath( 'class' ) );

$task = mosGetParam( $_REQUEST, 'task', '' );
$id = mosGetParam( $_REQUEST, 'cid', array(0) );

if (!is_array( $id )) {

   $id = array(0);

}

   switch ($task) {

      case "guardarNoticia" :
         guardarNoticia($option);
         break;

      case "editarNoticia" :
         editarNoticia( $option, $id );
         break;

      case "nuevaNoticia" :
         $id = '';
         editarNoticia( $option, $id);
         break;

      case "borrarNoticia" :
             borrarNoticia ($option, $id);
         break;

      case "publicarNoticia" :
         estadoPublicacion($option, '1', $id);
         break;

      case "despublicarNoticia" :
         estadoPublicacion($option, '0', $id);
         break;

      case "listarNoticias" :
         listarNoticias($option);
         break;
}

function listarNoticias ( $option ) {

   global $database, $mainframe, $mosConfig_list_limit;
   $limit = intval( $mainframe->getUserStateFromRequest( "viewlistlimit", 'limit', $mosConfig_list_limit ) );
   $limitstart = intval( $mainframe->getUserStateFromRequest( "view{$option}limitstart", 'limitstart', 0 ) );

   $query = "SELECT COUNT(*)"
   . "\n FROM #__noticiasimple";

   $database->setQuery( $query );
   $total = $database->loadResult();

   require_once( $GLOBALS['mosConfig_absolute_path'] . '/administrator/includes/pageNavigation.php' );
   $pageNav = new mosPageNav( $total, $limitstart, $limit  );

   $query = "SELECT * "
   . "\n FROM #__noticiasimple"
   . "\n ORDER BY idNoticia ASC"
   . "\n LIMIT $pageNav->limitstart, $pageNav->limit"
   ;

   $database->setQuery( $query );
   $rows = $database->loadObjectList();

   HTML_Trivias::listarNoticias( $rows, $pageNav, $option );
}

function editarNoticia($option, $uid) {
   global $database;
   $row = new noticiaSimple($database);

   if($uid){
      $row -> load($uid[0]);
   }
      HTML_Trivias::editarNoticia($option, $row);

}

function guardarNoticia($option) {
   global $database;
   $row = new noticiaSimple($database);

   if (!$row -> bind($_POST)) {
      echo "<script> alert('"
         .$row -> getError()
         ."'); window.history.go(-1); </script>\n";
      exit();
   }

   if (!$row -> store()) {
      echo "<script> alert('"
         .$row -> getError()
         ."'); window.history.go(-1); </script>\n";
      exit();   
   }

   mosRedirect("index2.php?option=$option&task=listarNoticias", "Guardado!");
}

function estadoPublicacion( $option, $publish=1 ,$cid ) {
   global $database, $my;
   if (!is_array( $cid ) || count( $cid ) < 1) {
      $accion = $publicar ? 'Publicar' : 'Despublicar';
      echo "<script> alert('$accion codigo de pago'); window.history.go(-1);</script>\n";
      exit;

   }

   $cids = implode( ',', $cid );

   $database->setQuery( "UPDATE #__noticiasimple SET noticiaPublicada='$publicar'"
   . "\nWHERE idPromocion IN ($cids)"
   );

   if (!$database->query()) {

      echo "<script> alert('".$database->getErrorMsg()."'); window.history.go(-1); </script>\n";

      exit();
   }

   mosRedirect( "index2.php?option=$option&task=listarNoticias" );

}

function borrarNoticia($option, $cid) {

   global $database;

   if (!is_array($cid) || count($cid) < 1) {

      echo "<script> alert('Seleccione el item que desea borrar'); window.history.go(-1);</script>\n";

      exit();

   }

   if (count($cid)) {
      $ids = implode(',', $cid);
      $database->setQuery("DELETE FROM #__noticiasimple \nWHERE idNoticia IN ($ids)");

   }

   if (!$database->query()) {

      echo "<script> alert('"
         .$database -> getErrorMsg()
         ."'); window.history.go(-1); </script>\n";

   }

   mosRedirect("index2.php?option=$option&task=listarNoticias", "Borrado!");

}

?>
Imagen On ne tue point les idées (Las ideas no se matan) | Imagen Perfil profesional Linkedin
Avatar de Usuario
gustavo
Coordinador General
Coordinador General
 
Mensajes: 460
Registrado: Mié Ene 30, 2008 5:30 pm
Ubicación: Bahía Blanca, Argentina

Re: Creando un componente simple para Joomla! 1.0.X

Notapor revertm » Jue Nov 20, 2008 6:56 am

Hola Gustavo:

Los files de toolbar y el llamado a cada función ya tengo claros cómo hacerlos mirando otros componentes, pero me gustaría conocer cómo resolviste el admin.noticiasimple.html.php y cómo exhibiste en el frontend las noticias.

Muchas gracias,

Martin
revertm
Nuevo
Nuevo
 
Mensajes: 2
Registrado: Dom Ago 10, 2008 2:59 pm


Volver a Joomla 1.0.*

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 0 invitados