Cambiar la descripción de la web

logo prestashop

Si tenemos una tienda en Prestashop, tal vez querrámos cambiar la descripción de la web incomodo: “tienda desarrollada en Prestashop” , que aparece en Google cuando lista nuestro sitio.

La solución es sencilla:

En el menú busca Preferencias y luego clica en Seo+Urls,  te aparecerá una lista de páginas que Prestashop, permite modificar para mejorar el SEO, busca index, ábrelo y edítalo, de acuerdo a tus necesidades y preferencias.

Listo, la próxima vez que el robot de Google indexe tu web, actualizara los cambios y podrás verlos.

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

….un sueño es casi todo  y más que  nada, más que todo al soñarlo, casi nada después……

Crear relaciones condicionales

laravel

La claúsula where tiene muchos usos dentro de Laravel y su uso nos facilita mucho las cosas, y entre ellas crear relaciones condicionales. Algunos de estos casos son:

Crear relaciones condicionales

Puedes crear relaciones condicionales utilizando where. Con el  puedes devolver una relación entre, por ejemplo entre los modelos Tareas y Categorias, condicionada esta por el  id del usuario

class NombreModelo extends Model
{
        public function Tareas()
        {
               return $this->belongsTo('Categorias', 'categories_id')
                       ->where('users_id', Auth::user()->id);
        }
}

Actuar como condicional directo

Aquí vemos tres formas de tomar todos las tareas correspondientes a la categoría 1, utilizando where y get

$tareas = Tarea::where('categoria', '=', 1)->get();
$tareas = Tarea::where('categoria', 3)->get();
$tareas = Tarea::whereCategoria(3)->get();

Filtrar fechas con whereDate

Puedes utilizar whereDate para seleccionar o filtrar fechas por diferentes condiciones sea año, día o mes.

$q->whereDate('created_at', date('Y-m-d'));
$q->whereDay('created_at', date('d'));
$q->whereMonth('created_at', date('m'));
$q->whereYear('created_at', date('Y'));

Dentro de una closure al construir una consulta mas compleja en Eloquent

Un ejemplo típico es cuando tenemos que construir una consulta que devuelva resultados dentro de un rango, por ejemplo  donde necesitamos recibir solo las tareas de una categoría dada, y que estén relacionadas con una cantidad de usuarios determinados.

Seria algo asi :

... WHERE (tareas = 'tarea1' and cantidadUsuarios >= 5) or (tareas = 'tarea2' and age >= 8)
Lo mas rápido seria construir algo como esto:
$q->where('tareas', 'tarea1');
$q->orWhere('cantidadUsuarios', '>=', 5);
$q->where('tareas', 'tarea2');
$q->orWhere('cantidadUsuarios', '>=', 8);

En esta construcción de la consulta, el orden no es el correcto y podría no ser todo lo eficiente que ncesitamos; la solución en Laravel entonces, pasa por  utilizar una función anónima que  incluya otras funciones closure como subconsultas:

$q->where(function ($query) {
    $query->where('tareas', 'tarea1')
        ->where('cantidadUsuarios', '>=', 5);
})->orWhere(function($query) {
    $query->where('tareas', 'tarea2')
        ->where('cantidadUsuarios', '>=', 8); 
})

De este modo quedan organizadas las consultas en una sola estructura solida e integral, pero al mismo tiempo fácilmente escalable.

El uso de  orWhere con parámetros multiples

Siguiendo con el ejemplo anterior, vemos que utilizamos de modo alterno el Where y el orWhere, pero si los parámetros son múltiples, al estar haciendo algo asi:

$q->where('a', 1);
$q->orWhere('b', 2);
$q->orWhere('c', 3);

Podríamos hacer una consulta un poco larga, la cual podemos acortar, estructurandola asi:  

$q->where('a', 1);
$q->orWhere(['b' => 2, 'c' => 3]);

WhereX

Con Laravel puedes añadir where al nombre del modelo y hacer aun más elegante tus queries, por ejemplo convertir esto :

$users = User::where('tareas', 1)->get();

En esto:

$users = User::whereTarea(1)->get(); 

Asi de sencillo,  y además ya Laravel trae algunos predefinidos como  whereDate, whereDay, whereMonth y whereYear, relacionados con date y time, lo cuales se comportan asi:

User::whereDate('created_at', date('Y-m-d'));
User::whereDay('created_at', date('d'));
User::whereMonth('created_at', date('m'));
User::whereYear('created_at', date('Y'));

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

…..lo que realmente importa no es lo que te da la vida, sino lo que haces con ello….

