viernes, 13 de mayo de 2016

Me he mudado



Seguramente muchos os habréis dado cuenta de que hace como dos años que no escribo en el blog, esto no es debido a que lo haya dejado, es que me mudé a una web en wordpress por razones de presencia en internet, de trabajo y en definitiva por hacer pruebas e ir especializándome en esa plataforma. Ahora podéis encontrar toda la información que hay aquí y muchísima más en:


A lo largo de un año y medio trabajando en una empresa de desarrollo he ido escribiendo tutoriales sobre wordpress, angularJS, Javascript, MySQL… que podéis leer ahí.

Pero la historia continua, pues también he fundado una empresa de desarrollo web llamada shivaweb, con un compañero de estudios, en la cual realizamos proyectos webs a medida, aplicaciones cloud y realizamos labores de marketing online, de modo que podéis continuar siguiéndome en las dos webs.

http://shivaweb.es/


Gracias a todos!!!

sábado, 10 de enero de 2015

Acordeón em html y css

El otro día me vi en la obligación de realizar un acordeón para una web, donde se mostrasen imagenes, enlaces... En un principio pensé en utilizar jqueryUi, pero luego pensé que seguro que no era difícil hacerlo con HTML y CSS de modo que empecé a pensar un poquito e hice el siguiente acordeón para colocar donde queramos y con bastante funcionalidad:



miércoles, 31 de diciembre de 2014

Feliz año nuevo

Antes de nada me gustaría dar las gracias a todos aquellos que habéis estado visitando el blog durante este año, quienes habéis seguido mis tutoriales, manuales, mis chistes...

Este año ha sido intenso, mi viaje a Polonia, las practicas, el proyecto de Apache Cordova, terminar el ciclo, la búsqueda de trabajo, y el desarrollo de todo un manual de PHP, diseños, ayudas, algunas entradas de MAGENTO... toda una odisea que concluye esta noche y da la bienvenida a otra nueva aventura, ya que no dejo de programar, ya sea por el trabajo o por motus propio, de modo que este año espero poder contaros muchas cosas, según parece de Wordpress y Magento...

Es una lastima pero la dirección que pretendía tomar en mi desarrollo, enfocándolo a Laravel y otros frameworks se ha visto truncada, en esta caso felizmente por el trabajo, que me dirige más hacia los CMS y su programación, lugar por donde seguiremos avanzando en NETRUNNING.

De modo que prepararse para un nuevo año de ayudas, ideas y soluciones para vuestros desarrollos, seguro que empiezo a encontrar tiempo ahora que empiezo a estabilizarme en mi nueva faceta laboral.

Un abrazo a todos y os deseo que le mejor del 2014 sea lo peor del 2015....

miércoles, 17 de diciembre de 2014

Acceso a la base de datos de Wordpress

En ocasiones puede ser necesario identificar el nombre de la base de datos, el usuario, la clave... para nuestros trabajos con wordpress, puede incluso que tengamos algún tipo de error y no sepamos como solucionarlo.

Pues bien, para ello es tan sencillo como acceder vía ftp a nuestro servidor y una vez dentro localizar el archivo wp-config.php, donde encontraremos la siguiente información:

// ** Ajustes de MySQL. Solicita estos datos a tu proveedor de alojamiento web. ** //
/** El nombre de tu base de datos de WordPress */
define('DB_NAME', 'nombre de la base de datos');

/** Tu nombre de usuario de MySQL */
define('DB_USER', 'nombre del usuario de la base de datos');

/** Tu contraseña de MySQL */
define('DB_PASSWORD', 'password en la base de datos');

/** Host de MySQL (es muy probable que no necesites cambiarlo) */
define('DB_HOST', 'hosting de nuestra base de datos');

/** Codificación de caracteres para la base de datos. */
define('DB_CHARSET', 'utf8');

/** Cotejamiento de la base de datos. No lo modifiques si tienes dudas. */
define('DB_COLLATE', '');


Los textos en azul son los que nos dan la información sobre la conexión a nuestra base de datos y desde donde podemos solucionar muchos de los errores de conexión.

martes, 9 de diciembre de 2014

Traduciendo Magento

En muchas ocasiones nos veremos obligados a traducir, o cambiar algunos de los textos que trae Magento, desde el carrito, al mensaje de bienvenida o cualquier otra cosa.

Para ello tenemos dos opciones, la primera es hacerlo manualmente que aunque es mucho más tediosa, puede resultar mejor si se hacen muchos cambios, ya que no ralentiza el sistema. La segunda por su parte se realiza haciendo traducciones "en caliente", es decir sobre la propia página web, aunque puede llegar el caso de que si abusamos de este método la web se ralentice un poco.

Traduciendo manualmente

Para hacer esto debemos de dirigirnos por medio de ftp a la ubicación de los archivos de idioma que se encuentran en: app >> locale >> es_ES

