Blog de Futurízate

Solución al problema de subir imágenes en Wordpress

5 de Diciembre de 2011

Cuando estaba preparando el post “Cómo mostrar precios sin IVA en Prestashop” me he dado cuenta que no podía subir imágenes. El error que me aparecía era open_basedir restriction in effect, según parecía en un primer momento no tenía permisos de escritura la carpeta uploads dónde guardar las imágenes.

Mi primera paso fué dar permisos de la carpeta a 775 y más tarde a 777 pero nada. Finalmente encontré la solución investigando por foros y gracias a google (como muchas veces pasa).

Los pasos son los siguientes:

  1. Acceder a la administración de nuestro Wordpress
  2. Ir a Opciones > Miscelánea
  3. El la opción Guardar los archivos subidos en esta carpeta
    tenia de valor /var/www/vhost/xxxxxxxxxxxx/home/html/blog/wp-content/uploads y este es el motivo de que no funcionara
  4. Modificarlo por el directorio por defecto wp-content/uploads
  5. Listo!!

Cómo mostrar precios sin IVA en Prestashop

5 de Diciembre de 2011

Nada más fácil que acceder a Backoffice > Clientes > Grupos

Seleccionamos Editar la opción Predeterminado.

Cambiamos el Método de visualización de precios a Impuestos no incluidos y listo!!

Añadir Google Analytics desde jQuery

21 de Febrero de 2011

Investigando como podríamos implementar el código del Google Analytics no intrusivo en nuestras webs, como el típico código al final del tag BODY:

<script type="text/javascript">
	var _gaq = _gaq || [];
	_gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
	_gaq.push(['_trackPageview']);

	(function() {
		var ga = document.createElement('script');
		ga.type = 'text/javascript';
		ga.async = true;
		ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
		var s = document.getElementsByTagName('script')[0];
		s.parentNode.insertBefore(ga, s);
	 })();
 </script>

Hemos descubierto una opción muy interesante, observamos que utilizanto Regular Expressions podemos conseguir analizar no sólo las páginas que visitamos sino los enlaces como mailto, archivos PDFs, enlaces externos, etc. que se incluyan en nuestra web. Se pueden ampliar para obtener los resultados deseados en cada caso y se trata del siguiente código:

