Anuncios

Bienvenidos sean a este post, hoy hablaremos sobre los comentarios para los contactos.

Anuncios

Si recuerdan en este post creamos una nueva tabla para los comentarios donde almacenara tambien el id del usuario como el id del contacto, nuestro primer paso para utilizarlo sera crear un nuevo modelo, para ello debemos ir al directorio Modelos y crear un nuevo archivo llamado Comentario.php al cual le agregaremos el siguiente codigo:

Comentario.php

<?php

namespace App\Modelos;

use System\ModeloBase;

class Comentario extends ModeloBase
{
        public function get_comentarios($id)
        {
                return $this->db->select('
                        comentarios.texto,
                        comentarios.creado,
                        usuarios.usuario
                        from
                        comentarios,
                        usuarios
                        where
                        comentarios.id_usuario = usuarios.id
                        and id_contacto = :id',
                        [':id' => $id]);
        }

        public function insert($datos)
        {
                $this->db->insert('comentarios',$datos);
        }
}
Anuncios
Anuncios

En este caso haremos a esta nueva clave heredera de la clase ModeloBase, en esta nueva clase agregaremos dos metodos, el primero sera para obtener todos los comentarios de la tabla y para ello usaremos al select donde le enviaremos un query muy particular, en este caso haremos una consulta multiple a la tabla comentarios y usuarios, de la tabla comentarios obtendremos el texto y cuando fue creado, de usuarios obtendremos el usuario, el condicional buscara si el id del usuario de la tabla comentarios es igual al id de la tabla usuarios y el id de contacto con el id informado, despues hacemos la union entre :id y el informado, el siguiente metodo sera el encargado de agregar los comentarios, nuestro siguiente paso sera ir al archivo contactos.php, lo primero que haremos sera importar a la clase antes creada agregando la siguiente linea junto a las otras clases importadas:

use App\Modelos\Comentario;

Lo siguiente sera agregar el siguiente metodo:

	public function view($id)
	{
		if (!is_numeric($id))
			Url::redireccionar('/contactos');

		$contacto = $this->contacto->get_contacto($id);

		if ($contacto==null)
			Url::redireccionar('/404');

		$comentario = new Comentario();

		if(isset($_POST['submit']))
		{
			$texto = (isset($_POST['texto']) ? $_POST['texto'] : null);

			if ($comentario !='')
			{
				$datos = [
					'texto' => $texto,
					'id_contacto' => $id,
					'id_usuario' => Sesion::get('id_usuario')
					];

				$comentario->insert($datos);
				Sesion::set('Exito', 'Comentario creado');
				Url::redireccionar("/contactos/view/$id");
			}
		}

		$comentarios = $comentario->get_comentarios($id);

		$titulo = "Ver contacto";
		$this->view->render('admin/contactos/view',
					compact('contacto','comentarios','titulo'));
	}
Anuncios

Este sera el metodo que usaremos para visualizarlos, para ello primero chequearemos si el id informado es numerico, en caso de no serlo vuelve a cargar la pagina de contactos, si no fallo crearemos un objeto llamado contacto y en este almacenaremos los datos del contacto informado, el siguiente condicional verifica si no devolvio nada en caso de ser verdadero nos redirecciona al error 404, si existe el contacto procede a crear un nuevo objeto para el comentario.

Anuncios

Despues de este tenemos un condiconal donde verifica si subio el comentario mediante el boton de subir en la vista que veremos en un momento, volviendo al condicional primero obtendremos el texto del formulario, en caso de no haberse cargado ninguno tendra un valor nulo, lo siguiente sera un condicional donde verificamos que comentario sea distinto de nada, en caso de ser verdadero creamos un array llamado datos en el cual almacenaremos:

  • texto, que sera el texto del comentario pasado desde la vista
  • id_contacto, que sera el id que le pasemos al metodo
  • id_usuario, sera el id del usuario que esta almacenado en la sesion actual
Anuncios
Anuncios

Despues lo pasaremos al metodo insert de la clase Comentario (modelo visto al comienzo), establecemos una clave de exito para informar que se realizo exitosamente y nos redireccionamos al metodo view nuevamente, lo siguiente es para la carga normal de la vista, para ello primero obtendremos todos los comentarios y lo almacenaremos en una nueva variable, despues establecemos el titulo, para finalmente usar a render para dibujar a la vista y le pasaremos tres variables:

  • contacto
  • comentarios
  • titulo
Anuncios

Solo nos resta agregar la vista y para ello iremos al directorio:

app/Views/admin/contactos 
Anuncios

Donde crearemos un nuevo archivo que llamaremos view.php al cual le agregaremos el siguiente codigo:

view.php

<?php
include(APPDIR.'Views/layouts/header.php');
include(APPDIR.'Views/layouts/nav.php');
include(APPDIR.'Views/layouts/errores.php');
?>