En esta carpeta se encuentran los archivos .csv en los que se encuentran los valores en inglés y en español, tan solo hace falta añadir el valor en español o modificar el que ya tiene para que su traducción aparezca en línea.

Este sistema es muy sencillo aunque muy laborioso ya que hay muchos archivos que varían en su extensión y puede ser realmente tedioso.

Traduciendo en caliente

La otra forma de traducir, menos tediosa, aunque puede sobrecargar el sistema si se traduce todo de este modo es hacerlo en caliente, es decir sobre la propia web, que puede o no estar en proceso de producción.

Para llevarla a cabo debemos irnos a la parte de administración de la tienda, y entrar en Sistema >> Configuración una vez dentro, buscamos avanzado en la parte izquierda y clicamos en desarrollador. Esto nos abrirá un menú y debemos abrir, Línea interna de traducción, y poner las opciones que nos interesen en sí.
  • Activado para el frontend: nos permitirá hacer la traducción en el frontend
  • Activado para el administrador: nos permitirá hacer los cambios en la parte de administración.
Hacemos click en guardar configiración y nos vamos al frontend de nuestra tienda, y vemos que hay muchas partes rodeadas de puntitos rojos y al pasar el ratón por encima aparece un librito azul. (como señala la flecha verde)
Al hacer click sobre el librito, se abre un cuadro de dialogo donde se nos permite cambiar el texto.
En este dialogo también tenemos que marcar la casilla  Store View Specific, para que el cambio se haga solo en el idioma que tiene la web actualmente.


Una vez que hemos puesto el nuevo texto, le damos a submit y podemos repetir el proceso tantas veces como queramos.

Una vez terminemos es necesario volver a a desactivar las traducciones online.

Reseteamos la cache, de la cual habrá un aviso en la administración de Magento y los cambios se quedan realizados.

Páginas visibles en Magento segun el grupo de usuarios

Una petición que muy común entre los clientes que solicitan una web en Magento es que ciertas páginas solo estén visibles para los usuarios registrados o incluso solo para ciertos grupos de usuarios.

Yo me he encontrado con este problema y estuve buscando como solucionarlo por toda la red, encontrando soluciones de pago, bastante caras por cierto, hasta que finalmente logré dar con la piedra filosofal, que no es más que unos pequeños scripts, claro que hay que hacer algo de código.

Lo primero que debemos de hacer es crear nuestro archivo .phtml, en el cual introduciremos el código que necesitamos para que podamos poner nuestras condiciones...

Página solo visible a usuarios registrados

Comenzaremos por una página que solo puede ser vista por usuarios registrados; para ello en nuestro archivo .phtml debemos de poner el siguiente código base:
<?php if(Mage::getSingleton('customer/session')->isLoggedIn()): ?>
<!-- Aquí se mostrará el código html si el cliente está logueado -->
<?php else: ?>
<!-- Aquí se mostrará el código html  si no se está logueado -->
<?php endif; ?>

Tan solo nos queda introducir el código en cada una de las dos opciones y ya esta.

Página solo visible para ciertos grupos de usuarios

Puede ocurrir que queramos que una página sea visible solo para un grupo de usuarios (si es para varios grupos, el desarrollador con un poco de conocimiento en PHP verá que tan solo hace falta modificar la condición del if y poner nuevas variables).

Lo primero que debemos de hacer es irnos a nuestro panel de control de Magento y en Clientes >> Grupos de clientes, apuntamos la id del grupo que queremos.

A continuación lo único que debemos de hacer es irnos a nuestro archivo .phtml y poner el siguiente código:
<?php $idgrupo = 4; //reemplazar por la id del grupo que queramos
if(Mage::getSingleton('customer/session')->getCustomerGroupId() == $idgrupo): ?>
<!-- Código htlml que se mostrará si el cliente pertenece al grupo -->
<?php else: ?>
<!-- Código que se mostrará en caso de que no pertenezca al grupo -->
<?php endif; ?>

De esta forma ya tenemos una página que se mostrará solo si los miembros pertenecen a un grupo determinado.

miércoles, 3 de diciembre de 2014

XAMPP no interpreta el código PHP

Seguramente a muchos os ha sucedido, eso de coger un proyecto en PHP, instalarlo en vuestro localhost y cuando parece que todo va a funcionar, aparece el código PHP en el navegador.

La razón más probable de esto, es que nuestro archivo php.ini no tiene activa la variable short_open_tag. Esto significa que nuestro servidor no reconoce la apertura corta de php <? tan solo reconoce la larga <?php y muchos desarrolladores utilizan la corta. (Personalmente prefiero la larga que tampoco es que sea algo para morirse y evita este tipo de problemas)

La solución a este problema es muy sencilla, tan solo debemos de ir a nuestro archivo php.ini ubicado en:
c://xampp/php/php.ini

