CAPÍTULO IV



Creación del componente noticias

Este nuevo componente se realizará sobre la estructura básica del framework, que ya incluye un login, sistema de mensajes (alertify), gestión de media (js y css), ayuda en formularios, gestor de menú, etc. Le permitirá agregar, editar y eliminar noticias en el sistema.

Este nuevo componente se realizará sobre la estructura básica del framework, que ya incluye un login, sistema de mensajes (alertify), gestión de media (js y css), ayuda en formularios, gestor de menú, etc. Le permitirá agregar, editar y eliminar noticias en el sistema.

Lo primero será agregar nuestro componente en el archivo components.xml para que el framework conozca lo necesario acerca del mismo:


<component>

      <name>noticias</name>

      <displayName>Noticias</displayName>

      <menu>true</menu>

      <menus>

          <menuItem>

             <name>main</name>

             <path>noticias/views/common/menu_main.phtml</path>

            <default>true</default>

           </menuItem>

       </menus>

      <sqlprefix>not_</sqlprefix>

      <enabled>true</enabled>

</component>                                   



El nombre se usará para referirnos a él en el código y como identificador único. La opción menú, sirve para mostrar en el menú principal de la aplicación.

En la opción menuItem, podremos poner los menus que deseemos que use nuestro componente, y luego podrán ser definidos desde el controlador, solo deberemos setear la constante MENU con el nombre del menú que queramos cargar.


Archivos básicos:

Controllers

Models

Views

Tables

index

noticia

listadonoticias

noticias

firmante

seccion (extern)

editor

firmantes

firmante

listadofirmantes

menu_componente



Analicemos como va quedando el contenido del controlador principal de nuestro componente noticias:



class indexController extends Controller{

      

      public function __construct(){

              parent::__construct();

              Session::control();

      }


      //noticias/

      public function index(){

              $this->_view->renderizar('listado',true);

      }

      //noticias/nueva

      public function nueva(){      

              $firmante = $this->loadModel('firmante');

              $seccion = $this->loadModelFromOtherComponent('seccion','secciones');

              

              $this->_view->_secciones = $seccion->getSecciones();

              $this->_view->_firmantes = $firmante->getFirmantes();

              $this->_view->renderizar('nueva',true);

      }

}



Vemos cómo ejerce el sesión de control en el constructor. Si lo supera el método por defecto es index(), el cual llama a la vista listado.


El método nueva() ya es más interesante, vemos como carga los firmantes, los cuáles son un modelo del propio componente, y cómo también puede cargar modelos de otros componentes, como es el caso del componente sección. Aquí vemos pues una clara relación entre componentes.

Vemos un ejemplo de firmanteModel.php:


class firmanteModel extends Model{

      public $id;

      public $nombre;

      public $email;


      public function __construct(){

              parent::__construct();

              $this->cargaBD();

      }

      public function getFirmantes() {

              try {

                 $firmantes = $this->_db->query("SELECT * FROM firmantes") or  die(mysql_error().mysql_errno());

                     return $firmantes->fetchAll();

              }

              catch (PDOException $e) {

                     echo $e->getMessage();

                     return false;

              }

      }

}


      

Como resultado se llama a la vista, como por ejemplo nueva:


<form method="post" action="<?php echo BASE_URL.'noticias/nueva'; ?>">

<table>

      <tr>

      <td>

              <?php Form::select($this->_firmantes,'id','nombre','Firmantes'); ?>

      </td>

      <td>

              <?php Form::select($this->_secciones,'id','seccion','Secciones'); ?>

      </td>

      <td>Orden      

              <input type="text" name="orden"  size="5"  maxlength="9"/>

      </td>

      <td></td>

      <td>

              <?php Form::button('Guardar noticia','positive','add'); ?>

              <?php Form::button('Ampliar noticia','regular','blue'); ?>

              <?php Form::button('Eliminar noticia','negative','delete'); ?>

      </td>

      </tr>

      </table>

      <h2>Título</h2>       

              <textarea rows="1"  name="texto"></textarea>

      <h2>Subtítulo</h2>

              <textarea rows="1"  name="subtitulo"></textarea>  

      <h2>Entradilla</h2>

              <textarea rows="4"  name="entradilla"></textarea>

      <h2>Texto</h2>

              <textarea rows="15"  name="texto"></textarea>

</form>



Vemos alguna otra función del framework, como la que proporciona la clase Form que nos ayuda a pintar elementos de formulario asociados a fuente de datos, como en el caso de los select, o no, como en el caso de los botones que simplemente agrega una imagen y estilo a los botones.







Cabecera CMSUM