PHP – 【Garber Informática】Soluciones Web https://garberinformatica.com Diseño, Programación y Marketing Online Mon, 13 Apr 2020 08:01:18 +0000 es hourly 1 https://wordpress.org/?v=5.4.2 https://garberinformatica.com/wp-content/uploads/2019/06/cropped-logo-garber-bn-32x32.png PHP – 【Garber Informática】Soluciones Web https://garberinformatica.com 32 32 Como generar PDFs en PHP https://garberinformatica.com/generar-pdfs-php/ https://garberinformatica.com/generar-pdfs-php/#respond Wed, 03 Apr 2019 11:07:13 +0000 https://garberinformatica.com/?p=14447 Hay muchas formas distintas de generar PDFs en PHP y con distintas librerías. Todas tienen sus ventajas y desventajas, solo tienes que encontrar una que se adapte mejor a lo que deseas mostrar o que te facilite más el trabajo que vas a hacer. En este post vamos a ver como generar PDFs con una ... Leer más Como generar PDFs en PHP

La entrada Como generar PDFs en PHP se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Generar PDFs en PHP

Hay muchas formas distintas de generar PDFs en PHP y con distintas librerías. Todas tienen sus ventajas y desventajas, solo tienes que encontrar una que se adapte mejor a lo que deseas mostrar o que te facilite más el trabajo que vas a hacer.

En este post vamos a ver como generar PDFs con una librería llamada TCPDF. Esta librería para PHP está bastante equilibrada en cuanto a ventajas y desventajas y tiene una buena documentación para poder resolver tus dudas. Está basado en FDPF, una librería estable escrita en PHP4. TCDPF trae mejoras sobre esta librería y por otro lado está escrita en PHP5.

Para empezar a usar esta librería no tienes que hacer nada demasiado complicado. Simplemente tienes que descargarla y añadirla a tu proyecto PHP. Para opciones más avanzadas necesitarás permitirle a la librería que pueda escribir en las carpetas de caché e imágenes. Para usarlo hay que incluir el archivo tcdpf.php como mínimo. En caso de que quieras usarlo en un nivel más avanzado tendrás que incluir más archivos de configuración ya que el por defecto no funcionará en muchos casos.

Empezando a implementar y configurar el PDF

require_once(‘tcpdf/tcdpf.php’);

Tras incluir el archivo en nuestro código PHP crearemos una clase que extienda la clase por defecto TCPDF para poder crear un header y un footer propior. Siempre puedes dejar el header y el footer que usa TCPDF por defecto, pero si los cambias podrás darle un estilo propio a tus PDFs y ajustarlo a tus gustos.

class MYPDF extends TCDPF{

public function Header(){

$this->setJPEGQuality(90);

$this->Image(‘logo.png’, 120, 10, 75, 0, ’PNG’, ’https://www.google.com’);

}

public function Footer(){

$this->SetY(-15);

$this->SetFont(PDF_FONT_NAME_MAIN, ‘I’, 8);

$this->Cell(0, 10, ‘el texto del footer’, 0, false, ‘C’);

}

}

A parte del header y el footer puedes crear otras funciones para poder facilitarte la creación de el PDF como una opción que cada vez que la llames te cree un cuadro de texto nuevo.

En este ejemplo lo que hemos hecho es poner una imagen de header mediante la función Image que trae la librería y un texto en el footer con una fuente específica.

La función Image utiliza estos parámetros para poder configurar la imagen que quieras mostrar:

Image($file, $x=”, $y=”, $w=0, $h=0, $type=”, $link=”, $align=”, $resize=false, $dpi=300, $palign=”, $ismask=false, $imgmask=false, $border=0, $fitbox=false, $hidden=false, $fitonpage=false);

Las opciones que ya están escritas en la función son los valores por defecto que aplica si no le especificamos nada en ese campo. Siempre tendremos que ponerlos en ese orden para no crear errores y si queremos poner un valor en un campo pero no en el anterior podemos reescribir el valor por defecto para no crear problemas de posicionamiento de los valores.

Para más información siempre puedes visitar la página de TCDPF donde muestran diferentes ejemplos.

En el apartado del footer usamos 3 funciones nuevas:

  • SetY especifica la posición de lo que vayamos a poner con respecto al eje de la Y. Por otro lado tenemos SetX que se emplea de igual manera pero para el eje de la X y SetXY para poder posicionar en el eje de la X y de la Y sin tener que utilizar 2 funciones.
  • SetFont indica la fuente, el estilo y el tamaño de la letra que vamos a usar en esa sección. SetFont(family, style = ”, size = 0, fontfile = ”)
  • Cell especifica una celda en la que se va a escribir el texto que deseamos mostrar. En TCPDF todo o casi todo lo que vaya a ser escrito irá dentro de cell o multicell según lo que nos convenga en el momento. Cell(w, h = 0, txt = ”, border = 0, ln = 0, align = ”, fill = 0, link = nil, stretch = 0, ignore_min_height = false, calign = ‘T’, valign = ‘M’)

Creando el cuerpo del PDF

En el siguiente trozo de código vamos a crear un objeto TCPDF con los valores por defecto, definiremos los metadatos del PDF, añadiremos una nueva página y le añadiremos algo de texto.

// Creamos el objeto TCPDF que en este caso usa la clase MYPDF que extiende a TCPDF

$pdf = new MYPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, ‘UTF-8’, false);

// Añadimos los metadatos del PDF (autor,título,palabras clave, etc.)

$pdf->SetCreator(PDF_CREATOR);

$pdf->SetAuthor(‘Olaf Lederer’);

$pdf->SetTitle(‘TCPDF Example’);

$pdf->SetSubject(‘TCPDF Tutorial’);

$pdf->SetKeywords(‘TCPDF, PDF, example, tutorial’);

// Añadimos una página nueva al PDF

$pdf->AddPage();

