How to add a “out of stock” badge in Woocommerce using AVADA (SOLVED)

You can easily add an “out of stock” badge in Woocommerce by just using CSS:

.outofstock .images a, .products .outofstock a {position:relative;display:block;}
.products .outofstock .fusion-image-wrapper a:before {
    height: 100%;
    position: absolute;
    width: 100%;
    display: inherit !important;
    content: "Agotado \A Disponible por encargo"; // customize this message
    white-space: pre;
    font-size: 0.8em;
    letter-spacing:2px;
    font-weight:bold;
    background: rgba(0, 0, 0, 0.5);
    text-transform: uppercase;
    position: absolute;
    width: 100%;
    text-align: center;
    display: block;
    opacity: 0.7;
    line-height: normal;
    top: 0%;
    padding-top:40%;
    color:white;
}

This is how it looks like in my WordPress install (using Avada theme):

WOOCOMMERCE out of stock avada theme

Actualizar navegador Porsche PCM2.1 (Boxster, Cayenne, Cayman): La guía definitiva

Os dejo el manual para actualizar el navegador PCM2.1 de Porsche (Boxster / Cayenne / Cayman) a los últimos mapas disponibles a día de hoy (versión 2015). Probado en PCM2.1 equipado en Porsche BoxsterS MY05 con amplificador BOSE.

DISCLAIMER: No me hago responsable de cualquier daño ocasionado en vuestros PCM.

El software completo de actualización de compone de 3 CD’s y un DVD.

CD1: 000.043.205.46.002 – update LevelA to LevelB. http://dl.dropbox.com/u/14202177/Update-PCM%202.1-disco%201.nrg

CD2: 000.043.205.46.003 – updates Motorola Phone Module, if installed. http://dl.dropbox.com/u/14202177/Update-PCM%202.1-disco%202.nrg

CD3: 000.044.901.40 – Update for PCM21_NavDVD – Updates Navigation after Level B is installed or if Level B or Level C/C1 was previously installed) http://uploaded.net/file/nl4gapqx

DVD Mapas. En mi caso PORSCHE PCM 2.1 DVD EUROPE 2015 (mapas 2015)

http://ul.to/nu9hrsvw
http://ul.to/3yxpp8pl
http://ul.to/6awukige
http://ul.to/2xuzbgka
http://ul.to/144f68w1
http://ul.to/hpsmtt56

 

Actualizar navegador PCM2.1: PASO 0

