Usar setInterval(función, milisegundos) para ejecutar una función con un retraso de milisegundos.
No lo hace repetidamente, pero una estrategia común es ejecutar el código y llamar a setTimeout al final del script.

<!DOCTYPE html>
<html>
<head>
<script>
function startTime() {
var today = new Date();
var h = today.getHours();
var m = today.getMinutes();
var s = today.getSeconds();
m = checkTime(m);
s = checkTime(s);
document.getElementById(‘txt’).innerHTML =
h + «:» + m + «:» + s;
var t = setTimeout(startTime, 500);
}
function checkTime(i) {
if (i < 10) {i = «0» + i};  // add zero in front of numbers < 10
return i;
}
</script>
</head>

<body onload=»startTime()»>

<div id=»txt»></div>

</body>
</html>

Cuenta Atrás

var count=30;

var counter=setInterval(timer, 1000);

function timer()
{
count=count-1;
if (count &lt;= 0)
{
clearInterval(counter);
//termina el contador
return;
}

//Aquí el código para mostrar los segundos
document.getElementById(‘contador’).innerHTML = count;
}

<div id=»contador»></div>

Usando el siguiente div:

<div id=»probando»
style=»display:block;height:50px;width:50px;»
onclick=»myFunction()»>
Prueba con javascript
</div>

Vamos a realizar algunos ejercicios con el evento onclick de javascript.

 

«Herramientas»:


– Obtener un elemento por su ID: document.getElementById(«id») en cada ejemplo.
– Un poco de HTML (el div anterior), con algo de estilo y el evento onclick asociado a una función que hemos llamado myFunction
– Para el primer ejemplo, obtenemos las medidas del elemento con .offsetWidth y .offsetHeight
– Para el segundo, establecemos el color con .style.color
– Para el primero y el tercero, establecemos las medidas con .style.width y .style.height


1- Ampliar y reducir según tamaño


<script>

function myFunction() {

var ancho = document.getElementById(«probando»).offsetWidth;
var alto = document.getElementById(«probando»).offsetHeight;

if (ancho<100) {
document.getElementById(«probando»).style.width = «100px»;
document.getElementById(«probando»).style.height = «100px»;
} else {
document.getElementById(«probando»).style.width = «50px»;
document.getElementById(«probando»).style.height = «50px»;

}
}

</script>


2- Cambiar color de fondo


<script>
function myFunction() {
document.getElementById(«probando»).style.color = «red»;
}
</script>


3- Establecer tamnaño

<script>
function myFunction() {
document.getElementById(«probando»).style.width = «100px»;
document.getElementById(«probando»).style.height = «100px»;

}
</script>

 Uso de la librería: http://core.tcl.tk/tcllib/doc/trunk/embedded/www/tcllib/files/modules/struct/matrix.html#9

# Para empezar a trabajar

package require struct

# Creamos matriz vacía

::struct::matrix mymatrix

# Información sobre la matriz

mymatrix cells
mymatrix rows
mymatrix columns

# Añadir filas y columnas
#Añadimos valores fijos, tenemos una matriz de 1×1

mymatrix add column 5
mymatrix add column 5
mymatrix add row 5
mymatrix add row 5

mymatrix cells
mymatrix rows
mymatrix columns

# Para verla

mymatrix format 2string

# Próximas funciones para estudiar

# matrixName insert column column ? values?
# matrixName insert row row ? values?

Una consulta cruzada es una consulta MySQL que toma datos de varias tablas que comparten campos. Por ejemplo, la tabla ps_product contiene un campo id_product, al igual que la tabla ps_product_lang.

En la siguientes consultas intervienen varias tablas de Prestashop. Hemos tenido que hacer varias consultas parecidas para nuestros módulos personalizados de la versión 1.4, y nos encontramos actualizando estos módulos a la nueva versión (1.6), con lo que hemos de revisar estas consultas.

Para leer sobre más formas de combinar las tablas (INNER JOIN, RIGHT JOIN): https://es.wikipedia.org/wiki/Join

Os invito a probar estas consultas en vuestro PHPMyAdmin.

SELECT DISTINCT ppl.id_product AS IDPRODUCT,
ppl.name AS NAME,
pp.active AS ACTIVE,
pp.reference AS REFERENCIA,

pcl.name AS NOMBRECAT

FROM ps_product_lang ppl

LEFT JOIN ps_product pp ON ppl.id_product=pp.id_product
LEFT JOIN ps_category_lang pcl ON pp.id_category_default=pcl.id_category

WHERE ppl.id_lang=3 AND pcl.id_lang=3
ORDER BY pp.reference ASC

**

SELECT DISTINCT pal.name AS PALNAME,
pal.id_attribute AS PALIDATTRIBUTE,
ppac.id_product_attribute AS PPACIDPRODATTRIBUTE,
ppa.id_product AS PPAIDPROD

FROM ps_attribute_lang pal

LEFT JOIN ps_product_attribute_combination ppac ON pal.id_attribute=ppac.id_attribute
LEFT JOIN ps_product_attribute ppa ON ppac.id_product_attribute=ppa.id_product_attribute

