El 3 de junio saltaron las alarmas entre los clientes de PcComponentes: se estaban realizando compras fraudulentas con sus tarjetas. Por lo que se cuenta en esta noticia (ver noticia), parece ser que PcComponentes ha tenido un problema de seguridad y las cuentas de usuarios se han visto comprometidas, aunque más tarde la empresa ha querido desmentirlo. Lo que llama la atención es que se hayan visto implicados clientes de PcComponentes.

Este supuesto robo de información no debería haber supuesto un problema más allá de haber hecho público los datos de los usuarios, si no fuera porque al parecer, PcComponentes guardaba sus números de tarjetas en sus propias bases de datos, lo que ha llevado a los clientes a pensar que ha habido alguna filtración.

Llevamos años insistiendo en contra de guardar los datos bancarios de los usuarios a los clientes que nos piden guardar ellos mismos los números de tarjetas y de CCC con el objeto de hacer más cómoda la compra para sus clientes cuando éste repite. Y nuestra respuesta siempre ha sido la misma: hace falta tener una seguridad muy alta en los sistemas que custodian esos datos (no sólo implican una encriptación de datos, también una seguridad perimetral mayor, un técnico dedicado a los servidores, backups y la seguridad de la plataforma, etc), y esa seguridad es una inversión demasiado cara, por lo menos para un comercio electrónico medio, ya que hoy día no genera tanto margen de beneficio como para costear ese incremento en la seguridad. Un cliente no va dejar de comprar en un comercio electrónico simplemente porque tenga que meter su tarjeta cada vez, sobretodo si se le escribe una nota aclarando que es una medida de seguridad pasiva muy efectiva «¿Por qué no guardamos tu tarjeta bancaria? Porque en caso de hackeo, tus datos bancarios no se verán comprometidos». Al contrario, si se le explica, el comprador se sentirá más seguro en un comercio electrónico que no guarda la tarjeta frente al que sí lo guarda.

Más

Hace poco hemos tenido un error al actualizar un conocido plugin de WordPress. El error se mostraba en lugar del Slider que se había preparado:
Revolution Slider Error: You have some jquery.js library include that comes after the revolution files js include. This includes make eliminates the revolution slider libraries, and make it not work.

To fix it you can:
1. In the Slider Settings -> Troubleshooting set option: Put JS Includes To Body option to true.
2. Find the double jquery.js include and remove it.

Realmente el problema era otro, pero al dar este mensaje, comprobamos que se cargara todo correctamente. La solución que dan en foros a este problema, y la propia empresa recomienda, es la de actualizar WordPress, desactivar todos los plugins, todos los temas, asignar uno de los que vienen en WordPress por defecto y empezar a probar activando de uno en uno todos los plugins y el tema. Como esta solución no nos convencía mucho, ya que el plugin había funcionado bien hasta su actualización y por otra parte iba a llevarnos horas hacer la comprobación, exploramos otra vía, que resultó ser la solución correcta y que sólo nos llevó 20 minutos:
Abrimos la ventana de Inspeccionar de Chrome y nos fuimos a Console. Allí vimos que el problema real era que no podía cargar las librerías que traía el plugin en su carpeta de revslider/public/… por lo que le asignamos permisos 775 a esas carpetas. A continuación limpiamos todas las cachés, abrimos la web con una sesión de incógnito para cerciorarnos de que el error no se iba a reproducir por un problema de nuestro navegador y todo solucionado.

Esperamos que os ayude!!!

Más

Si al entrar en el detalle de cada cliente en el backend de Magento 1.9 os devuelve el mensaje:

error: error in [unknown object].fireEvent():

event name: address_country_changed error message:

cannot read property ‘show’ of undefined.

Lo que debéis hacer es ir a la administración de bases de datos que tengáis (PHPMyAdmin, Adminer, etc) la tabla de eav_attribute y buscar el elemento postcode. Lo editáis y cambiáis el valor del campo is_required de 0 a 1, ya que es un campo necesario para los envíos.

Más

Para actualizar una plataforma Magento 1.X en producción, seguiremos los siguientes pasos:

  1. Descargaremos el archivo desde la página de Magento mediante wget, o nos los descargamos en local y subimos el archivo por FTP o SCP.
  2. Descomprimimos el archivo
    tar -zxvf magento-1.9.X.tar.gz
    o
    unzip magento-1.9.X.zip,
    donde X es la versión que nos hemos descargado
  3. Como se habrá descomprimido en un directorio llamado magento, entramos en él:
    cd magento
  4. Y copiamos todos los archivos descomprimidos sobre los actuales, machacando los anteriores:
    cp -rf * ../
  5. Salimos del directorio magento y lo borramos:
    cd ..
    rm -rf magento
  6. Y nos cercioramos que los permisos y propietarios de directorios y archivos son los correctos:
    find -type f -name ‘*.*’ -exec chmod 644 {} \;
    find -type d -exec chmod 755 {} \;
    chown -R username:groupname *, donde username será www-data o el usuario propietario en cada caso, y lo mismo para groupname