// Añadimos una nueva línea de texto con la función cell de la que hemos hablado antes

$pdf->Cell(0, 0, ‘Hola mundo’, 1, 1, ‘L’, 1, 0);

Durante la creación de nuestro PDF podemos adaptarlo todo a nuestro gusto e ir posicionando todos nuestros elementos de una forma u otra para que nos vaya quedando mejor con las funciones SetX, SetY o SetXY. También podemos añadir más imagenes con la función Image que hemos visto antes.

Otras funciones básicas que nos podrían interesar para retocar nuestro PDF son:

  • MultiCell para crear varias celdas en una línea y poder separar en bloques el texto. MultiCell(w, h, txt, border = 0, align = ‘J’, fill = 0, ln = 1, x = ”, y = ”, reseth = true, stretch = 0, ishtml = false, autopadding = true, maxh = 0)
  • SetFillColor para poner un color de relleno SetFillColor(col1 = 0, col2 = -1,, col3 = -1,, col4 = -1))
  • SetTextColor especifica el color del texto SetTextColor(col1 = 0, col2 = -1,, col3 = -1,, col4 = -1))
  • Ln para crear un salto de línea Ln(h = ”, cell = false)

Al estar en un archivo PHP podremos usar todos los métodos PHP que necesitemos sin problema para poder seleccionar ciertas opciones o para poner alguna condición de uso según nos lleguen los datos. Algunos métodos que podemos usar sin ningún problema son for, if, foreach, etc.

Una vez que hemos terminado de poner datos y valores a nuestro PDF debemos avisar que es el final del PDF y como queremos que lo muestre. Esto se consigue mediante la función Output que viene con TCPDF. Este método guardará el PDF creado bajo el nombre que le demos y envía el archivo al buscador para que lo muestre o descargue, según le indiquemos.

Output(name = ”, dest = ”)

La opción dest es el destino al que se enviará el PDF y los parámetros posibles son:

  • I: Parámetro por defecto. Envía el archivo al buscador y lo abre en la misma página.
  • D: Envía el archivo al buscador y fuerza la descarga con el nombre dado.
  • F: Guarda el archivo en un servidor local con el nombre dado.
  • S: Devuelve el documento como string. Ignora el nombre que se le ha dado.
  • FI: Equivalente a F + I (Lo abre en el navegador y lo guarda en un servidor local).
  • FD: Equivalente a F + D (Guarda el archivo en un servidor local y fuerza la descarga en el navegador).

Esto es un breve resumen de como usar TCPDF y veais lo fácil que es crear archivos PDF online. Si queréis adentraros más a fondo en la creación de PDFs con esta librería o de mejorar los que ya teneis con nuevos métodos aquí tenéis una serie de ejemplos de TCPDF para haceros una idea de como usarlos y todas las variantes y opciones que tienes a la hora de crear un PDF.

La entrada Como generar PDFs en PHP se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/generar-pdfs-php/feed/ 0
Cómo añadir un plugin a WordPress https://garberinformatica.com/como-anadir-un-plugin-a-wordpress/ https://garberinformatica.com/como-anadir-un-plugin-a-wordpress/#respond Wed, 13 Mar 2019 16:20:29 +0000 https://garberinformatica.com/?p=14306 Paso a paso te enseñamos a añadir un plugin a Wordpress de la manera más sencilla posible. Toma nota de las indicaciones y crea nuevos plugins para WordPress.

La entrada Cómo añadir un plugin a WordPress se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Añadir plugin para WordPress

Mucha gente se plantea añadir su propio plugin al directorio de plugins de WordPress pero terminan rechazando esa idea por la falta de documentación sobre como conseguirlo. En este post te vamos a enseñar como puedes subir tu propio plugin a WordPress y que nada te impida compartir tu creación con la comunidad. Obviamente, si eres un desarrollador de plugins con cierta experiencia, ya sabrás como subirlo al directorio de WordPress, pero para aquellos que no saben como, en este tutorial les mostraré todo lo que necesitan saber.

Pero si no te aclaras, lo mejor es ponerse en mano de desarrolladores profesionales para que realicen está tarea por ti.

Pasos a seguir para crear y subir el plugin

  • Escribir y preparar el plugin.
  • Preparar el archivo readme.txt.
  • Registrarnos al repositorio de Subversion.
  • Esperar la aprobación y la información de acceso SVN.
  • Usar Subversion para subir los archivos de nuestro plugin.
  • Esperar unos pocos minutos para que el sistema añada el plugin al directorio de WordPress.

La parte más complicada o liosa es la de usar SVN/Subversion. Pero una vez que aprendas y veas lo sencillo que es, no dudarás en subir todos tus plugins.

Primeros pasos

Primero tienes que escribir el código del plugin y tenerlo completamente listo y revisado.

Junto a todos los archivos del plugin tendrás que añadir uno que se llame readme.txt. Este es un archivo requerido para poder subir el plugin.

Rellenar el archivo readme.txt

Tener listo y bien preparado el archivo readme.txt es una de las cosas más importantes a la hora de subir un plugin y ayuda mucho a que el primer plugin que subamos nos cueste mucho menos. El archivo se usa para que WordPress pueda leer los datos del plugin y pueda mostrarlos después. Se escribe como una lista:

  • Nombre del plugin
  • Descripción
  • Instalación
  • FaQ
  • Capturas de pantalla
  • Otras notas
  • Lista de cambios
  • Estadísticas
  • Admin

Esto es básicamente lo que contiene dicho archivo. Si el tuyo contiene estas secciones, ya deberías estar listo. Hay varios detalles requeridos en ciertas secciones como, por ejemplo, la información en la zona del Plugin Name. Para que no sea demasiado complicado aquí voy a dejar una plantilla de como sería el archivo readme.txt. Simplemente tendréis que copiarlo en un archivo .txt en blanco y rellenarlo con los datos de vuestro plugin.

=== Plugin Name ===