$(document).ready(function(){

	var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");

	//use jQuery to call the Google Analytics JavaScript
	$.getScript(gaJsHost + "google-analytics.com/ga.js", function(){

		//tell Analytics about the current page load using standard _trackPageview method
		try {
			var pageTracker = _gat._getTracker("UA-XXXXXXXX-X");
			pageTracker._trackPageview();
		} catch(err) {}

		//loop though each anchor element
		$('a').each(function(){

			var href = $(this).attr('href');
			var filetypes = /\.(zip|exe|pdf|doc*|xls*|ppt*|mp3)$/i;

			//check for links starting with http or https, making sure that links to our own domain are excluded
			if ((href.match(/^https?\:/i)) && (!href.match(document.domain))){
				$(this).click(function() {
					var extLink = href.replace(/^https?\:\/\//i, '');
					pageTracker._trackEvent('External', 'Click', extLink);
				});
			}
			//check for links starting with mailto:
			else if (href.match(/^mailto\:/i)){
				$(this).click(function() {
					var mailLink = href.replace(/^mailto\:/i, '');
					pageTracker._trackEvent('Email', 'Click', mailLink);
				});
			}
			//check for links with file extension that match the filetypes regular expression:
			else if (href.match(filetypes)){
				$(this).click(function() {
  					var extension = (/[.]/.exec(href)) ? /[^.]+$/.exec(href) : undefined;
					var filePath = href.replace(/^https?\:\/\/(www.)mydomain\.com\//i, '');
					pageTracker._trackEvent('Download', 'Click - ' + extension, filePath);
				});
			}
		});
	});
});

Con este código, hemos realizado una prueba y el resultado es:

Eventos creados desde Google Analytics en jQuery

Esperamos que os sea tan útil como seguro no lo será para nosotros de ahora en adelante.

La Utopía Del Bueno, Bonito Barato Aplicada Al Diseño Gráfico – Infografia

29 de Diciembre de 2010

Genial artículo de los compañeros de “Caja de ideas” que tiene como resumen:Si lo que buscas es algo…

  • Rápido, Barato y Bueno: Utopía Imposible
  • Rápido y Barato: Conseguirás algo feo, rápido y descuidado
  • Rápido y Bueno: Tendrás que pagarlo
  • Bueno y Barato: Justo a tiempo para ser demasiado tarde (tendrás que invertir en tiempo hasta conseguirlo)

La otra opción ya es para la gente que no busca diseño barato sino directamente gratis y entonces…

  • Gratis y Bueno: Inténtalo de nuevo (o lo que es lo mismo Nanai de la china)
  • Gratis, Rapido: Basura
  • Gratis, Rapido y Bueno: Sal Corriendo (Si era una utopia cuando era barato, que decir ya cuando es gratis)

Artículo completo en: http://www.cajadeideasonline.com/la-utopia-del-bueno-bonito-barato-aplicada-al-diseno-grafico-infografia/

ICEMD Masterclass: Experiencia Coca Cola en redes sociales

11 de Noviembre de 2010

Hace unos día llegó hasta nosotros vía twitter este video. Bajo el título “ICEMD Masterclass: Experiencia Coca Cola en redes sociales”, Francisco Rodríguez (Interactive & CRM Manager en Coca Cola) nos da una lección sobre el impacto de las Redes Sociales y el valor de la Marca en ellas y hacia dónde va encaminadas.

Esta Masterclass fue el día 22 de octubre de 2010 y gracias a MarketingDirecto podemos disfrutar de ella. Vale mucho la pena ver el video entero, y aprender con sus conocimientos en un lenguaje llano y entendible por cualquiera.

Espero que lo disfrutéis:

http://www.youtube.com/watch?v=7CsXm4g-JOs

Cargar plugins de jQuery dinámicamente

29 de Septiembre de 2010

Cuando hemos de hacer webs de un tamaño respetable y necesitamos usar diferentes plugins de jQuery hay 2 opciones:

  1. Utilizamos diferentes head para cada página con sus correspondientes jquery.validate.js (formularios), jquery.galleriffic.js (galeria de imágenes), etc. específicos.
  2. Reaprovechar el head con un “include” y que se carguen todos los jquerys.

Obviamente la mejor opción es la primera por un tema de peso de la página. ¿Para que cargar jquery.validate.js sino tenemos formulario en esa página?

He aquí una tercera opción. Utilizamos la segunda opción con una variante, sólo cargamos el JS que necesitemos si se cumple una condición, en este caso si ha un formulario (form):

  $(document).ready(function() {
    if ( $("form").length > 0 ) {
      $.getScript('../js/jquery.validate.js', function() {
        /* Si ya se ha cargado el JS, ejecutamos el siguiente código */
        $("form").validate();
      });
    }
  });

Espero que os sea tan útil como lo ha sido para nosotros.

Nota: se puede cargar cualquier tipo de JS

Decodificador/Decompilador online gratuito

20 de Julio de 2010

Tratando de descubrir cómo funcionaba el pageflip de una página, me he topado con esta web: www.showmycode.com . Ellos mísmos se definen como Decodificador/Decompilador online gratuito. A mi me ha resultado muy útil para decompilar el código del fichero SWF pero según pone en la web también lo consigue con .php, .class, .exe, .dll y barra de códigos QR.

Espero que os pueda resultar tan útil como a mi.

Conversor online de video

18 de Julio de 2010

Estaba rebuscando en la red un programa que me transformara de MP4 a FLV para mostrar un video en sitio web de un cliente y me he topado con una web muy interesante. El sitio web es www.mediaconverter.org y permite conversiones de video entre diferentes formatos pero vía online. Subimos nuestro fichero y en poco tiempo nos aparece el botón de “Download” para descargarlo. Muy útil.

Soporta:
- Dispositivos móviles: MP3, MP4 y 3GP.
- Windows: FLV, WMV y WMA.
- Mac: MP3, MP4 y MOV.
- Linux: VLC, MP3 y MPEG.

(Ver especificaciones en su web)

Control de efectos jQuery y Accesibilidad

27 de Enero de 2010

Una web accesible se caracteriza por no necesitar ni estilos (CSS) ni javascript para poder visualizar su contenido perfectamente.

El uso desmesurado de librerías que simplifican el acceso a elementos HTML como puede ser jQuery (una de las más utilizadas) provoca que sitios web ricos en contenidos, no visualicen toda su información por generarse dinámicamente con este tipo de librerías.

Los efectos visuales, que hacen más atractivo nuestro sitio web, provocan algunos inconvenientes al convinarlo con la Accesibilidad.

Veamos un ejemplo para escenificar más claramente este caso:

- Pongamos que tenemos la siguiente estructura en nuestro sitio web:

- Inicio
- Quiénes somos
- Desarrollo web
- Plan Tarjeta de visita
- Plan Básico
- Plan Intermedio
- Plan Estándar
- Plan Profesional
- Plan Empresa
- Plan Empresa Plus
- Plan Tienda Virtual
- Plan Gran Portal
- Packs específicos
- Noticias
- Blog
- Contacto

- Pasamos esta estructura a HTML:

<ul id=”menuIzquierda”>
<li>Inicio</li>
<li>Quiénes somos</li>
<li>
Desarrollo web
<ul class=”hijosMenu”>
<li>Plan Tarjeta de visita</li>
<li>Plan Básico</li>
<li>Plan Intermedio</li>
<li>Plan Estándar</li>
<li>Plan Profesional</li>
<li>Plan Empresa</li>
<li>Plan Empresa Plus</li>
<li>Plan Tienda Virtual</li>
<li>Plan Gran Portal</li>
</ul>
</li>
<li>Packs específicos</li>
<li>Noticias</li>
<li>Blog</li>
<li>Contacto</li>
</ul>

En este caso, el menú debe visualizarse completamente ya que si inicialmente apareciera escondido y con jQuery se mostrara, la gente que no tuviera el javascript activado no podría navegar por nuestro sitio web. Ejemplo de ocultar parte del menú en jQuery:

$(document).ready(function(){
$(”#menuIzquierda .hijosMenu”).hide();
});

Este cambio de estado visual del menú en cada click que se hace en la página provoca el rechazo del usuario.

Para poder solventar esta problemática, utilizaremos la librería jQuery para conseguir agilizar los accesos a elementos de la página.

1.- Incluimos el fichero de Google Code directamente o lo guardamos en nuestro servidor:

<script type=”text/javascript” src=”http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js”></script>

2.- Cargaremos los estilos generales del sitio web (estilos.css) y seguidamente los estilos de la precarga (precarga.css). Este último archivo contiene los elementos web que van a tener efectos visuales y no queremos que se visualicen inicialmente.

<link type=”text/css” rel=”stylesheet” href=”estilos.css” media=”all”/>
<link type=”text/css” rel=”alternate stylesheet” href=”precarga.css” title=”precarga”/>

Contenido precarga.css:

/* Menu izquierda */
#menuIzquierda {
display:none;
}

3.- El archivo precarga.js, si tenemos activado el javascript, nos permitirá habilitar el fichero precarga.css que esconderá los elementos visuales que nos interese ocultar.

<script type=”text/javascript” src=”precarga.js”></script>

Contenido precarga.js:

function precarga(opcion) {
// Inicialmente activamos el CSS precarga y al finalizar la carga de la página lo ponemos como “CSS alternativo”
if ( opcion ) {
$(’link[title="precarga"]‘).attr(’rel’, ’stylesheet’);
} else {
$(’link[title="precarga"]‘).attr(’rel’, ‘alternate stylesheet’);
}
});

precarga(true);

4.- Por un tema de optimización y rapidez en la carga de la página, ubicaremos el fichero funciones.js justo antes de cerrar el tag BODY. Este fichero, además de contener las funciones que creamos oportunas para el buen funcionamiento de nuestro sitio web, activará la función precarga que deshabilitará el fichero precarga.css mostrando así los elementos ocultados.

<script type=”text/javascript” src=”funciones.js”></script>

Contenido funciones.js:

$(document).ready(function(){
precarga(false);
});

Código completo:

<html>
<head>
<link type=”text/css” rel=”stylesheet” href=”estilos.css” media=”all”/>
<link type=”text/css” rel=”alternate stylesheet” href=”precarga.css” title=”precarga”/>
<script type=”text/javascript” src=”http://jqueryjs.googlecode.com/files/jquery-1.3.2.min.js”></script>
<script type=”text/javascript” src=”precarga.js”></script>
</head>
<body>
<ul id=”menuIzquierda”>
<li>Inicio</li>
<li>Quiénes somos</li>
<li>
Desarrollo web
<ul class=”hijosMenu”>
<li>Plan Tarjeta de visita</li>
<li>Plan Básico</li>
<li>Plan Intermedio</li>
<li>Plan Estándar</li>
<li>Plan Profesional</li>
<li>Plan Empresa</li>
<li>Plan Empresa Plus</li>
<li>Plan Tienda Virtual</li>
<li>Plan Gran Portal</li>
</ul>
</li>
<li>Packs específicos</li>
<li>Noticias</li>
<li>Blog</li>
<li>Contacto</li>
</ul>
<script type=”text/javascript” src=”funciones.js”></script>
</body>
</html>

Esperamos que os sea de utilidad.

El Ajax nunca fué tan fácil

30 de Diciembre de 2009

Gracias a nuestro amigo jQuery podemos obtener fácilmente el contenido de una capa o de cualquier elemento que necesitemos de una página de nuestro servidor o externa.

En el siguiente ejemplo podemos observar cómo recuperamos los LI que contiene el elemento con ID “jq-p-Getting-Started” de nuestra página “/Main_Page”. Ese resultado lo cargamos en nuestra UL con ID “links”.

Más sencillo no puede ser.

  <html>
  <head>
    <script src="http://code.jquery.com/jquery-latest.js"></script>
    <script>
      $(document).ready(function(){
        $("#links").load("/Main_Page #jq-p-Getting-Started li");
      });
    </script>
  </head>
  <body>
  <b>jQuery Links:</b>
  <ul id="links"></ul>
  </body>
  </html>

Enlace: http://docs.jquery.com/Ajax/load