Y una vez abierto tenemos que buscar la directiva short_open_tag, la cual seguramente tenga este aspecto:
short_open_tag=Off

Y nosotros tendremos que cambiarla por:

short_open_tag=On

Una vez hecho este cambio, tan solo hay que reiniciar nuestro servidor y el navegador debe de poder interpretar nuestro proyecto.

Poniendo una imagen en una página de Magento

Este es otro problema que tienen, bueno tenemos, los desarrolladores que tocamos Magento por primera vez, ¿como pongo una imagen en una de las páginas como por ejemplo el home?
La respuesta no es que sea muy difícil, de hecho el procedimiento es bastante sencillo, lo primero que tenemos que hacer es colocar nuestra imagenes dentro de la siguiente carpeta:

skin >> frontend >> interface que estemos usando >> plantilla que estemos usando >> images

Una vez que hemos hecho esto, tan solo tenemos que irnos a nuestro backend, escoger CMS y página (también sirve en bloques estáticos) y una vez que estamos allí escribir lo siguiente:

<img src="{{skin url='nombre de la imagen'}}"> 

De esta forma la imagen recibe como ubicación, la directiva que le indica a Magento donde se encuentra dicha imagen, introduciendo esta dirección url en el src.

Además de que esta imagen puede estar dentro de un div, tener su propia clase o id, y cualquier argumento de forma normal.

domingo, 30 de noviembre de 2014

Introduciendo PHP y JS en Magento

Otra cosa que trae de cabeza a aquellos que queremos desarrollar en Magento es la imposibilidad inicial de poder poner en nuestras páginas del CMS tano PHP como JS, y la verdad que es un problema enfrentarte a esto sobre todo cuando empiezas a ver que el formato de los archivos es de la extensión .phtml donde te quedas mirando con cara de pez y más aun cuando entre sus miles de archivos nos sabes cual tienes que tocar...

La verdad es que es algo que creo que hace que muchos desarrolladores abandonen la posibilidad de desarrollar en Magento, pero a pesar de todos estos impedimentos se puede lograr programar en PHP y en JS, para ellos debemos de situarnos en la siguiente carpeta desde la raiz de magento:

app - design - frontend - default - plantilla - template - page - html

Los dos directorios en morado indican la situación de la plantilla en nuestro árbol y el nombre de la misma. Naturalmente esta plantilla debe de ser la que estamos utilizando.

Una vez en este punto encontraremos que hay varios archivos .phtml, de modo que nos encontramos en el sitio donde debemos.

Aquí creamos otro archivo con la extensión .phtml en el cual podemos escribir como si se tratase de un html normal introduciendo nuestros scripts ya sean de javascript o código php y cuando lo tengamos listo lo salvamos.

Ahora nos vamos a la parte de administración de nuestro Magento, y en CMS >> Páginas abrimos nuestra web y copiamos la siguiente directiva:

 {{block type="core/template" template="page/html/nombreDelArchivo.phtml"}}



Guardamos y al ver la página ya se muestran los resultados.




sábado, 29 de noviembre de 2014

Creando una página en Magento desde el gestor de contenidos

Sigo con mi exploración de Magento, y hoy voy a explicaros como hacer una página desde el back-end sin necesidad de código y que esta aparezca en el menú.

Hay que tener en cuenta que puede parecer un tanto extraño el procedimiento, pero funciona y además nos permite realizar ciertos cambios una vez que esta terminado para que el cliente no note el trabajo que hay por detrás.
  • Para empezar lo primero que tenemos que hacer es crear una categoría, para ello nos vamos, dentro de nuestra aplicación de administración a  Catálogo >> Cetegorias y aquí creamos una categoría que sea una subcategoría de nuestro inicio, con un nombre simple, mi recomendanción es que sea una única palabra que defina la categoría, ya que nos puede evitar problemas y podremos cambiarlos más adelante. Además le indicamos que tiene que estar activa. Ya con solo esto nos debe de aparecer la sección en el menú.

  • Una vez que ya tenemos nuestra categoría nos dirigimos a Catalogo >> Redireccionamiento de URL y copiamos la ruta objetivo de nuestra categoría, la cual nos hara falta un poco más adelante, entramos en la edición y en la casilla de redirección seleccionamos Permanente.

viernes, 28 de noviembre de 2014

Modificando CSS en Magento

Me he encontrado con la tesitura de que en ocasiones hay que cambiar los estilos en magento, al cual cada día admiro y odio más a partes iguales, ya que para cualquier cosa hay que investigar muchísimo, hasta el punto en el que te quedas parado buscando información durante horas, sobre todo cuando quieres cambiar algo que no esta accesible desde lo menús.