Descargar todos los CD’s y grabarlos. Os recomiendo seguir el método indicado por el forero Grimosa (aqui: [url]http://soloporsche.com/showpost.php?p=1288917&postcount=1213[/url]). Es decir, grabarlos a mínima velocidad (1x) con ImgBurn, sobre CD-R de marca reconocida, tipo Verbatim.

Una vez tengamos todo grabado, nos vamos al coche, sacamos el CD del PCM 2.1 y también sacamos la SIM, si hubiera una insertada.

Después pasamos al PASO 1.

Actualizar navegador PCM2.1: PASO 1

Vamos a averiguar la versión de firmware de nuestro PCM2.1. Para ello, se enciende el PCM y se aprietan MAIN+NAVI simultáneamente.

En mi caso, los datos de inicio eran estos:

Aparato: Software de sist.
Teórico: 04113AD1 / 1104
Real: 04113AD1 / 1104
Introducidos: Sí
Encontrados: Sí

Aparato: PCM
Teórico:04202JD1 / 3004 
Real:04202JD1 / 3004
Introducidos: Sí
Encontrados: Sí

Aparato: Amplificador
Teórico: 00017500 / 3504
Real: 00017500 / 3504 
Introducidos: Sí
Encontrados: Sí

Aparato: Sistema navegac...
Teórico: /
Real: 00174156 / 2704
Introducidos:Sí
Encontrados:Sí

PCM2.1 firmware version mode level A

PCM2.1 bose amplifier firmware version mode level A

Si tenéis equipo BOSE, lo más importante es mirar la versión del firmware que tiene. Si tiene la versión 16400 lo más probable es que el equipo quede inservible al actualizar el navegador. Por tanto, NO ACTUALICES si tienes la 16400.

Otro dato importante es la versión del Aparato: PCM. Los valores posibles serán:

04035xxx --> indica Standard Version.
04202xxx --> indica Model Level A.
05024xxx --> indica Model Level B.
05395xxx --> indica Model Level C.

Si estás en la 04035xxx te recomiendo que NO HAGAS NADA, podrías dejar el BOSE inservible. La propia documentación de PORSCHE lo indica:
[quote]Vehicles equipped with Standard Version (04035xxx) first need to be updated to Model Level A (04202xxx) using update disc 000.043.205.46.004 which is not included in this kit. Refer to bulletin Group 9, #1/04, titled “PCM2.1 & BOSE Amplifier Spare Parts Requirements, Part ID 9110.
Read the information in bulletin #1/04 carefully. An update of the BOSE Amplifier (if equipped) may be necessary.[/quote]

Si estás en Model Level A, debes actualizar a Model Level B para poder usar el DVD de mapas de 2015. Ve al PASO 2.

Si estás en Model Level B, únicamente debes actualizar el firmware del navegador y los mapas. Ve al PASO 4.

Actualizar navegador PCM2.1: PASO 2

El propósito de este paso es actualizar del model level A al model level B. Para ello vamos a utilizar el CD1: 000.043.205.46.002.

Lo primero, ENCIENDE EL MOTOR. Si por un casual el PCM se apaga durante la actualización de firmware, el equipo puede quedar inservible. Asi pues, MANTEN ENCENDIDO EL MOTOR durante esta actualización. Haz todo el proceso en un sitio bien ventilado.

Enciende el PCM.

Inserta el CD1 en la ranura del PCM. Pondrá algo asi como “reconociendo CD de datos” y al poco, se iniciará automáticamente. Nos preguntará si queremos actualizar a Model Level B. Le decimos que Sí. Tarda un poco, pero al poco sale una barra de proceso. Ahora podemos tener dos casos, en función de si tienes instalado módulo de teléfono y la versión del mismo.

En el caso de vehículos sin módulo de teléfono o con el módulo de teléfono Motorola, la actualización te irá indicando 2 pasos (R51 y R02).

pcm2.1a update pcm2.1b

pcm2.1a update pcm2.1b

En el caso de vehículos con módulo de teléfono Harman/Becker, la actualización se hará en tres pasos (V5.03.4, R51 y R02).

Tarda un rato. No seas impaciente, no toques nada hasta que termine. Cuando termine el PCM se apagará y volverá a encenderse solo. Si no se encendiera solo, enciéndelo tú a mano y saca el CD.

Si tienes módulo de teléfono Motorola, pasa al PASO 3. Sino, pasa al PASO 4.

Actualizar navegador PCM2.1: PASO 3

El propósito de este paso es actualizar el firmware del módulo de teléfono Motorola.
Asegúrate de que no haya SIM en la ranura de SIM y de tener el motor encendido.

Inserta el CD2 (000.043.205.46.003). Te pondrá algo asi como “reconociendo CD de datos” y al poco te preguntará si quieres actualizar MicPegel Motorola.

update micpegel motorola porsche pcm2.1

Le dices que sí y esperas. Saldrá una barra de proceso. Te indicará que está actualizando a versión R36.

update micpegel motorola porsche pcm2.1

Al terminar aparecerá un mensaje indicando que el proceso ha concluido de forma exitosa.

update micpegel motorola porsche pcm2.1

Saca el CD del PCM y ve al PASO 4.

Actualizar navegador PCM2.1: PASO 4

Este paso debe acometerse cuando nuestro firmware está en Mode Level B, C o C1. Aprieta MAIN+NAVI y asegúrate de que la versión del PCM es 05024xxx (Model Level B) o 05395xxx (Mode Level C).

Saca el DVD de navegación anterior de su sitio. En mi Boxster está en el maletero delantero. En los Cayenne creo que está bajo el asiento del copiloto. Guarda ese DVD.

Inserta ahora en el DVD de navegación (NO en el PCM!) el CD3 (000.044.901.40). Apaga el PCM. Apaga el motor y déjalo apagado 2 minutos o más.

Enciende el motor y DÉJALO ENCENDIDO.

El navegador se encenderá automáticamente. Si no se encendiera, pulsa NAVI en el PCM.

Aparecerá un mensaje preguntándote si quieres actualizar el software de navegación. Le dices que sí.

update pcm2.1 navigation

Aparecerá una barra de proceso, que ira subiendo hasta llegar al 10%.

actualizar navegador pcm porsche boxster 987

Pasará del 10% al 0 y te pondrá: “error durante arranque navegación”.

actualizar navegador pcm porsche boxster 987

En ese momento, ve al cargador de DVD de navegación (maletero o asiento), saca el CD3 y mete el DVD con los mapas de 2015. Pondrá “Sistema navegación arrancando” y al poco, el proceso termina y ya tenemos los nuevos mapas.

actualizar navegador pcm porsche boxster 987

El firmware actualizado:
actualizar navegador pcm porsche boxster 987

Espero que os resulte útil.

Botón de flecha animada con CSS3

El otro día un amigo me pedía que metiera una flechita en movimiento en su web. Os dejo el ejemplo de cómo lo hice, por si os resulta útil. Para crear la flecha utilizo font-awesome 😉

1. En el MARCADO:

<span class="hero-btn-holder" style="">
   <a target="_blank" href="/#main-content" class="hero-btn hero-slider-button">
         <i style="color: #ffffff;" class="fa fa-angle-down fa-4x ut-service-box-icon"></i>
   </a>
</span>

2. En el CSS:

/* flecha abajo en movimiento */
/* buscamos el selector que sea la flecha (en este caso la selección está sacada de un theme de ejemplo) */
#ut-hero-captions > ul:nth-child(1) > li:nth-child(n) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > div:nth-child(1) > span:nth-child(2) > a:nth-child(1){
	cursor: pointer;
	-webkit-animation: jumpInc 2s infinite;
       -moz-animation: jumpInc 2s infinite;
         -o-animation: jumpInc 2s infinite;
            animation: jumpInc 2s infinite;
}