<h1>Ver Contacto</h1>

<div class='table-responsive'>
    <table class='table table-striped table-hover table-bordered'>
    <tr>
        <th>Nombre</th>
        <th>Email</th>
        <th>Telefono</th>
    </tr>
    <tr>
        <td><?=htmlentities($contacto->apellido . ", " . $contacto->nombre);?></td>
        <td><?=htmlentities($contacto->correo);?></td>
        <td><?=htmlentities($contacto->telefono);?></td>
    </tr>
    </table>
</div>

<h1>Comentarios</h1>

<form method="post">

    <div class="control-group">
        <textarea class="form-control" name="texto"></textarea>
    </div>

    <p><button type="submit" class="btn btn-success" name="submit"><i class="fa fa-check"></i> Agregar comentario</button></p>

</form>

<?php foreach($comentarios as $row) { ?>
    <div class="well">
        <p><?=htmlentities($row->texto);?></p>
        <p>Por <?=$row->usuario;?> el <?=date('d M Y H:i:s', strtotime($row->creado));?></p>
    </div>
<?php } ?>

<?php include(APPDIR.'Views/layouts/footer.php');?>
Anuncios
Anuncios

Como siempre tenemos nuestros layouts al comienzo despues tenemos la misma tabla que tenemos en index.php pero sin las acciones, luego tenemos una nueva seccion que sera para los comentarios, donde primero tendremos un formulario con un area de texto donde podemos ingresar el texto, luego tenemos un bucle donde pasaremos por todos los comentarios que pasamos con el metodo y los mostraremos, primero ira el texto, luego diremos quien fue el encargado de subirlo, por ultimo estableceremos de una mejor forma el formato del valor cuando fue creado, recuerden que al almacenar la hora y fecha lo hace con este formato:

2021-11-12 13:59:47
Anuncios

Pero nosotros usamos un formato para verlo de una forma que pueda ser interpretadas por humanos:

12 Nov 2021 13:59:47
Anuncios

Con esto tenemos todo lo relacionado a la visualizacion de los contactos pero todavia nos falta el boton para verlos, para ello debemos ir al archivo index.php dentro del directorio:

app/Views/admin/contactos
Anuncios

En la tabla que se encarga mostrar los botones de edicion y eliminacion agregaremos la siguiente linea:

<a href="/contactos/view/<?=$row->id;?>" class="btn btn-xs btn-info">Ver</a>
Anuncios

Como pueden ver simplemente nos hace acceder a la clase y el metodo pasando tambien el id del contacto, este bloque debera quedar de la siguiente manera:

    <tr>
        <td><?=htmlentities($row->apellido . ", " . $row->nombre);?></td>
        <td><?=htmlentities($row->correo);?></td>
        <td><?=htmlentities($row->telefono);?></td>
        <td>
	    <a href="/contactos/view/<?=$row->id;?>" class="btn btn-xs btn-info">Ver</a>
            <a href="/contactos/edit/<?=$row->id;?>" class="btn btn-xs btn-warning">Editar</a>
            <a href="javascript:del('<?=$row->id;?>','<?=$row->nombre . chr(32)  .  $row->apellido;?>')" class="btn btn-xs btn-danger">Eliminar</a>
        </td>
    </tr>
Anuncios

Pero antes veamos como quedo definitivamente nuestro archivo index.php con la reciente modificacion:

index.php

<?php
include(APPDIR.'Views/layouts/header.php');
include(APPDIR.'Views/layouts/nav.php');
?>

<h1>Contactos</h1>

<?php include(APPDIR.'Views/layouts/errores.php');?>

<p><a href="/contactos/add" class="btn btn-xs btn-info">Agregar Contacto</a></p>

<div class='table-responsive'>
    <table class='table table-striped table-hover table-bordered'>
    <tr>
        <th>Nombre</th>
        <th>Email</th>
        <th>Telefono</th>
        <th>Action</th>
    </tr>
    <?php foreach($contactos as $row) { ?>
    <tr>
        <td><?=htmlentities($row->apellido . ", " . $row->nombre);?></td>
        <td><?=htmlentities($row->correo);?></td>
        <td><?=htmlentities($row->telefono);?></td>
        <td>
	    <a href="/contactos/view/<?=$row->id;?>" class="btn btn-xs btn-info">Ver</a>
            <a href="/contactos/edit/<?=$row->id;?>" class="btn btn-xs btn-warning">Editar</a>
            <a href="javascript:del('<?=$row->id;?>','<?=$row->nombre . chr(32)  .  $row->apellido;?>')" class="btn btn-xs btn-danger">Eliminar</a>
        </td>
    </tr>
    <?php } ?>
    </table>
</div>

<script language="JavaScript" type="text/javascript">
function del(id, title) {
    if (confirm("Quieres eliminar a '" + title + "'?")) {
        window.location.href = '/contactos/delete/' + id;
    }
}
</script>