Más

Hace poco tuve un problema con un servidor: se quedó sin espacio en disco. Al limpiarlo, empezó la base de datos a dar errores. Fuí al log de MySQL y me encontré con muchas líneas de error, pero el que me llamó la atención me decía que «Incorrect key file for table ‘/tmp/#sql_3c51_0.MYI’; try to repair it». Básicamente era que no podía ejecutar SQL grandes porque el espacio en /tmp no era suficiente.

Las soluciones al error pasaban por hacer backup de todas las BD, descargártelas, borrar ciertos archivos y volver a restaurarlas, pero yo dudaba de que ese trabajo sirviera de algo. Entonces encontré esta explicación:

Por defecto, MySQL tiene asignado el directorio /tmp del raíz para hacer sus tareas. Cuando la partición raíz está llena, Debian (o Ubuntu en mi caso), crea en RAM una partición /tmp de 1 mega para que MySQL siga funcionando para las funciones básicas, pero no para traerse datos de uan web, por ejemplo. Si hacemos df -h, veremos una línea parecida a esta:

overflow      1,0M     24K      1000K      3%     /tmp

La solución consiste simplemente en borrar esa partición, y volverá a coger el directorio /tmp del raíz. Es decir, hacemos

sudo umount -l /tmp

Y para estar más seguros reiniciaremos el servicio de MySQL. Y todo arreglado.

 

Más

Al crear una regla o promoción de carrito en el que queráis hacer un descuento a un grupo de clientes, podéis encontraros con el problema de que el cliente se loga, pero el carrito sigue mostrando los precios sin el descuento por ser de un grupo determinado con promoción y descuento. Esto es debido a que habéis marcado a Sí la opción «Habilitar asignación automática al grupo de clientes». Debéis marcarla a No si vais a tener varios grupos de clientes con descuentos y promociones según su grupo, o en la página de checkout se asignará al cliente al grupo General, aunque esté logado correctamente.

La opción «Habilitar asignación automática al grupo de clientes» está en Sistema->Configuración->Clientes->Configuración de cliente.

Más

Moodle 3.3 ha traido un nuevo elemento de vista general de curso, muy aplaudido por la comunidad, pero con un pequeño contratiempo, y es que los cursos por páginas están definidos por una constante y no es algo que pueda configurarse.

Si necesitamos modificarlo, tendremos que entrar en el código y modificar la constante COURSES_PER_PAGE de la clase courses_view que está en el archivo courses_view.php que está en la ruta blocks/myoverview/classes/output/courses_view.php

Más

Cuando la función on_sent_ok os de el error de ajuste obsoleto (o is Deprecated), habrá que cambiar la función que tenemos por código JavaScript.

En nuestro caso, el cliente tenía una redirección a una URL, con lo que cambiamos el código a

if ($('.wpcf7-form.sent').length) {
     $(location).attr('href', 'https://www.midominio.com/otra_url')
}

 

 

Más

En este caso, tenemos un cliente que quiere que sólo los atributos con valor a «Sí» (o TRUE, o «Verdadero», como queráis). ¿Cómo lo conseguimos?
Nos iremos al archivo attribute.phtml del paquete del tema que estamos utilizando, cuya ruta es:

/app/design/frontend/nuestro_tema/paquete_usado/template/catalog/product/view/attribute.phtml

Y buscamos este código:

<?php foreach ($_additional as $_data): ?>
    <tr>
        <th class="label"><?php echo $this->htmlEscape($this->__($_data['label'])) ?></th>
        <td class="data"><?php echo $_helper->productAttribute($_product, $_data['value'], $_data['code']) ?></td>
    </tr>
<?php endforeach; ?>

Y lo reemplazamos por este otro:

<?php foreach ($_additional as $_data): ?>
    <?php $_attribute = $_product->getResource()->getAttribute($_data['code']);
    if (!is_null($_product->getData($_attribute->getAttributeCode())) && ((string)$_attribute->getFrontend()->getValue($_product) != 'No')) { ?>
    <tr>
        <td><?php echo $this->htmlEscape($this->__($_data['label'])) ?></td>
    </tr>
    <?php } ?>
<?php endforeach; ?>

Obviamente, en el punto del código donde pone ‘No’, podemos poner

((string)$_attribute->getFrontend()->getValue($_product) != 'FALSE'))
ó
((string)$_attribute->getFrontend()->getValue($_product) == 'TRUE'))
ó
((string)$_attribute->getFrontend()->getValue($_product) != 'Falso'))
.
.
.
etc
Más

Si no nos interesan los logs, borraremos todos los registros de las tablas
log_customer
log_visitor
log_visitor_info
log_url log_url_info
log_quote
report_viewed_product_index
report_compared_product_index
report_event
catalog_compare_item