@-webkit-keyframes jumpInc {
	0%   {
		margin-top: -122%;
		opacity: 0;
	}
	50%  {
		margin-top: 0%;
		opacity: 1;
	}
	100% {
		margin-top: 122%;
		opacity: 0;
	}
}

@-moz-keyframes jumpInc {
	0%   {
		margin-top: -122%;
		opacity: 0;
	}
	50%  {
		margin-top: 0%;
		opacity: 1;
	}
	100% {
		margin-top: 122%;
		opacity: 0;
	}
}
@-o-keyframes jumpInc {
	0%   {
		margin-top: -122%;
		opacity: 0;
	}
	50%  {
		margin-top: 0%;
		opacity: 1;
	}
	100% {
		margin-top: 122%;
		opacity: 0;
	}
}
@keyframes jumpInc {
	0%   {
		margin-top: -122%;
		opacity: 0;
	}
	50%  {
		margin-top: 0%;
		opacity: 1;
	}
	100% {
		margin-top: 122%;
		opacity: 0;
	}
}

/* /flecha abajo */

Oracle: guess the query of a view [SOLVED]

Some time ago, someone at my work created a new View in our Oracle database called AUTORESUZ (notice the capitals!) and I wanted to know how this view was defined, this is, the query that lies under it.

You can list all the views defined at your Oracle database by having a look at all_views table which stores the following information of each view:

SQL> DESC all_views;
 Name					   NULL?    TYPE
 ----------------------------------------- -------- ----------------------------
 OWNER					   NOT NULL VARCHAR2(30)
 VIEW_NAME				   NOT NULL VARCHAR2(30)
 TEXT_LENGTH					    NUMBER
 TEXT						    LONG
 TYPE_TEXT_LENGTH				    NUMBER
 TYPE_TEXT					    VARCHAR2(4000)
 OID_TEXT_LENGTH				    NUMBER
 OID_TEXT					    VARCHAR2(4000)
 VIEW_TYPE_OWNER				    VARCHAR2(30)
 VIEW_TYPE					    VARCHAR2(30)
 SUPERVIEW_NAME 				    VARCHAR2(30)

The query information is stored in “text” row. So, let’s retrieve the query that our AUTORESUZ has defined:

SQL> SELECT text FROM all_views WHERE view_name = 'AUTORESUZ';
 
TEXT
----------
SELECT a1.

OMFG! The query seems to be there, but it is truncated…

In order to view the full query, you must set long with a value greater that text’s length. Like this:

SQL> SELECT text_length FROM all_views WHERE view_name = 'AUTORESUZ';
 
TEXT_LENGTH
-----------
	369
 
SQL> SELECT text FROM all_views WHERE view_name = 'AUTORESUZ';
 
TEXT
----------
SELECT a1.
 