En este caso mi intención es modificar el CSS de Magento, aunque debido a la forma de trabajo de Magento habrá que realizar una operación en nuestras páginas, no os preocupéis, lo único que hay que hacer es el equivalente a importar el css cuando hacemos una web normal.

Lo primero que tenemos que hacer es crear nuestro archivo CSS, pero hablando de este gestor de contenidos podemos perdernos por su laberíntico árbol de directorios, de modo que aquí os dejo las directrices y el mapa del tesoro para ubicar nuestro archivo custom.css donde debemos.

jueves, 27 de noviembre de 2014

Como enviar un mail con PHP (III) un mail con formato

Ya hemos aprendido como enviar mails simples y con cabeceras, pero ahora es el momento de aprender a enviar un mail con formato en PHP para que quede más atractivo.

En el siguiente script, no hemos usado ningún tipo de CSS, tan solo HTML5 a pelo para crear una tabla, pero una vez que tenemos esto hecho tan solo se trata de dar estilo de forma normal a nuestro código.

Pare empezar vamos a presentar un formulario HTML5 al cliente, en este caso he querido que todos los campos sean obligatorios, evitando de este modo el control de si han sido rellenados o no en el back-end, pero si quieres saber como se hace puedes verlo en como enviar un mail con cabeceras.
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <br>
 <form method="post" action="formato.php">
  Escriba sus comentarios y haga clic en Enviar:
  <p>Nombre: <input type="text" name="nombre" required></p>
  <p>email: <input type="email" name="email" required></p>
  <p>Asunto: <input type="text" name="asunto" required></p>
   
  <textarea name="message" cols="50" rows="5" required></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

En este formulario como ya he comentado, se utiliza el atributo required, de hecho se pueden utilizar validaciones si se desea, pero no tiene ningún misterio, la magia se da en nuestro script en php:
<?php
 $cabeceras = "MIME-Version: 1.0\r\n";
 $cabeceras .= "Content-Type: text/html; charset=UTF-8\r\n";
 $correo = '<table border="1px">
        <caption><h2>Nuevo email</h2></caption>
        <tr>
            <td><b>Nombre</b></td>
            <td>' . $_REQUEST["nombre"] . '</td>
        </tr>
        <tr>
            <td><b>Email</b></td>
            <td>' . $_REQUEST["email"] . '</td>
        </tr>
        <tr>
            <td><b>Asunto</b></td>
            <td>' . $_REQUEST["asunto"] . '</td>
        </tr>
        <tr>
            <td><b>Mensaje</b></td>
            <td>' . $_REQUEST["message"] . '</td>
        </tr>
    </table>';


 mail("direccionEmail", $_REQUEST["asunto"], $correo, $cabeceras);
?>

Lo primero que tenemos que hacer es crear las cabeceras, sin las cuales nuestro formato no aparecerá en el correo, ya que estas indican que interpreten el código HTML que hay dentro.

A continuación creamos el string $correo que es el cuerpo del correo en sí mismo, aquí hemos escogido una tabla, pero puede ser una lista o lo que queramos.

Hay que notar como recogemos los datos del formulario para que aparezcan en la tabla en la posición que queremos.
Debido a que es un script que solo envía el mail, no hace falta guardar estos datos introducidos por el usuario en variables, ya que solo van a enviarse al mail, aparte de que se están guardando en la tabla.

Finalmente terminamos utilizando la función mail() como de costumbre que tiene como primer parametro la dirección de mail donde va dirigido el correo, el asunto del mail, el mensaje (en nuestro caso la tabla), y las cabeceras.

Con todo esto obtenemos un resultado similar a este:

martes, 25 de noviembre de 2014

ERP

Llevo unos días liado con un trabajo que se debe a un ERP, tecnología que no conocía, de modo que me he puesto a investigar y a hacer una reseña sobre ella y de ese modo aclarar mis dudas y espero que las de otros que se encuentren frente a la necesidad, o posibilidad de trabajar con él.

¿Que es ERP?

ERP, sistemas de planificación de recursos empresariales (ERP, por sus siglas en inglés, enterprise resource planning), puede definirse como una herramienta que controla y gestiona toda las funciones administrativas y productivas de una empresa en un solo entorno de trabajo, adaptandose a la necesidades particulares de cada empresa. 

De esta forma los trabajadores pierden menos tiempo entre multitud de herramientas, teniendo todo centralizado, maxificando la efectividad del trabajo. 

Se caracterizan por estar compuestos por diferentes módulos. Estas partes son de diferente uso, por ejemplo: producción, ventas, compras, logística, contabilidad (de varios tipos), gestión de proyectos, GIS, inventarios y control de almacenes, pedidos, nóminas, etc. Lo contrario sería como considerar un simple programa de facturación como un ERP por el simple hecho de que una empresa integre únicamente esa parte.
Los objetivos principales de los sistemas ERP son:
  • Optimización de los procesos empresariales.
  • Acceso a la información.
  • Posibilidad de compartir información entre todos los componentes de la organización.
  • Eliminación de datos y operaciones innecesarias de reingeniería.