Se puede meter en cron para que salte la limpieza 1 vez al mes, por ejemplo:
php -f shell/log.php clean

También puede hacerse en la interfaz del administrador: Sistema->Configuración->Avanzado->Sistema->Log
Habilitamos la limpieza de logs y definimos la frecuencia de borrado. Guardamos y ya está todo.

Si nos interesan (por temas de estadísticas de visitas), dejaremos los del último mes o los 2 últimos meses.

Más

Hace unos días estuve en las instalaciones que SiteGround España nos brinda al grupo de Meetup de WordPress Madrid explicando cómo mostrar los contenidos de los campos personalizados que habíamos creado con ACF, sin escribir código. Como vimos que era un truco muy útil, lo explico a continuación:

Para este ejercicio necesitaremos:

Bien, lo primero que hacemos es crear con el plugin ACF Post Types un contenedor para los campos personalizados que crearemos a continuación:

 

 

 

Creamos un tipo llamado Libro:

 

Y lo vemos en el menú lateral del backend de WordPress:

A continuación, creamos los campos asociados al tipo Libro:

Bien, ya tenemos una ficha rudimentaria de un libro en backend. Ahora vamos a darle contenido a esta ficha. Para ello creamos 3 libros:

 

 

 

 

 

 

 

 

 

 

 

Y ahora viene el momento de volcarlos al front. Para ello utilizaremos el plugin Custom Content Shortcode, que nos permitirá hacer por ejemplo un bucle y sacar un listado de los libros en una página estática. Si queréis consultar los shortcodes de este plugin, los teneis aquí:

 

 

 

 

 

 

 

 

Entraremos en los ajustes de Custom Content Shortcodes para activar los shortcodes para ACF como veis en la figura que teneis a continuación:

 

 

 

Bien, creamos una página en la que tendremos el listado de las obras que hemos insertado y ponemos los siguientes shortcodes:

 

 

 

 

 

 

 

Podéis observar que para mostrar la fecha he definido un formato de salida. Ahora publicamos la página y vemos el resultado:

Más

Para todos aquellos interesados en el mundillo de WordPress, el 22 y 23 de abril tendremos una nueva edición de la WordCamp Madrid. Para estar enterados de todo lo que acontece en cada momento hasta que empiece el evento, podeis daros de alta en su newsletter:

Y si queréis una entrada, en esta página tendreis toda la información actualizada. Estos puntos son importantes:

¿Qué incluye la entrada?

Acceso a las conferencias de la WordCamp (22 de abril).
Acceso al Contributor Day (23 de abril).
Invitación a la fiesta de la comunidad (22 de abril).
Comida, café y snacks durante el día.
Camiseta y swag de WordCamp Madrid 2017.
Acreditación personalizada.
Descuentos para estudiantes

Ofrecemos descuentos del 50% para estudiantes. Por favor, contacta con nosotros antes de comprar tu entrada.

El sitio donde se va a celebrar el evento es el Campus Madrid, todo un acierto, la verdad.

A quien le interese el tema del desarrollo ágil con WordPress y Gantry, allí os espero con la charla «Cómo desarrollar un sitio web en 20 minutos cuando el cliente ha aprobado tu mockup»!

Más

Cuando contratamos un servidor en Linode o Digital Ocean u otra empresa similar, según qué plataformas se instalan en estos servidores y las visitas que reciban, pueden quedarse cortos de memoria swap. En estos casos, podemos ampliar la swap de la siguiente forma, creando un archivo para ello, que lo trataremos como un HDD:

dd if=/dev/zero of=/root/swapcreadapornosotros bs=1M count=1024

chmod 600 /root/swapcreadapornosotros

mkswap /root/swapcreadapornosotros

swapon /root/swapcreadapornosotros

cat /etc/fstab
        /root/swapcreadapornosotros               swap                    swap    defaults        0 0

Con la primera instrucción, creamos en la carpeta root un archivo ‘swapcreadapornosotros’ con un tamaño definido y lo montamos como un dispositivo más. A continuación, hacemos un chmod 600 de esa carpeta,y un mkswap de ese archivo, de forma que indicamos al sistema que a partir de ahora, ese archivo es parte de nuestra swap. Y después, con swapon y el archivo, activamos la swap en el mismo.

Por último, para hacer que después de un reinicio la swap siga ampliándose en el archivo, editamos el archivo fstab e insertamos

/root/myswapfile               swap                    swap    defaults        0 0

Y listo!

Más
Esta web utiliza cookies propias para su correcto funcionamiento. Puede consultar nuestra política de cookies, política de privacidad y aviso legal. Al hacer clic en el botón Aceptar, acepta el uso de estas tecnologías y el procesamiento de tus datos para estos propósitos. Configurar y más información    Configurar y más información
Privacidad