Contributors:      (Nombre de los contribuidores)

Plugin Name:       (Nombre del plugin)

Plugin URI:        (Página web para el plugin)

Tags:              (Etiquetas para el plugin)

Author URI:        (Sitio del autor del plugin)

Author:            (Autor del plugin)

Donate link:       (Link para recibir donaciones)

Requires at least: (Versión mínima de WordPress requerida)

Tested up to:      (Versión hasta la que se ha probado el plugin)

Stable tag:        (Versión estable del plugin)

Version:           (Versión actual del plugin)

== Description ==

== Installation ==

== Upgrade Notice ==

== Screenshots ==

== Changelog ==

== Frequently Asked Questions ==

== Donations ==

Todo deberá ir en inglés ya que es el idioma estandarizado. La parte de Plugin Name deberá ir la primera, ya que contiene todos los datos básicos del plugin. Por otra parte, el resto de secciones se pueden colocar en el orden preferido, pero todas deben de estar presentes.

Aquí dejo el enlace a un validador de WordPress donde podréis validar vuestro readme.txt para comprobar que está correctamente.

A continuación os pongo una serie de trucos y consejos que he encontrado útiles a la hora de redactar el archivo readme.txt:

  • Puedes incluir PHP (para ello tienes que escaparlo con “ ` ”: `<?php . . . ?>`).
  • Usa asteriscos para enfatizar texto (* texto *).
  • Usa asteriscos dobles para usar negrita en el texto (** texto **).

Preparar el archivo del plugin

Crear plugin para WordPress

Después de crear y probar el plugin necesitarás darle una licencia. Para ello, el WordPress Codex dice que:

  • El plugin debe de ser GPLv2 Compatible.
  • El plugin no debe hacer nada ilegal o moralmente ofensivo.
  • Tienes que utilizar el repositorio de Subversion que te dan para que el plugin se muestre en la página. El directorio de plugins de WordPress es un sitio de hosting y no de listado.
  • El plugin no debe tener enlaces externos en el lado público de la página (como un enlace de “patrocinado por”) sin el consentimiento expreso del usuario.
  • Si no se especifica una licencia v2-compatible, la licencia será explícitamente GPLv2.

Una vez que le has dado la correspondiente licencia al plugin – de forma explícita incluyendo la licencia o de forma implícita sin incluir ninguna licencia – estas listo para alojarte en el Repositorio de WordPress.

Registrarse para acceder al Repositorio de plugins

Ahora que tenemos listos todos los archivos del plugin, podemos ir a la Página de registro, acceder con nuestra cuenta o registrarnos si no tenemos ninguna y rellenar el formulario con la siguiente información:

  • Nombre del plugin (Obligatorio).
  • Descripción del plugin (Obligatorio).
  • URL del plugin.

Después de enviar el formulario, espera para que te aprueben el acceso al repositorio de Subversion. Tienes que ser paciente, puede tardar unas 24 horas aunque suele estar listo en menos tiempo. Si todo está correctamente, alguien aprobará tu petición. Cuando esto ocurra recibirás un email con los datos de acceso al repositorio de Subversion. Aquí es donde subirás y almacenarás el plugin. El sistema usará los archivos y la información incluida en el repositorio Subversion para generar las páginas web que aparecerán en el directorio de plugins junto con todos los plugins. Esto suele tardar unos minutos para que el sistema cree la entrada del plugin.

Uso de Subversion para subir los archivos del plugin

En este punto, se te ha garantizado acceso al repositorio SVN y estás listo para subir tus archivos.

Subversion es un software de código abierto que la gente usa para el manejo de archivos y directorios y sus versiones. Subversion permite restaurar versiones anteriores de los datos y ver los cambios. Es similar a otros programas de control de versiones como Git.

Hay 2 conjuntos de archivos con los que trabajaremos: archivos locales (en tu equipo) y archivos remotos (en el servidor). Para cada tipo de archivos queremos la siguiente estructura de directorios:

root-folder/

       /trunk/

               plugin.php

               readme.txt

       /branches/

       /tags/

Para empezar, colocamos nuestros archivos en / trunk / y en el futuro añadiremos nuevas versiones de este en / branches / para grandes actualizaciones y en / tags/ para actualizaciones pequeñas.

Una vez subido, tus archivos estarán almacenados en el repositorio central de plugins en los servidores de WordPress. Desde el repositorio cualquiera puede ver o copiar tus archivos, pero solo tú tienes los permisos para subir nuevos archivos. Con Subversion cualquier cambio realizado en el archivo local será subido automáticamente al archivo remoto del directorio de plugins y actualizado.

Añadir el plugin al repositorio

Añadir plugin al repositorio de WordPress

Ahora que tenemos nuestros archivos listos abriremos una terminal y los subiremos al repositorio. Lo que vamos a hacer se puede resumir en 3 sencillos pasos:

  • Verificar que la estructura de repositorios está vacía.
  • Agregar el archivo a / trunk/ en nuestro equipo.
  • Actualizar el repositorio con copias de nuestros archivos locales.

Estos serían los comandos que vamos a utilizar:

# Crear una carpeta local para copiar el repositorio

$ mkdir my-local-dir

# Descargar el directorio a la nueva carpeta

$ svn co http://svn.wp-plugins.org/your-plugin-name my-local-dir

> A     my-local-dir/trunk

> A     my-local-dir/branches

> A     my-local-dir/tags

> Checked out revision 11325.

# Copiar los archivos del plugin al directorio

$ cd my-local-dir/

my-local-dir/$ cp ~/my-plugin.php trunk/my-plugin.php

my-local-dir/$ cp ~/readme.txt trunk/readme.txt

# Registrar los nuevos archivos con Subversion

my-local-dir/$ svn add trunk/*

> A     trunk/my-plugin.php

> A     trunk/readme.txt

# Actualizar el repositorio con los archivos nuevos

my-local-dir/$ svn ci -m ‘añade algún comentario aquí’

> Adding        trunk/my-plugin.php

> Adding        trunk/readme.txt

> Transmitting file data ..

> Committed revision 11326.

# Todo hecho!

Puede parecer demasiado pero ciertamente son solo 7 comandos los que hay que usar, menos incluso si creas la estructura de directorios manualmente. También debes tener en cuenta lo siguiente si eres nuevo usando comandos:

  • Cualquier línea que empiece por # es un comentario y no se debe usar como comando.
  • Las líneas que empiezan por > significan una respuesta del software y tampoco se usan como comando.
  • Todos los nombres de directorios y archivos tienen que ser cambiados para concordar con los del plugin.
  • La parte -m ‘añade algún comentario aquí’ en la última línea de comandos se usa para añadir notas al evento -puedes poner la nota que quieras.
  • En el último paso se te preguntará por un usuario y una contraseña. Estos tienen que ser los mismos con los que te has registrado en WordPress.

Después de usar estos comandos el plugin será añadido al repositorio y estará listo para que el sistema cree automáticamente las páginas del plugin en el directorio de plugins de WordPress.

Esto suele tardar un poco, como unos 5 o 10 minutos. Pasado un tiempo verás aparecer tu plugin en la zona de Nuevos Plugins y en su página propia que sería algo como:

http://wordpress.org/extend/plugins/tu-nuevo-plugin/

Una vez puedas ver el plugin ya habrás terminado todo y cualquiera podrá usarlo. Ya solo te queda ir mejorando poco a poco el plugin y añadiendo nuevas funciones o crear nuevos plugins para poder subirlos.

La entrada Cómo añadir un plugin a WordPress se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/como-anadir-un-plugin-a-wordpress/feed/ 0
Script crea CSV nombre + móvil para contactos Gmail y WhatsApp https://garberinformatica.com/script-crea-csv-nombre-movil-para-contactos-gmail-y-whatsapp/ https://garberinformatica.com/script-crea-csv-nombre-movil-para-contactos-gmail-y-whatsapp/#respond Sat, 10 Nov 2018 08:46:04 +0000 https://garberinformatica.com/?p=13755 APUNTES | CREAR CSV CONTACTOS GOOGLE El siguiente script es una pequeña solución para crear un CSV de contactos con número de teléfono móvil, añadirlos a Contactos de Google y así tenerlos disponibles para WhatsApp por ejemplo. En nuestro ejemplo obtenemos los clientes y sus teléfonos desde una tienda Prestashop El SQL para obtener este ... Leer más Script crea CSV nombre + móvil para contactos Gmail y WhatsApp

La entrada Script crea CSV nombre + móvil para contactos Gmail y WhatsApp se publicó primero en 【Garber Informática】Soluciones Web.

]]>
APUNTES | CREAR CSV CONTACTOS GOOGLE

El siguiente script es una pequeña solución para crear un CSV de contactos con número de teléfono móvil, añadirlos a Contactos de Google y así tenerlos disponibles para WhatsApp por ejemplo.

En nuestro ejemplo obtenemos los clientes y sus teléfonos desde una tienda Prestashop

El SQL para obtener este CSV es:

SELECT CONCAT (firstname," ", lastname) as name, phone_mobile as 'Phone Mobile', phone as 'Other Phone' FROM ps_address WHERE id_country=6 LIMIT 1000

Limitamos a 1000 los resultados obtenidos pues es el límite de importación de Google. Exportamos el resultado en un archivo CSV llamado contactos.csv

Sin embargo algunos clientes no tienen móvil, o tienen puesto este móvil en el campo phone o viceversa. Para crear un CSV correcto incluyendo únicamente el nombre y apellidos del cliente y el teléfono móvil si dispone de él utilizamos este pequeño script PHP:

<?php

$subir_csv = fopen("subir.csv","w");

if (($contactos = fopen("contactos.csv", "r")) !== FALSE) {

    if($subir_csv)
    {
        fputs($subir_csv,"name,Other Phone".PHP_EOL); // grabamos la primera línea del CSV a subir
        while (($datos = fgetcsv($contactos, 1000, ",")) !== FALSE) {

            $tel = "-1"; // inicializamos la variable $tel a -1

            $pos = strpos($datos[1], '6'); // buscamos en el campo Phone Mobile si el número empieza por 6
            if($pos === false || $pos > 0){ // no encontrado
                $pos = strpos($datos[2], '6'); // buscamos en el siguiente campo telefónico si el número empieza por 6
                if($pos === false || $pos > 0){ // No encontrado o el 6 en otra posición, no la primera
                 }else{
                    $tel=$datos[2];         // encontrado móvil en el segundo campo
                }
            }else{
                $tel=$datos[1]; // encontrado móvil en el primer campo
            }

            if($tel !== "-1"){
                fputs($subir, $datos[0].",". $tel.PHP_EOL); // encontrado, grabamos el nombre y teléfono del contacto
            }
        }
        fclose($subir_csv);
        fclose($contactos);
    }

}
?>

 

Ejecutamos el script y si todo va bien obtendremos un CSV llamado subir.csv listo para importar en la agenda de contactos de google.

 

 

La entrada Script crea CSV nombre + móvil para contactos Gmail y WhatsApp se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/script-crea-csv-nombre-movil-para-contactos-gmail-y-whatsapp/feed/ 0
Obtener parámetros en el controlador de Symfony 4.2 https://garberinformatica.com/obtener-parametros-en-el-controlador-de-symfony-4-2/ https://garberinformatica.com/obtener-parametros-en-el-controlador-de-symfony-4-2/#respond Wed, 24 Oct 2018 17:16:36 +0000 https://garberinformatica.com/?p=13726 APUNTES | Obtener parámetros en el controlador de Symfony 4.2   Disponemos de dos formas para obtener los parámetros en los controladores de Symfony: La manera quizás más rápida y fácil es: class IndexController extends SymfonyController { public function listAction() { $ApiKey = $this->container->getParameter('api_key'); } } A partir de Symfony 4.1 podemos obtener los parámetros ... Leer más Obtener parámetros en el controlador de Symfony 4.2

La entrada Obtener parámetros en el controlador de Symfony 4.2 se publicó primero en 【Garber Informática】Soluciones Web.

]]>
APUNTES | Obtener parámetros en el controlador de Symfony 4.2

 

Disponemos de dos formas para obtener los parámetros en los controladores de Symfony:

La manera quizás más rápida y fácil es:

class IndexController extends SymfonyController
{
    public function listAction()
    {
        $ApiKey = $this->container->getParameter('api_key');
    }
}

A partir de Symfony 4.1 podemos obtener los parámetros como un servicio:

Obteniendo los parámetros de contenedor como un servicio

En el ejemplo suponemos que tenemos los parámetros de conexión a una Api:

/config/services.yaml

parameters:
    locale: 'es'
    api_client: 'xxxx'
    api_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'

services:
    # default configuration for services in *this* file
    _defaults:
        autowire: true # Automatically injects dependencies in your services.
        autoconfigure: true # Automatically registers your services as commands, event subscribers, etc.
        public: false # Allows optimizing the container by removing unused services; this also means
    # fetching services directly from the container via $container->get() won't work.
    # The best practice is to be explicit about your dependencies anyway.
    bind:
       $cli: '%api_client%'
       $apikey: '%api_key%'

Con bind y autowire los pasamos al servicio y ya los tenemos disponibles en los controladores.

 

Después para obtener los parámetros en el controlador:

<?php

namespace App\Controller\cliente;

use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Annotation\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;

/**
* @Route("/articulo")
*/

class ArticuloController extends Controller{

    private $cli;
    private $apikey;

// los pasamos al constructor y ya los tenemos disponibles para el resto de métodos.
public function __construct(string $cli, string $apikey){
    $this->cli = $cli;
    $this->apikey = $apikey;
}

/**
* @Route("/")
*/
public function indexAction(){

    $articuloJSON = file_get_contents(
           "http://www.example.com/api/?r=es/articulo/1004&cli=$this->cli&apikey=$this->apikey");
    $articuloArray = json_decode($articuloJSON,true);

    return $this->render('index.html.twig', array("articulo" => $articuloArray));
}

 

Espero que os sea de utilidad, cualquier cosa comentad 😉

FuenteFuenteFuente

 

La entrada Obtener parámetros en el controlador de Symfony 4.2 se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/obtener-parametros-en-el-controlador-de-symfony-4-2/feed/ 0
Generador clave hash desde línea de comandos https://garberinformatica.com/generador-clave-hash-desde-linea-de-comandos/ https://garberinformatica.com/generador-clave-hash-desde-linea-de-comandos/#respond Wed, 27 Jun 2018 10:06:26 +0000 https://garberinformatica.com/?p=13647 APUNTES | Generador clave hash desde línea de comandos utilizando PHP   Snippet para generar fácilmente la clave hash y poder utlizarla en nuestros proyectos Symfony. Tanto si has olvidado la clave como si quieres cambiarla a través de la base de datos, este comando te facilitará las cosas:   php -r "echo password_hash('ThePassword', PASSWORD_BCRYPT, ... Leer más Generador clave hash desde línea de comandos

La entrada Generador clave hash desde línea de comandos se publicó primero en 【Garber Informática】Soluciones Web.

]]>
APUNTES | Generador clave hash desde línea de comandos utilizando PHP

 

Snippet para generar fácilmente la clave hash y poder utlizarla en nuestros proyectos Symfony. Tanto si has olvidado la clave como si quieres cambiarla a través de la base de datos, este comando te facilitará las cosas:

 

php -r "echo password_hash('ThePassword', PASSWORD_BCRYPT, ['cost' => 13]) . PHP_EOL;"

 

Necesario tener instalado PHP >= 5.5

 

Fuente

La entrada Generador clave hash desde línea de comandos se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/generador-clave-hash-desde-linea-de-comandos/feed/ 0
Crear variación de un producto en WooCommerce con PHP https://garberinformatica.com/crear-una-variacion-de-un-producto-en-woocommerce-php/ https://garberinformatica.com/crear-una-variacion-de-un-producto-en-woocommerce-php/#respond Thu, 31 May 2018 16:42:02 +0000 https://garberinformatica.com/?p=13504 Crear variación de un producto en WooCommerce con PHP. En este apartado vamos a ver cómo crear una variación de un producto en WooComerce con php. Es un código ideal para cuando vamos a importar productos a través de JSON, CSV, etc.   Los pasos a seguir son: Crear las variables con los datos de ... Leer más Crear variación de un producto en WooCommerce con PHP

La entrada Crear variación de un producto en WooCommerce con PHP se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Crear variación de un producto en WooCommerce con PHP.

En este apartado vamos a ver cómo crear una variación de un producto en WooComerce con php. Es un código ideal para cuando vamos a importar productos a través de JSON, CSV, etc.

 

Los pasos a seguir son:

Crear las variables con los datos de la variación

Crear una descripción

Asignar la id del producto al que pertenece

 

//creamos las variables con los datos de nuestra variación

$sku = "EAN13-09764746874";//el sku es como un id no debe repetirse.
//usar un ean13 es una buena opción para evitar duplicados.
$price = "20";//precio normal
$saleprice = "10";//precio rebajado
$descripcion = "Variación de un producto que ya sabemos programar";
$disponible = "4";//esto es el stock

$artributo1 = "Rojo";
$artributo2 = "Mediano";

$descAtr1 = "Esta variación es roja";
$descAtr2 = "Y tiene un tamaño mediano";


$variation = newWC_Product_Variation();//creamos la variación

//creamos una descripción para la misma
$descripccion_total = "<p>Color: $descAtr1<br><br>Tamaño: $descAtr2<br><br>$descripcion</p>";

//Es importante asignarle la id de el producto al que pertenece
$variation->set_parent_id($product_ID);

//Aquí le añadimos los valores del atributo que hereda del producto, si nuestro producto tiene dos atributos
//nuestra variación tendrá que tener un valor que pertenezca dicho producto
//si tienes dudas sobre esto te recomiendo que mires el siguiente post que habla sobre ello

 

 

 

Añadimos los atributos con set_attributes

Añadimos el status, los precios, stocks, sku y la descripción.

Por último guardamos los datos con save();

 

$variation->set_attributes(array('color' => $descAtr1,'tamanyo' =>$descAtr2));

//Por ultimo le añadimos sus datos pertinentes y lo guardamos

$variation->set_status( 'publish' );

$variation->set_regular_price( $price );

$variation->set_price( $price );

$variation->set_sale_price( $saleprice );

$variation->set_manage_stock( true );

$variation_id = $variation->get_id();

$variation->set_sku( $sku );

$variation-> set_description( $descripccion_total );

$variation->save();

 

La entrada Crear variación de un producto en WooCommerce con PHP se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/crear-una-variacion-de-un-producto-en-woocommerce-php/feed/ 0
Asignar imágenes a nuestros productos de WooCommerce https://garberinformatica.com/asignar-imagenes-a-nuestros-productos-de-woocommerce/ https://garberinformatica.com/asignar-imagenes-a-nuestros-productos-de-woocommerce/#respond Thu, 31 May 2018 15:36:10 +0000 https://garberinformatica.com/?p=13493 Imágenes en nuestros productos de WooCommerce. Vamos a ver cómo se asignan imágenes a los productos en WooCommerce y a la galería del mismo utilizando PHP. Lo ideal siempre es crear una función para nuestro código. En el mismo comento las partes más importantes: function gbiet_anyadir_imagen($producto_image_url, $producto_image_gallery_url, $product_id){ //Le pasamos la id del producto y ... Leer más Asignar imágenes a nuestros productos de WooCommerce

La entrada Asignar imágenes a nuestros productos de WooCommerce se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Imágenes en nuestros productos de WooCommerce.

Vamos a ver cómo se asignan imágenes a los productos en WooCommerce y a la galería del mismo utilizando PHP.

Lo ideal siempre es crear una función para nuestro código. En el mismo comento las partes más importantes:

function gbiet_anyadir_imagen($producto_image_url, $producto_image_gallery_url, $product_id){

  //Le pasamos la id del producto y las url de la imagen para el producto y la galería
  $thumb_url = $producto_image_url;
  $thumb_url_gallery = $producto_image_gallery_url;

  // Descargamos el archivo temporal 
  $tmp = download_url( $thumb_url );
  $tmp_gallery = download_url( $thumb_url_gallery );

  //Creamos el array con los datos para la primera url, y de paso nos aseguramos que tenga un formato correcto
  preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $thumb_url, $matches);//preg_match its for get sure image its correct
  $file_array['name'] = basename($matches[0]);
  $file_array['tmp_name'] = $tmp;

  //Creamos el array con los datos para la segunda url
  preg_match('/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $thumb_url_gallery, $matches2);//preg_match its for get sure image its correct
  $file_array_gallery['name'] = basename($matches2[0]);
  $file_array_gallery['tmp_name'] = $tmp_gallery;

  //Creamos el objeto product con la id donde se asignará la imagen
  $product = newWC_Product_Variation($product_id);

  //Introducimos la imagen en el media de wordpress y guardamos su id en la variable thumbid
  $thumbid = media_handle_sideload( $file_array, $product_id, $product_id."-".$producto_image_url );//producto_image_url es la descripcion así podemos usarlo mejor
  //Y con esa id se la asignamos en su producto como imagen de cabecera
  set_post_thumbnail($product_id, $thumbid);

  //Con la imagen para la galería hacemos lo mismo y la añadimos en media
  $thumbid_gallery = media_handle_sideload( $file_array_gallery, $product_id, $producto_image_gallery_url );
  //Y la asignamos a la galería de ese producto
  update_post_meta( $product_id, '_product_image_gallery', $thumbid_gallery);
}

Y eso es todo, espero que os haya sido de utilidad. Cualquier duda o comentario será bienvenida.

 

La entrada Asignar imágenes a nuestros productos de WooCommerce se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/asignar-imagenes-a-nuestros-productos-de-woocommerce/feed/ 0
Crear con PHP un producto variable en WooCommerce con varios atributos https://garberinformatica.com/crear-un-producto-variable-en-woocommerce-con-varios-atributos-php/ https://garberinformatica.com/crear-un-producto-variable-en-woocommerce-con-varios-atributos-php/#comments Thu, 31 May 2018 15:14:49 +0000 https://garberinformatica.com/?p=13486 Producto variable en WooCommerce con varios atributos.   En este apartado vamos a ver como crear un producto variable en WooCommerce con varios atributos en usando PHP. A continuación se verá paso a paso el código para ello. Creamos el array con los datos del producto: $post_data = array( 'ID' => $product_ID, 'post_author' => $cliente, ... Leer más Crear con PHP un producto variable en WooCommerce con varios atributos

La entrada Crear con PHP un producto variable en WooCommerce con varios atributos se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Producto variable en WooCommerce con varios atributos.

 

En este apartado vamos a ver como crear un producto variable en WooCommerce con varios atributos en usando PHP.

A continuación se verá paso a paso el código para ello.

Creamos el array con los datos del producto:

$post_data = array(
'ID' => $product_ID,
'post_author' => $cliente,
'post_name' => $tituloproductos."-".$refProducto,
'post_title' => $opcion_pretitulo."-".$tituloproductos."-".$opcion_postitulo,
'post_content' => $descripcion_final,
'post_excerpt' => $descripcion_corta,
'post_status' => 'publish',
'ping_status' => 'closed',
'post_type' => 'product',
'guid' => home_url( '/product/producto-prueba/' ),
);

Creamos el producto:

$product_id = wp_insert_post( $post_data );

A continuación se crea la categoría de nuestro producto, si ya tienes una o varias puedes asignársela directamente:

$id_categoria = wp_insert_term(

    $descripcionsubfamilias, // the name
    'product_cat', // the taxonomy

     array(

             'description'=> $refSubfamilia,
             'slug' => $refSubfamilia."-".$descripcionsubfamilias,

     )
);

wp_set_object_terms( $product_id, $id_categoria, 'product_cat');//Aquí se le asigna la categoría al producto
// por lo que si ya sabes la id de tú categoría simplemente usa solo esta línea.

Ahora que tenemos lo necesario, empecemos a programar esos atributos, para ello primero debemos crear un objeto producto variable de WooCommerce con $product_id:

$product = newWC_Product_Variable($product_id);

$attribute = newWC_Product_Attribute();//declaramos nuestro primer atributo
$attribute->set_id(0);//le damos una id
$attribute->set_name('color');// y un nombre

 $colores = array(0  => "Rojo",//este sera los valores del atributo
    1 => "Azul");

 $attribute->set_visible(true);
 $attribute->set_variation(true);
 $attribute->set_options($colores);//le asignamos los valores al atributo

Ya tenemos el primer atributo ahora el segundo, seguimos los mismos pasos que en el primero:

$attribute2 = newWC_Product_Attribute();
$attribute2->set_id(0);
$attribute2->set_name('tamanyo');

$tamanyo = array(0 => "Grande",1 => "Mediano",2 => "Pequeño");

$attribute2->set_options($tamanyo);
$attribute2->set_visible(true);
$attribute2->set_variation(true);

Por ultimo, asignamos estos atributos a nuestro producto y lo guardamos:

$product->set_attributes(array($attribute,$attribute2));
$product->save();

Puedes hacer tantos atributos como quieras, solo acuérdate de añadirlos en el array, y eso es todo, espero que os haya sido de utilidad.

Cualquier duda o comentario será bienvenida.

 

 

La entrada Crear con PHP un producto variable en WooCommerce con varios atributos se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/crear-un-producto-variable-en-woocommerce-con-varios-atributos-php/feed/ 1
Integrar Google reCAPTCHA en Prestashop 1.6 https://garberinformatica.com/integrar-google-recaptcha-v2-en-prestashop-1-6/ https://garberinformatica.com/integrar-google-recaptcha-v2-en-prestashop-1-6/#respond Tue, 17 Apr 2018 13:53:29 +0000 https://garberinformatica.com/?p=1283 ¿Harto del Spam? ¿De recibir cientos de correos basura? Añadir Google reCAPTCHA en Prestashop 1.6 es más fácil y rápido de lo que piensas. Te explicamos cómo.   Pasos: 1.- Obtener las claves de Google reCAPTCHA Accede al sitio oficial de Google https://www.google.com/recaptcha/intro/ y solicita para tu dominio las claves:     2.- Ya tenemos ... Leer más Integrar Google reCAPTCHA en Prestashop 1.6

La entrada Integrar Google reCAPTCHA en Prestashop 1.6 se publicó primero en 【Garber Informática】Soluciones Web.

]]>
¿Harto del Spam? ¿De recibir cientos de correos basura? Añadir Google reCAPTCHA en Prestashop 1.6 es más fácil y rápido de lo que piensas. Te explicamos cómo.

 

Pasos:

1.- Obtener las claves de Google reCAPTCHA

Accede al sitio oficial de Google https://www.google.com/recaptcha/intro/ y solicita para tu dominio las claves:

 

 

2.- Ya tenemos las claves, ahora vamos a utilizarlas:

 

 

3. Editar el archivo header.tpl:

Necesitamos añadir el javascript de google recaptcha, para lo que entramos en nuestro panel de control o por ftp a la raíz de la instalación de Prestashop y editamos el archivo  themes/default-bootstrap/header.tpl para añadir antes de la etiqueta de cierre del head </head> la siguiente línea (puede estar o no en la línea 71, dependiendo de cada tema o versión):

<script src='https://www.google.com/recaptcha/api.js'></script>

 

4.- Editar el formulario de contacto:

Ahora buscamos la plantilla que muestra el formulario de contacto de nuestra tienda, contact-form.tpl. En nuestro caso es el tema por defecto, la dirección de la plantilla es themes/default-bootstrap/contact-form.tpl. Hacemos una copia de seguridad por si las moscas y editamos el archivo, en mi caso (puede diferir según la versión de Prestahsop) añado el código de Google en la línea 147 aproximadamente:

ContactController.php

Guardamos todos los cambios y entramos en el formulario de contacto de nuestra tienda y si está todo correcto veremos que ya aparece la famosa casilla “No soy un robot”:

 

5.- Server side

Ahora nos queda quizá la parte más compleja, que es editar el controlador para añadir las llamadas por POST a gooogle y que verifique que quien pretende enviar el formulario de contacto sea un “humano”.  Ahora tendremos que editar el archivo controllers/front/ContactController.php. Hacemos una copia de seguridad primero y d, lo abrimos y añadimos las siguientes líneas de código al principio de la función postProcess, no olvidar la llave de cierre } del if de la línea 227 aprox:

 

 

Explicación del código por líneas:

39 recogemos en $recaptcha la respuesta de google

41 – 44 Creamos el array de datos a enviar a Google con ‘secret’ => clave secreta que nos proporciona google y ‘response’ con el contenido recogido en $_POST

46 url de POST para verificar los datos

47 – 53 configuración típica para enviar por POST los datos usando CURL

55 en $response recogemos el JSON que nos devuelve Google

58 en $resultado almacenamos el json_decode de $response

60 si el resultado de success es true procedemos con el envío del formulario (no olvidar cerrar el if)

 

Eso es todo, si has seguido los pasos correctamente puedes olvidarte del spam. Si no has conseguido integrar Google reCAPTCHA en Prestashop 1.6 o en cualquier otra tienda o formulario de contacto y necesitas ayuda, contacta con nosotros y te ofreceremos la solución que mejor se adapte a tus necesidades.

 

El código completo del archivo ContactController.php

PHP

La entrada Integrar Google reCAPTCHA en Prestashop 1.6 se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/integrar-google-recaptcha-v2-en-prestashop-1-6/feed/ 0
Resuelve el error ORM de Doctrine con tablas sin clave principal en MySQL al mapear la base de datos. https://garberinformatica.com/resuelve-error-orm-doctrine-tablas-sin-clave-principal-mysql-al-mapear-la-base-datos/ https://garberinformatica.com/resuelve-error-orm-doctrine-tablas-sin-clave-principal-mysql-al-mapear-la-base-datos/#comments Tue, 12 Dec 2017 19:20:25 +0000 https://garberinformatica.com/?p=1054 Symfony 3.4 En el proyecto trabajo con una base de datos y además tengo que conectar con otras dos bases de datos. Con lo que el config.yml lo tengo de la siguiente manera: # Doctrine Configuration doctrine: dbal: default_connection: bbdd connections: bbdd: driver: pdo_mysql host: '%database_host%' port: '%database_port%' dbname: '%database_name%' user: '%database_user%' password: '%database_password%' charset: ... Leer más Resuelve el error ORM de Doctrine con tablas sin clave principal en MySQL al mapear la base de datos.

La entrada Resuelve el error ORM de Doctrine con tablas sin clave principal en MySQL al mapear la base de datos. se publicó primero en 【Garber Informática】Soluciones Web.

]]>
Symfony 3.4

En el proyecto trabajo con una base de datos y además tengo que conectar con otras dos bases de datos.

Con lo que el config.yml lo tengo de la siguiente manera:

# Doctrine Configuration
doctrine:
    dbal:
        default_connection: bbdd
        connections:
            bbdd:
                driver: pdo_mysql
                host: '%database_host%'
                port: '%database_port%'
                dbname: '%database_name%'
                user: '%database_user%'
                password: '%database_password%'
                charset: UTF8
            bbdd2:
                driver: pdo_mysql
                host: '%database_hostp%'
                port: '%database_portp%'
                dbname: '%database_namep%'
                user: '%database_userp%'
                password: '%database_passwordp%'
                charset: UTF8
            bbdd3:
                driver: pdo_mysql
                host: '%database_hostg%'
                port: '%database_portg%'
                dbname: '%database_nameg%'
                user: '%database_userg%'
                password: '%database_passwordg%'
                charset: UTF8

    orm:
        default_entity_manager: bbdd
        entity_managers:
            bbdd:
                connection: bbdd
                mappings:
                    AppBundle: ~
            bbdd2:
                connection: bbdd2
                mappings:
                    AppBundle: ~
        # auto_generate_proxy_classes: '%kernel.debug%'
        # naming_strategy: doctrine.orm.naming_strategy.underscore
        # auto_mapping: true

 

Y definidos los parámetros de conexión en parameters.yml

arameters:
    database_host: localhost
    database_port: 3306
    database_name: bbdd1
    database_user: bddd1
    database_password: pass1
    
    database_hostp: host.es
    database_portp: 3306
    database_namep: bbdd2
    database_userp: bbdd2
    database_passwordp: pass2
    
    database_hostg: localhost
    database_portg: 3306
    database_nameg: bbdd3
    database_userg: bbdd3
    database_passwordg: pass3

 

Doctrine, tablas sin clave principal en MySQL

Table ____ has no primary key. Doctrine does not support reverse engineering from tables that don’t have a primary key.

Asi que Doctrine no puede funcionar en tablas que no tienen clave principal. En MySQL, crear tablas sin PK siempre es una mala idea, pero, en algunos casos (o sistemas heredados) que no tienen PK en algunas tablas, aún puede usar Doctrine como ORM.

Sin embargo, de forma predeterminada (y creo que esto no cambiará) si su base de datos tiene tablas sin asignación de clave primaria simplemente no funcionará = /.

La forma más rápida de resolver esto es anular la clase de proveedor DatabaseDriver, en el espacio de nombres:

namespace Doctrine\ORM\Mapping\Driver

 

Editar el archivo vendor/doctrine/orm/lib/Doctrine/ORM/Mapping/Driver/DatabaseDriver.php

 

// línea 287

// dejar el código como sigue:

if ( ! $table->hasPrimaryKey()) {
    //throw new MappingException(
    // "Table " . $table->getName() . " has no primary key. Doctrine does not ".
    // "support reverse engineering from tables that don't have a primary key."
    //);
}else{
    $pkColumns = $table->getPrimaryKey()->getColumns();
}

// línea 508

public function getTablePrimaryKeys(Table $table)

{

    // comentar todo y dejar lo siguiente:

    if( $table->hasPrimaryKey() ) //add this if to avoid fatalError
        return $table->getPrimaryKey()->getColumns();

}

 

Entonces podemos ejecutar:

$ php bin/console doctrine:mapping:convert annotation --em bbdd2 ./src/AppBundle/Resources/config/doctrine/metadata/orm --from-database --force

Una vez hecho, volvemos a dejar el archivo DatabaseDriver.php como estaba.

 

Fuente

La entrada Resuelve el error ORM de Doctrine con tablas sin clave principal en MySQL al mapear la base de datos. se publicó primero en 【Garber Informática】Soluciones Web.

]]>
https://garberinformatica.com/resuelve-error-orm-doctrine-tablas-sin-clave-principal-mysql-al-mapear-la-base-datos/feed/ 1