SQL> SET long 369
SQL> SELECT text FROM all_views WHERE view_name = 'AUTORESUZ';         
 
TEXT
--------------------------------------------------------------------------------
SELECT a1.rec_key AS arecord,
  REGEXP_REPLACE(a2.rec_data,'^\|a(.*)','\1') AS nipuz,
  REGEXP_REPLACE(REGEXP_REPLACE(REGEXP_REPLACE(a1.rec_data,'^\|a(.*)\|6\(UZ.*','
\1'), '(.*)\|c(.*)','\1'), '(.*),\|d(.*)','\1') AS autoruz
 
 FROM var_fields2 a1,  var_fields2 a2
 WHERE a1.rec_key LIKE 'a%' AND a1.MARC_TAG='100' AND
  (a1.rec_key=a2.rec_key AND a2.MARC_TAG='090')

Joomla: know the section [SOLVED]

Lets suppose you are developing a joomla module and want to know the section in which you are.

The following code might help 🙂

<?php
function getSection($iId) {
    $database = &JFactory::getDBO();
    if(Jrequest::getCmd('view',0) == "section") {
        return JRequest::getInt('id');
    }
    elseif(Jrequest::getCmd('view',0) == "category") {
        $sql = "SELECT section FROM #__categories WHERE id = $iId ";
        $database->setQuery( $sql );
        $row=$database->loadResult();
        return $row;
    }
    elseif(Jrequest::getCmd('view',0) == "article") {
        $temp=explode(":",JRequest::getInt('id'));
        $sql = "SELECT sectionid FROM #__content WHERE id = ".$temp[0];
        $database->setQuery( $sql );
        $row=$database->loadResult();
        return $row;
    }
}
 
// use it like:
$sectionId=getSection(JRequest::getInt('id'));
?>

Python & Oracle [SOLVED] ImportError: libclntsh.so.11.1: wrong ELF class: ELFCLASS32

If you are getting a message like this:

>>> import cx_Oracle
Traceback (most recent call last):
  File "<stdin>", line 1, in ?
ImportError: libclntsh.so.11.1: wrong ELF class: ELFCLASS32

It means you are having issues with ELF (Executable and Linkable Format)

How to solve em?

First, locate the path to libclntsh.so.11.1 (usually in /usr):

[root@zaguan importaFHdesdeRoble]# find / -name "libclntsh.so.11.1"
/usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1
/usr/lib64/libclntsh.so.11.1

Note the presence of two files. Lets check wether they are for 32bits or 64bits:

[root@zaguan importaFHdesdeRoble]# file /usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1
/usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1: ELF 64-bit LSB shared object, AMD x86-64, version 1 (SYSV), not stripped
 
[root@zaguan importaFHdesdeRoble]# file /usr/lib64/libclntsh.so
/usr/lib64/libclntsh.so: ELF 32-bit LSB shared object, Intel 80386, version 1 (SYSV), not stripped

If your system is 64 bits (check it out with uname -a) you should be using the ELF 64-bit LSB shared object.

So, you can just:

mv /usr/lib64/libclntsh.so.11.1 /usr/lib64/libclntsh.so.11.1__32bits
cp /usr/lib/oracle/11.1/client64/lib/libclntsh.so.11.1 /usr/lib64/libclntsh.so.11.1

And now, you will be able to import Oracle library from python:

# python
Python 2.4.3 (#1, Apr 14 2011, 20:41:59)
[GCC 4.1.2 20080704 (Red Hat 4.1.2-50)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import cx_Oracle
>>>

Or, if you want to do it “the right way”. Put this in a script.sh file and alter

#!/bin/bash
PATH=$PATH:$HOME/bin
ORACLE_HOME=/usr/lib/oracle/11.1/client64
LD_LIBRARY_PATH=/usr/lib/oracle/11.1/client64/lib
export ORACLE_HOME
export LD_LIBRARY_PATH
export PATH
 
# ALTER HERE with the path to python and the file which has the python code to connect to Oracle
salida=`/usr/bin/python ./pythoncodefile.py`

Mysql SELECT DISTINCT y tildes en utf8 [RESUELTO]

La verdad es que las tildes siempre son una lata en programación y en consultas a bases de datos MySQL
.
Imagina que tienes una tabla con los siguientes valores

ID value
1 Óscar
2 Oscar

Antes de empezar a hacer queries a la BD, nos aseguraremos de que se tiene en cuenta el utf8:

mysql> set name 'utf8';

Observa lo que sucede si haces un select distinct a secas:

mysql> SELECT DISTINCT value from table;
+--------+
| value   |
+--------+
| Oscar   |
+--------+

Los campos de tipo textual (CHAR y VARCHAR por ejemplo) son case-insensitive y accent-insensitive. Esto es, tanto OSCAR como Óscar, Oscar y ÓSCAR son lo mismo para mysql.

Si queremos que nos distinga esto (que Óscar y Oscar sean distintos), tenemos la opción de usar el modificador MD5 o, más simple, el modificador BINARY

mysql> SELECT DISTINCT binary value from table;
+--------+
| value   |
+--------+
| Oscar   |
+--------+
| Óscar   |
+--------+

ENGLISH:
Distinct works depending on column type.
Varchar is case insensitive and accent agnostic while comparing,
Binary string (Binary) columns require byte-to-byte match.
Keyword BINARY in front of an expression, makes it a byte-to-byte
comparison.

Ver imágenes de imageshack (evitar ranitas) [solucionado]

Si no veis las imágenes de imageshack y aparece la dichosa ranita (cubito de hielo con una rana dentro):
rana imageshack

Se debe a que imageshack controla el valor del campo referer de las cabeceras (headers) http para no permitir el hotlinking desde algunos sitios web.

Podéis solucionarlo siguiendo estos pasos:

Eliminar ranitas de imageshack en FIREFOX

1. Herramientas > Complementos
2. Obtener complementos
3. Buscamos ‘RefControl’
4. Descargamos e instalamos el complemento. Se reiniciará Firefox
5. Herramientas > Opciones RefControl…
6. Añadir sitio. En sitio ponemos imageshack.us
7. En acción, ponemos ‘Bloquear – no enviar referer’
8. Aceptamos, y aceptamos de nuevo.

Eliminar ranitas de imageshack en CHROME

En el icono del escritorio de Google Chrome boton derecho -> Propiedades
En la linea Destino: “C:\Archivos de programa\Google\Chrome\Application\chrome.exe”
Al final del todo tenemos que añadir “–no-referrers” (importante añadir un espacio)
con lo cual la linea Destino quedaria asi:
“C:\Archivos de programa\Google\Chrome\Application\chrome.exe” “–no-referrers”

Eliminar ranitas de imageshack en OPERA

Menú—> Configuración —> Opciones —> Avanzado —> Redes —> Desactivar casilla de “enviar info de referencia”.

También podéis usar tinypic u otros servicios que sí admiten hotlinking para evitar problemas a otros usuarios.

(Via forocoches).

[SOLVED] An Unexpected HTTP Error occurred during the API request – wordpress 3

If you are getting this error in WordPress 3:
An Unexpected HTTP Error occurred during the API request

Edit your wp-includes/class-http.php

Search this:

$defaults = array(
			'method' => 'GET',
			'timeout' => apply_filters( 'http_request_timeout', 5),

And change it to:

$defaults = array(
			'method' => 'GET',
			'timeout' => apply_filters( 'http_request_timeout', 30),

Should work now 😉

If it does not:

Install Core control plugin
Head to it’s menu under Tools, Select the HTTP Access module, Save the page.
Head over to the new HTTP tab along the top of the page.

What transports is it using? Does it make a difference if you disable the currently active transport?

Usual transports are (ordered by priority of use):

PHP HTTP Extension	
cURL	
PHP Streams	
PHP fopen()	
PHP fsockopen()

Next to each transport you will find if they are Available or Not available.

If the cURL transport is the currently active one, Disable that. Should work now!
curl transport disabled wordpress core control

If it does not, refer to this post at wordpress.org

Eliminar tildes con python [SOLUCIONADO]

Es muy probable que si programas en python te encuentres, alguna vez, con una situación en la que debes eliminar las tildes de algún texto.

Esto se puede hacer fácilmente utilizando el módulo unicodedata.

He creado la funcion elimina_tildes tal que asi:

1
2
3
4
5
6
7
import unicodedata
def elimina_tildes(s):
   return ''.join((c for c in unicodedata.normalize('NFD', s) if unicodedata.category(c) != 'Mn'))
 
# que se puede usar asi:
>>> print elimina_tildes(u"córcholis")
corcholis

Espero que os resulte útil.

Más detalles en stackoverflow.com