El propósito fundamental de un ERP es otorgar apoyo a los clientes del negocio, tiempos rápidos de respuesta a sus problemas, así como un eficiente manejo de información que permita la toma oportuna de decisiones y disminución de los costos totales de operación.

Los beneficios que puede aportar una herramienta de ERP se resumen en la resolución de los problemas contables, mercantil o fiscal de la empresa. Asimismo, puede permitir un mayor control del inmovilizado en el inventario permanente, conciliación bancaria, liquidación de impuestos, etc.

Las soluciones ERP en ocasiones son complejas y difíciles de implantar debido a que necesitan un desarrollo personalizado para cada empresa partiendo de la configuración inicial de la aplicación, que es común. Las personalizaciones y desarrollos particulares para cada empresa requieren de un gran esfuerzo en tiempo, y por consiguiente en dinero, para modelar todos los procesos de negocio de la vida real en la aplicación.

Se caracterizan por no tener recetas ni guiones explícitos para su implantación, por ello es conveniente tener siempre en consideración algunos puntos que se deben de ir atendiendo antes, durante y después de la implantación:
  • Definición de resultados que debe de obtener con la implantación de un ERP.
  • Definición del modelo de negocio.
  • Definición del modelo de gestión.
  • Definición de la estrategia de implantación.
  • Evaluación de oportunidades para software complementario al producto ERP.
  • Alineamiento de la estructura y plataformas tecnológicas.
  • Análisis del cambio organizativo.
  • Entrega de una visión completa de la solución que implantar.
  • Implantación del sistema.
  • Controles de calidad.
  • Auditoría del entorno técnico y del entorno de desarrollo.

Ventajas de un ERP

  • Una empresa que carezca de este sistema, puede encontrarse con multitud de aplicaciones software cerradas, que no se pueden personalizar o que no se optimizan para el tipo de negocio. Este defecto esta totalmente solventado con un sistema ERP.
  • La efectividad de datos puede usarse para el control cuando el cambio ocurra desde una versión anterior a la nueva.
  • La seguridad del software esta dentro del ERP, protegiéndolo tanto de asaltos externos, como internos como malversación.
  • Se le pueden incluir controles de calidad para los productos finales.

Desventajas de un ERP

Muchos de los problemas que tienen las compañías con el ERP se deben a la inversión inadecuada para la educación continua del personal relevante, incluyendo los cambios de implementación y de prueba, y una falta de políticas corporativas que afectan a cómo se obtienen los datos del ERP y como se mantienen actualizados.
  • No tener personal con el conocimiento necesario para el funcionamiento del ERP
  • Cambio del personal que debe trabajar con el sistema
  • Su instalación es cara
  • Los vendedores del ERP pueden cargar sumas de dinero para la renovación de sus licencias anuales, que no está relacionado con el tamaño del ERP de la compañía o sus ganancias.
  • Son vistos como sistemas muy rígidos, que no se adaptan al flujo especifico de los trabajadores ni al proceso de negocio de algunas compañias.
  • Los sistemas pueden ser de difícil utilización.
  • Se pueden producir cuellos de botella cuando algún usuario o departamento no hace buen uso de él.
  • Muchos de los eslabones integrados necesitan exactitud en otras aplicaciones para trabajar efectivamente. Una compañía puede lograr estándares mínimos, y luego de un tiempo los "datos sucios" (datos inexactos o no verificados) reducirán la confiabilidad de algunas aplicaciones.
  • Una vez establecido el sistema, sus modificaciones tienen un alto coste.
  • En alguna empresas no se comparten los datos entre departamentos, lo que puede dar lugar a una reducción en la eficiencia del software.
  • Y uno de los más importantes es que el sistema puede suponer demasiado para las necesidades reales del consumidor.

lunes, 24 de noviembre de 2014

Como enviar un mail con PHP (II) Un mail con cabeceras

En la entrada anterior de esta serie, aprendimos a enviar un mail simple, ahora vamos a aprender a enviar un mail con cabeceras cc y bcc.

Para este fin vamos a seguir utilizando nuestra función mail() añadiendo el parámetro de las cabeceras. Vamos primero a modificar nuestro código html para que podamos escribir las cabeceras:
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <br>
 <form method="post" action="cabecera.php">
  Escriba sus comentarios y haga clic en Enviar:
  <p>cc: <input type="text" name="cc">
  bcc: <input type="text" name="bcc"></p>
   
  <textarea name="message" cols="50" rows="5"></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