WHERE pal.id_lang=1
ORDER BY ppa.id_product ASC

**

SELECT DISTINCT pal.name AS PALNAME,
pal.id_attribute AS PALIDATTRIBUTE,
ppac.id_product_attribute AS PPACIDPRODATTRIBUTE,
ppa.id_product AS PPAIDPROD,
pa.id_attribute_group AS PAIDATTRIBGROUP

FROM ps_attribute_lang pal

LEFT JOIN ps_product_attribute_combination ppac ON pal.id_attribute=ppac.id_attribute 
LEFT JOIN ps_product_attribute ppa ON ppac.id_product_attribute=ppa.id_product_attribute
LEFT JOIN ps_attribute pa ON pal.id_attribute=pa.id_attribute

WHERE pal.id_lang=1 AND pag.id_group=4
ORDER BY ppa.id_product ASC

Para la integración de nuestra tienda online con la empresa de transportes Correos Express, hemos elaborado un módulo que genera un documento compatible con su software, una plataforma llamada AlerEti. Este documento debe cumplir las especificaciones que el transportista indica a la hora de hacer la integración, como el número de campos y la longitud y caracteres permitidos en los mismos.

correos express

Para ello hemos elaborado un módulo en Prestashop que permite generar este fichero (en formato CSV) relleno con los datos de los pedidos que le indiquemos.

Algunas normas sobre el fichero a generar:

  • El fichero debe ser un CSV separado por espacios, aunque se permite elegir el carácter separador (usaremos el delimitado por punto y coma).
  • Pueden fijarse campos que siempre tengan el mismo valor en la plataforma.
  • El nombre del fichero y la ruta no pueden contener espacios.
  • Otras especificaciones indicadas por la empresa de transportes, específicas de los servicios prestados a cada empresa.
  • Si la dirección del destinatario excede los caracteres que el campo requiere (40), hay un campo «observaciones» que se puede utilizar para completar la dirección.

Si estás interesado/a en el módulo y necesitas ayuda, deja un comentario o escríbenos un mail y solucionaremos tus dudas.

Velocidad de carga


Las siguientes imágenes muestran la velocidad de carga más alta conseguida después de habilitar la compresión para HTML en el servidor.

Velocidad de carga en dispositivos móviles

 

Velocidad de carga en ordenadores de sobremesa

Edición en velocidad de carga: Obtenemos algunas quejas del cliente relativas a la aparente poca calidad del servicio de hosting. Seguimos optimizanto para mejores resultados.

Modificación de texto LOPD – más corto – menos espacio ocupado por plugin

Texto anterior: 

Este sitio web utiliza cookies propias y de terceros para mejorar la experiencia de navegación del Usuario y realizar análisis estadísticos sobre su utilización. Si continúa navegando se considerará que acepta la totalidad de condiciones del AVISO LEGAL, incluida la Política de Cookies. Pulse Aceptar para dejar de visualizar este mensaje.
[cookie_button] [cookie_link]


Evaluación del rendimiento del plugin «Aviso de cookies»


El plugin no nos convence por su HTML, que bloquea el contenido de la parte superior de la página. Div flotante inferior semi-transparente es mejor opción.

Cambio del formulario de comentarios de WordPress

El cambio hemos de hacerlo e la función wp_comments() que se declara en el archivo wp-includes/comment-template.php*. 

Adición de código .htaccess

Hemos añadido líneas de código al archivo htacess para poder enviar información de fecha de expiración de recursos y comprimir la salida de datos, junto a las funciones de reescritura de URL. El resultado final del archivo .htaccess:


# BEGIN WordPress


<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /wordpress/
RewriteRule ^index.php$ – [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /wordpress/index.php [L]


</IfModule>

# END WordPress
# BEGIN GZIP
<ifmodule mod_deflate.c>


AddOutputFilterByType DEFLATE text/text text/html text/plain text/xml text/css application/x-javascript application/javascript


</ifmodule>

# END GZIP


ExpiresActive On
ExpiresDefault A0


# expiracion de 1 mes para archivos estaticos
<FilesMatch «.(gif|jpg|jpeg|png|swf|js|css)$»>
ExpiresDefault «access plus 1 months»

</FilesMatch>



***


* Se encuentra una explicación muy interesante en http://www.mmfilesi.com/blog/modificar-formulario-comentarios-wordpress-sin-usar-un-plugin/

Otras notas sobre el diseño y la optimización


Vídeos embebidos con diseño responsive:

 <div class=»cajadevideo»>
        <div class=»video»>
            <iframe src=»http://www.youtube.com/embed/XXX»></iframe>
        </div>
        <div class=»video»>
            <iframe src=»http://player.vimeo.com/video/XXX»></iframe>
       </div>
    </div>
 

.cajadevideo{

width:560px;
margin:auto;

}

.video{

height:0px;
width:100%;
max-width:560px;
padding-top:56.25%;
position:relative;

}

iframe{

position:absolute;
height:100%;
width:100%;
top:0px;
left:0px;

}