<?php include(APPDIR.'Views/layouts/footer.php');?>
Anuncios

Con todo esto podemos proceder a probar nuestra nueva aplicacion, para ello utilizaremos el siguiente video para verlo completamente en accion

Anuncios

Si lograron lo mismo que en el video, Felicitaciones!!!! dominaron un gran poder que nos permite PHP y si bien aun sigue siendo odiado por muchos, especialmente por desarrolladores de la vieja escuela, no podemos negar que nos permite una gran flexibilidad para trabajar con paginas las cuales nos permiten trabajar como si fueran una aplicacion de escritorio.

Anuncios

Antes de finalizar vamos a ver cmo quedo la estructura final de nuestro proyecto:

tinchicus@dbn001vrt:~/lenguajes/PHP/proyecto$ tree
.
├── app
│   ├── Config.php
│   ├── Controllers
│   │   ├── admin.php
│   │   ├── contactos.php
│   │   ├── inicio.php
│   │   └── usuarios.php
│   ├── Helpers
│   │   ├── Database.php
│   │   ├── Sesion.php
│   │   └── Url.php
│   ├── Modelos
│   │   ├── Comentario.php
│   │   ├── Contacto.php
│   │   └── Usuario.php
│   └── Views
│       ├── 404.php
│       ├── admin
│       │   ├── auth
│       │   │   ├── cambia_clave.php
│       │   │   ├── login.php
│       │   │   └── reset.php
│       │   ├── contactos
│       │   │   ├── add.php
│       │   │   ├── edit.php
│       │   │   ├── index.php
│       │   │   └── view.php
│       │   ├── index.php
│       │   └── users
│       │       ├── add.php
│       │       ├── edit.php
│       │       └── index.php
│       ├── contactos
│       │   └── index.php
│       ├── default.php
│       ├── layouts
│       │   ├── errores.php
│       │   ├── footer.php
│       │   ├── header.php
│       │   └── nav.php
│       └── tinchicus.php
├── composer.json
├── composer.lock
├── system
│   ├── ControladorBase.php
│   ├── ModeloBase.php
│   ├── Route.php
│   └── View.php
├── vendor
│   ├── autoload.php
│   ├── composer
│   │   ├── autoload_classmap.php
│   │   ├── autoload_namespaces.php
│   │   ├── autoload_psr4.php
│   │   ├── autoload_real.php
│   │   ├── autoload_static.php
│   │   ├── ClassLoader.php
│   │   ├── installed.json
│   │   ├── installed.php
│   │   ├── InstalledVersions.php
│   │   ├── LICENSE
│   │   └── platform_check.php
│   ├── filp
│   │   └── whoops
│   │       ├── CHANGELOG.md
│   │       ├── composer.json
│   │       ├── LICENSE.md
│   │       ├── SECURITY.md
│   │       └── src
│   │           └── Whoops
│   │               ├── Exception
│   │               │   ├── ErrorException.php
│   │               │   ├── Formatter.php
│   │               │   ├── FrameCollection.php
│   │               │   ├── Frame.php
│   │               │   └── Inspector.php
│   │               ├── Handler
│   │               │   ├── CallbackHandler.php
│   │               │   ├── HandlerInterface.php
│   │               │   ├── Handler.php
│   │               │   ├── JsonResponseHandler.php
│   │               │   ├── PlainTextHandler.php
│   │               │   ├── PrettyPageHandler.php
│   │               │   └── XmlResponseHandler.php
│   │               ├── Resources
│   │               │   ├── css
│   │               │   │   ├── prism.css
│   │               │   │   └── whoops.base.css
│   │               │   ├── js
│   │               │   │   ├── clipboard.min.js
│   │               │   │   ├── prism.js
│   │               │   │   ├── whoops.base.js
│   │               │   │   └── zepto.min.js
│   │               │   └── views
│   │               │       ├── env_details.html.php
│   │               │       ├── frame_code.html.php
│   │               │       ├── frame_list.html.php
│   │               │       ├── frames_container.html.php
│   │               │       ├── frames_description.html.php
│   │               │       ├── header.html.php
│   │               │       ├── header_outer.html.php
│   │               │       ├── layout.html.php
│   │               │       ├── panel_details.html.php
│   │               │       ├── panel_details_outer.html.php
│   │               │       ├── panel_left.html.php
│   │               │       └── panel_left_outer.html.php
│   │               ├── RunInterface.php
│   │               ├── Run.php
│   │               └── Util
│   │                   ├── HtmlDumperOutput.php
│   │                   ├── Misc.php
│   │                   ├── SystemFacade.php
│   │                   └── TemplateHelper.php
│   ├── phpmailer
│   │   └── phpmailer
│   │       ├── COMMITMENT
│   │       ├── composer.json
│   │       ├── get_oauth_token.php
│   │       ├── language
│   │       │   ├── phpmailer.lang-af.php
│   │       │   ├── phpmailer.lang-ar.php
│   │       │   ├── phpmailer.lang-az.php
│   │       │   ├── phpmailer.lang-ba.php
│   │       │   ├── phpmailer.lang-be.php
│   │       │   ├── phpmailer.lang-bg.php
│   │       │   ├── phpmailer.lang-ca.php
│   │       │   ├── phpmailer.lang-ch.php
│   │       │   ├── phpmailer.lang-cs.php
│   │       │   ├── phpmailer.lang-da.php
│   │       │   ├── phpmailer.lang-de.php
│   │       │   ├── phpmailer.lang-el.php
│   │       │   ├── phpmailer.lang-eo.php
│   │       │   ├── phpmailer.lang-es.php
│   │       │   ├── phpmailer.lang-et.php
│   │       │   ├── phpmailer.lang-fa.php
│   │       │   ├── phpmailer.lang-fi.php
│   │       │   ├── phpmailer.lang-fo.php
│   │       │   ├── phpmailer.lang-fr.php
│   │       │   ├── phpmailer.lang-gl.php
│   │       │   ├── phpmailer.lang-he.php
│   │       │   ├── phpmailer.lang-hi.php
│   │       │   ├── phpmailer.lang-hr.php
│   │       │   ├── phpmailer.lang-hu.php
│   │       │   ├── phpmailer.lang-hy.php
│   │       │   ├── phpmailer.lang-id.php
│   │       │   ├── phpmailer.lang-it.php
│   │       │   ├── phpmailer.lang-ja.php
│   │       │   ├── phpmailer.lang-ka.php
│   │       │   ├── phpmailer.lang-ko.php
│   │       │   ├── phpmailer.lang-lt.php
│   │       │   ├── phpmailer.lang-lv.php
│   │       │   ├── phpmailer.lang-mg.php
│   │       │   ├── phpmailer.lang-ms.php
│   │       │   ├── phpmailer.lang-nb.php
│   │       │   ├── phpmailer.lang-nl.php
│   │       │   ├── phpmailer.lang-pl.php
│   │       │   ├── phpmailer.lang-pt_br.php
│   │       │   ├── phpmailer.lang-pt.php
│   │       │   ├── phpmailer.lang-ro.php
│   │       │   ├── phpmailer.lang-ru.php
│   │       │   ├── phpmailer.lang-sk.php
│   │       │   ├── phpmailer.lang-sl.php
│   │       │   ├── phpmailer.lang-sr_latn.php
│   │       │   ├── phpmailer.lang-sr.php
│   │       │   ├── phpmailer.lang-sv.php
│   │       │   ├── phpmailer.lang-tl.php
│   │       │   ├── phpmailer.lang-tr.php
│   │       │   ├── phpmailer.lang-uk.php
│   │       │   ├── phpmailer.lang-vi.php
│   │       │   ├── phpmailer.lang-zh_cn.php
│   │       │   └── phpmailer.lang-zh.php
│   │       ├── LICENSE
│   │       ├── README.md
│   │       ├── SECURITY.md
│   │       ├── src
│   │       │   ├── Exception.php
│   │       │   ├── OAuth.php
│   │       │   ├── PHPMailer.php
│   │       │   ├── POP3.php
│   │       │   └── SMTP.php
│   │       └── VERSION
│   └── psr
│       └── log
│           ├── composer.json
│           ├── LICENSE
│           ├── Psr
│           │   └── Log
│           │       ├── AbstractLogger.php
│           │       ├── InvalidArgumentException.php
│           │       ├── LoggerAwareInterface.php
│           │       ├── LoggerAwareTrait.php
│           │       ├── LoggerInterface.php
│           │       ├── LoggerTrait.php
│           │       ├── LogLevel.php
│           │       ├── NullLogger.php
│           │       └── Test
│           │           ├── DummyTest.php
│           │           ├── LoggerInterfaceTest.php
│           │           └── TestLogger.php
│           └── README.md
└── webroot
    ├── css
    │   └── style.css
    └── index.php

36 directories, 168 files
tinchicus@dbn001vrt:~/lenguajes/PHP/proyecto$
Anuncios

Por ultimo les dejo los codigos para que los comparen o vean en caso de ser necesario:

Anuncios

En resumen, hoy hemos agregado los comentarios en nuestros contactos, hemos agregado los elementos necesarios, recuerden que ya habiamos generado la tabla, tambien las relativamente pocas modificaciones que hemos hecho en paginas ya existentes, por ultimo vimos la estructura final de nuestro proyecto y adjuntamos todos los archivos, espero les haya gustado tanto como a mi sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Donación

Es para mantenimento del sitio, gracias!

$1.50

Anuncio publicitario