Hemos introducido dos inputs donde se piden los elementos cc y bcc.
A continuación vamos a recogerlos en nuestro código php.
Para tal tal fin lo que debemos de hacer es comprobar si han o no han sido enviados, y en caso de que así sea que se recojan en un array que llamaremos $headers, añadiendo un nuevo elemento.
<?php
  $headers = "";
  if(isset($_REQUEST["cc"])){
   $headers .= "cc:" . $_REQUEST["cc"] . "\r\n";
  }
  if(isset($_REQUEST["bcc"])){
   $headers .= "bcc:" . $_REQUEST["bcc"] . "\r\n";
  }

Una vez que ya tenemos esto hecho, tan solo hay que utilizar la función mail() para que se envíe de la siguiente forma:
mail("direccioEmail", "Web mail", $_REQUEST["message"], $headers);
?>

De esta forma se envía el mail con las cabeceras que se han incluido, fácil ¿verdad?
Para que no quede ningún tipo de duda aquí os dejo como quedaría al final:
<?php
  $headers = "";
  if(isset($_REQUEST["cc"])){
   $headers .= "cc:" . $_REQUEST["cc"] . "\r\n";
  }
  if(isset($_REQUEST["bcc"])){
   $headers .= "bcc:" . $_REQUEST["bcc"] . "\r\n";
  }

  mail("direccioEmail", "Web mail", $_REQUEST["message"], $headers);
 ?>



cc: enviar una copia a
bcc: enviar una copia oculta es decir que no se muestra.

sábado, 22 de noviembre de 2014

Como enviar un mail con PHP (I) Un mail simple

En esta serie de entradas vamos a aprender a enviar un mail desde nuestra web utilizando la función mail().

La idea es que podamos crear un script que nos funcione de forma sencilla en todas nuestras webs.

En principio vamos a utilizar tan solo esta función para que veamos como funciona, en las siguientes entradas iremos viendo como hacer que nuestro mail recibido tenga muchos más argumentos y sea más agradable a la vista.
La función mail() funciona de la siguiente forma:

mail(email_del_receptor, asunto, mensaje , cabeceras)

Los parámetros de esta función puede ser strings, como veremos en este ejemplo, variables o matrices, como iremos viendo en las siguientes entradas.

Nota: No voy a explicar como configurar un servidor local para que se envíen los correos electrónicos, y vamos a considerar que estos scripts están colgados ya en la red, desde servidores externos, desde donde se han probado.

Aunque los datos del mail se pueden poner desde el propio código, esto mantiene muy poca comunicación con el usuario, de modo que vamos a crear primero un código HTML con un formulario para que este envie nuestro mensaje a PHP y finalmente este lo recoja y lo envié a nuestro correo electrónico.
Código HTML:
<html>
<head>
 <title>
  Envío de correo electrónico
 </title>
</head>
<body>
 <h1>Envío de correo electrónico</h1>
 <form method="post" action="basico.php">
  Escriba sus comentarios y haga clic en Enviar:
  <textarea name="message" cols="50" rows="5"></textarea>
  <input type="submit" value="Enviar">
 </form>
<body>
</html>

Como vemos este formulario no deja de ser tan solo un formulario con un textarea y un botón de enviar, sin ningún adorno ni floritura, y que envía el mensaje al script basico.php, cuyo código es:
<html>
<head>
 <title>
  Se envió su correo electrónico
 </title>
</head>
<body>
 <h1>Se envió su correo electrónico</h1>
 Gracias por su mensaje.
 <?php
  mail("direcciónEmail", "Web mail", $_REQUEST["message"]);
 ?>
<body>
</html>

Donde pone direcciónEmail tiene que ir el correo electrónico donde queremos que se envíe el mail, de este modo cuando escribimos un mensaje y clickamos a enviar, nos llega el correo.
En asunto queda fijo el  string "Web mail" y en el mensaje se recoge el mensaje escrito en el formulario.

En este caso no hemos recogido cabeceras, ya que este parámetro es opcional.

De esta forma tan sencilla ya tenemos un formulario que envia mails, aunque lo iremos mejorando en las siguientes entradas de esta serie.

viernes, 21 de noviembre de 2014

Chiquito Ipsum

http://www.chiquitoipsum.com/
Desarrollar puede ser a veces tedioso, sobre todo cuando estamos haciendo todo el tiempo lo mismo, pero ¿quien dice que no puede ser divertido? ¿o que podamos echar unas risas mientras se trabaja? todos hemos tenido que utilizar texto de relleno, ya sabéis el famoso Lorem ipsum, texto al que muchos desarrolladores cogen coraje, de hecho utilizan otros, pero...¿qué pensaríais si hay una gente que se ha dedicado a hacer el texto a través de las expresiones de chiquito de la calzada?

Pues bien tan solo tienes que hacer click en la imagen para ir a esta divertida web donde poder generar el texto de relleno tan inusual como este:

Lorem fistrum ese hombree por la gloria de mi madre te voy a borrar el cerito benemeritaar caballo blanco caballo negroorl diodeno está la cosa muy malar benemeritaar papaar papaar. Va usté muy cargadoo hasta luego Lucas quietooor apetecan diodeno no puedor diodenoo pecador ahorarr. Va usté muy cargadoo a wan qué dise usteer te va a hasé pupitaa benemeritaar ese que llega benemeritaar. A wan llevame al sircoo fistro ese que llega. Ahorarr no puedor a peich llevame al sircoo mamaar. De la pradera no puedor va usté muy cargadoo de la pradera tiene musho peligro fistro qué dise usteer a wan ese hombree.

jueves, 20 de noviembre de 2014

El bushido, o las 5S, de la progrmación

Hay una extraña manía entre los programadores y las técnicas de entrenamiento y concentración de los artistas marciales orientales; ya sea por los Koans (pequeñas preguntas o acertijos que se hacen cuando un maestro pretende que su alumno indague en lo más profundo de su conocimiento para encontrar la solución), técnicas de meditación, e incluso como he llegado a encontrar de buenas formas y de bushido tal y como expongo en esta entrada.

Como artista marcial que soy, aparte de programador, no comparto muchos de estos pensamientos o filosofías, opino que muchas de las ideas no son nada más que la forma de hacer algo que resulte un tanto más interesante para los neófitos, como los Dojos de programación, o los ya mencionados Koans. De hecho estoy esperando que alguien comience a usar la palabra baishi para algo, lo cual ya sería la repanocha...

Pero aun entrando en estos juegos de palabras y aceptando algunos por correctos, e incluso, por hasta, validos,  ¿que es esto del bushido?
Bueno según la wikipedia, que da una descripción bastante clara y rápida del bushido, este es:
"Un código ético estricto y particular al que muchos samuráis (o bushi) entregaban sus vidas, que exigía lealtad y honor hasta la muerte. Si un samurái fallaba en mantener su honor, podía recobrarlo practicando el seppuku (suicidio ritual)"

De hecho se llega a afirmar que:
"El camino del samurai (y por ende el bushido) se encuentra en la muerte"
En la programación no hay que llegar a esos extremos, pero es cierto que el bushido mantiene una férrea  disciplina sobre aquellos que deciden escoger esta forma de vida y seguir las directrices de su filosofía. Es por ello que podríamos hablar del código ético del programador a la hora de ejercer sus funciones, imponiendo unas normativas tan férreas que podrían considerarse como un bushido para nuestra programación. (Aunque he de admitir que yo comparto mas ideales en la realidad con el Taoísmo Chino que con el Bushido Japones).

Segun algunos autores, como James O Coplien, en el prologo del libro Código Limpio, aparecen los TPM (Total Productive Maintenance o Mantenimiento Productivo Total) donde uno de sus pilares son las 5S, cinco reglas que comienzan por la letra S (en la trascripción fonética del japones) y que cada vez se introducen más y más en el mundo de la programación:
  • Seiri (Organización): Es fundamental saber donde están las cosas, mediante enfoques como el uso de nombres correctos, agrupar las variables en orden, poner la funciones juntas...
  • Seiton (Sistematización): Hay un sitio para cada cosa, y cada cosa tiene que estar en su sitio. un fragmento de código debe de estar donde deberíamos encontrarlo, y si no es así hay que refactorizar hasta conseguirlo
  • Seiso (Limpieza): Mantener el código limpio, dejando los comentarios esenciales, nada de deseos, ideas futuras... todos los comentarios que no sean útiles deben de ser eliminados, además de mantener una indexación clara.
  • Seiketsu (Estandarización): Existen unos estandares definidos por la comunidad de trabajo, hay que seguirlos en nuestros trabajos.
  • Shutsuke (Disciplina): Hay que tener disciplina en la realización de nuestro trabajo.

He elegido el nombre de bushido de la programación ya que he creído que son unas normas que debieran o debusiesen ser tan férreas para el programador de bien como lo eran las ancestrales leyes del bushido para los samuraís...

PHP (08) Archivos (12) Bloqueo de archivos

En una aplicación web es bastante normal que haya varios usuarios trabajando a la vez, de hecho no es raro pensar que puedan estar intentando atacar al mismo archivo a la vez varios de ellos, pudiendo crear conflictos.
Para evitar este tipo de problemas se puede utilizar la función flock:
flock (handle, operation [, &wouldblock] )

Aquí handle hace referencia al archivo que será bloqueado y operation puede tomar los siguientes valores:
  • LOCK_SH: Para adquirir un bloqueo compartido (lector)
  • LOCK_EX: Para adquirir un bloqueo exclusivo (escritor)
  • LOCK_UN: Para liberar un bloqueo, sea del tipo que sea
El tercer elemento es opcional se establece a TRUE si el bloqueo esta teniendo lugar y a FALSE si no es así.