El uso de replicate

laravel

Replicate es un método que nos da Laravel para hacer copias de registros en la base de datos, para usarlo basta con esto:

$tareas =Tarea::find(1);
$newTarea = $tareas->replicate();
$newTarea->save();

Y listo, esto es todo.

Espero modestamente que este artículo, sirva de ayuda a alguien.

Gracias.

Subir montañas hermana hombres……

Error «Premature end of data in tag badges line 1 in country_module_list.xml file» en Prestashop 1.6

error prestashop

El error «Premature end of data in tag badges line 1 in country_module_list.xml file», puede aparecer en Prestashop 1.6, de manera imprevista y sin aparente causa.

Este suele venir acompañado de otros errores, en un listado que es más o menos como el que vemos a continuación:

  1. Error found : StartTag: invalid element name in country_module_list.xml file.
  2. Error found : Premature end of data in tag badges line 1 in country_module_list.xml file.
  3. Error found : Premature end of data in tag module line 1 in country_module_list.xml file.
  4. Error found : Premature end of data in tag modules line 1 in country_module_list.xml file.
  5. Error found : CData section not finished Allow the purchase of combinations of products wit in must_have_module_list.xml file.
  6. Error found : Premature end of data in tag additional_description line 1 in must_have_module_list.xml file.
  7. Error found : Premature end of data in tag module line 1 in must_have_module_list.xml file.
  8. Error found : Premature end of data in tag modules line 1 in must_have_module_list.xml file.

La solución a este error es una acción combinada que incluye estos tres pasos:

Eliminar estos archivos en /config/xml 

Limpiar la cache de nuestra tienda

Acceder a al archivo classes siguiendo la ruta public_html/classes y modificar estas líneas.

protected static $is_addons_up = true;
    public static function addonsRequest($request, $params = array())
    {
        return false;
        if (!self::$is_addons_up) {
            return false;

La causa de este error en PS 1.6 parece ser que el servidor de addons(complementos), crea archivos xml, no válidos o no reconocibles como válidos.

Espero que este post ayude a alguien.

Gracias

También yo tengo esos momentos en los que soy asesino, juez y victima.

Y.

Error grave: error no detectado: llamada a la función no definida mysql_connect ()

error php

Si recibes el error : error no detectado: llamada a la función no definida mysql_connect (), intento explicarte en este post, su solución.

Las funciones de mysql_* se eliminaron a partir de PHP 7.

En su defecto puedes usar: mysqli_connect($mysql_hostname , $mysql_username) en lugar de mysql_connect($mysql_hostname , $mysql_username).

No se recomienda usar la extensión de mysql anterior para nuevos proyectos, ya que al estar obsoleta queda expuesta a problemas de seguridad y compatibilidad serios que arrojarán este error.

Las alternativas que ofrece PHP, son MySQLi y PDO , que es son las que recomiendan los creadores del lenguaje, utilizar. 

PHP ofrece estas tres API diferentes para conectarse a MySQL.

Aquí en un este cuadro tomado de en  it-swarm donde se comparan las API proporcionadas por las extensiones mysql, mysqli y PDO.

Cada fragmento de código crea una conexión a un servidor MySQL que se ejecuta en «example.com» usando el nombre de usuario «username» y la contraseña «password».

<?php
// mysqli
$mysqli = new mysqli("example.com", "username", "password", "database");
$result = $mysqli->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $result->fetch_assoc();
echo htmlentities($row['_message']);

// PDO
$pdo = new PDO('mysql:Host=example.com;dbname=database', 'username', 'password');
$statement = $pdo->query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = $statement->fetch(PDO::FETCH_ASSOC);
echo htmlentities($row['_message']);

// mysql
$c = mysql_connect("example.com", "username", "password");
mysql_select_db("database");
$result = mysql_query("SELECT 'Hello, dear MySQL user!' AS _message FROM DUAL");
$row = mysql_fetch_assoc($result);
echo htmlentities($row['_message']);
?>

Otras dos opciones que tiene, quien no desee actualizar son:

Retornar a la versión anterior de PHP, donde funciona el código, en la 5.5, ya estaba obsoleta la api mysql_* 

Emplear una puente  llamado  mysql-shim, que puede hallar en este link.

La idea es incluirlo en tu código con un include, algo asi como:

include_once("choice_shim.php"); 

Y hasta aquí. Esto es todo y espero haber ayudado a alguien.

Gracias

Es tan corto el amor, y es tan largo el olvido

P. Neruda

Translate »