La función flock normalmente bloquea (no retorna), hasta que se pueda asegurar un bloqueo. Si no deseamos esperar y dejar de este modo nuestro código bloqueado, estableceremos con OR las constante LOCK_NB a la condición como; LOCK_EX | LOCK_NB. Esto hará que la función retorne de inmediato, y si no consiguió un bloqueo, puede esperar un segundo (con la función sleep(1)) y reintentarlo de nuevo hasta en 15 ocasiones.
Hasta aquí todo es teoría pero podemos verlo en el siguiente script:
<?php
 $handle = fopen("archivo/file.txt", "w");
 $text = "Éste\nes\nel\ntexto del bloqueo.";
 //se comprueba que el archivo no este bloqueado
 if (flock($handle, LOCK_EX | LOCK_NB)) {
  echo "<p>Se bloqueó el archivo. </p>";
 //comprueba que se pueda escribir en el archivo
 if (fwrite($handle, $text) == FALSE) {
  echo "<p>No se puede escribir en file.txt. </p>";
 }
 else {
  echo "<p>Se escribió en data.txt.</p>";
 }
 //desbloquea el archivo para otro usuario
 flock($handle, LOCK_UN);
  echo "<p>Se desbloqueó el archivo. </p>";
 }
 //desde aquí solo lee el archivo para comprobarlo
 $handle = fopen("archivo/file.txt", "r");
 if($handle){
  echo '<p>El archivo se ha abierto correctamente</p><p>';
  while ($char = fgetc($handle)){
   if ($char == "\n"){
    $char='</p><p>';
   }
   echo $char;
  }
  fclose($handle);
 }else{
  echo '<p>ERROR AL ABRIR EL ARCHIVO</p>';
 }
?>

Lo cual nos da como resultado la entrada al archivo y su modificación mientras lo bloquea para que otro usuario no pueda modificarlo al mismo tiempo.
Se bloqueó el archivo.
Se escribió en file.txt.
Se desbloqueó el archivo.
El archivo se ha abierto correctamente
Éste
es
el
texto del bloqueo.



martes, 18 de noviembre de 2014

PHP (08) Archivos (11) Añadiendo información a un archivo

Vimos como escribir en un archivo con fwrite, pero de esta forma se borraban los datos dentro del archivo para que se escribieran los nuevos, ahora vamos a añadir datos; para ello lo primero que tenemos es que abrir nuestro archivo con el parametro "a" con el fin de anexarle información.
$handle = fopen("archivo/file.txt", "a");

A continuación se escribe el nuevo texto se guarda en una variable y se hace exactamente lo mismo que si quisíeramos escribir, es decir introducimos fwrite en el condicional de un if y si devuelve TRUE que escriba y de lo contrario q muestre un mensaje de error.
De forma adicional nosotros vamos a mostrar el nuevo resultado para que se vea que ha funcionado:
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha escrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  if ($char == "\n"){
   $char='<br>';
  }
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}

Y en el resultado de nuestro script podemos ver que efectivamente se ha añadido:
Se ha escrito correctamente en el archivo
El archivo se ha abierto correctamente
Este
es
el
nuevo
textoEste
es
el
texto
adicional

lunes, 17 de noviembre de 2014

PHP (08) Archivos (10) Escribiendo en un archivo fwrite

Ya sabemos como abrir, leer, copiar, borrar y cerrar un archivo, pero aun no sabemos como escribir en él, este proceso es un tanto más complicado pero no en demasía, ya que lo primero que tenemos que hacer es abrir nuestro archivo en modo ecritura "w".
Despues debemos de crear una variable con nuestra cadena de texto, que será el texto que entrará en nuestro archivo.
A continuación usaremos la funcion fwrite() en un if, ya que esta funcion devuelve TRUE si se logra escribir y FALSE si no se logra.
<?php
$handle = fopen("archivo/file.txt", "w");
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha esrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

De esta forma ya estaría reescrito nuestro archivo file.txt, pero además luego se puede leer para mostrarlo!
<?php
$handle = fopen("archivo/file.txt", "w");
$texto = "Este\nes\nel\nnuevo\ntexto";
if (fwrite($handle, $texto)){
 echo "Se ha esrito correctamente en el archivo";
 fclose($handle);
} else {
 echo "No se ha podido escribir en el archivo";
}

$handle = fopen("archivo/file.txt", "r");
if($handle){
 echo '<p>El archivo se ha abierto correctamente</p>';
 while ($char = fgetc($handle)){
  if ($char == "\n"){
   $char='<br>';
  }
  echo $char;
 }
 fclose($handle);
}else{
 echo 'ERROR AL ABRIR EL ARCHIVO';
}
?>

Y obtenemos el siguiente resultado:
Se ha esrito correctamente en el archivo
El archivo se ha abierto correctamente
Este
es
el
nuevo
texto