Todas las entradas de: Daniel

Redirect a homepage según idioma

Cuando implementamos los idiomas en Symfony nos encontramos que al acceder a la ruta de la homepage “/” no encuentra ninguna ruta y evidentemente nos aparece un error. Esto se debe a que al definir la ruta de la homepage con el prefijo del idioma, la ruta sin este prefijo no existe. Para solucionar este problema podemos definir la ruta con el path “/” para que nos realize un redirect a la ruta de la homepage con el variable locale predefinida.

Muestro un ejemplo:

root:
    path: /
    defaults:
        _controller: FrameworkBundle:Redirect:urlRedirect
        path: /es
        permanent: true
app:
    resource: '@AppBundle/Controller/'
    type: annotation
    prefix: /{_locale}
    requirements:
        _locale: es|en

Nuevo registro de logs en Symfony

Aquí explicaré como configurar un nuevo registro de logs en Symfony, pudiendo así separar los logs según nuestro criterio.

En el fichero app/config/config.yml configuramos los parámetros de nuestro nuevo log, definiendo el canal, el nombre que le queremos asignar y el fichero en el cual se escribirán los logs.

# Log Configuration
monolog:
    channels: [mylogchannel]
    handlers:
        mylogchannel:
            level: debug
            type: stream
            path: '%kernel.logs_dir%/mylogfile.log'
            channels: [mylogchannel]

Ahora para utilizarlo en el controlador primero debemos coger el servicio “logger” y a continuación introducir nuestro “handler” previamente creado para que así los nuevos registros de log se escriban en el fichero que se ha configurado.

$logger = $this->get('logger');
$loggerHandler = $this->get('monolog.handler.mylogchannel');

$logger->setHandlers(array($loggerHandler));

$logger->info('I just got the logger');
$logger->error('An error occurred');
$logger->debug('An error occurred');

Para utilizarlo dentro de un servicio:

services:
    my_service:
        class: Fully\Qualified\Loader\Class\Name
        arguments: ['@logger']
        tags:
            - { name: monolog.logger, channel: mylogchannel }

Aviso: al usarlo de esta manera en el controlador los logs solo serán escritos en el fichero indicado puesto que lo indicamos con el “handler” y en el servicio al indicarlo con el “channel” todos los logs que recogan este canal aparecerá los logs en su fichero.

A continuación dejo un enlace a la web oficial de como crear un nuevo registro de logs en Symfony, para más información: symfony.com

Combinatoria en PHP

Con la función getCombinations obtenemos la combinatoria en PHP todos las combinaciones de valores posibles del array pasado como parámetro.

    /**
     * A partir del array recibido como parametro devuelve un array con todas las combinaciones de valores posibles
     * del array
     * 
     * @param $list
     * @return array
     */
    public function getCombinations($list)
    {
        $terms = array();
        $bits = count($list); //bits of binary number equal to number of words in query;

        //Convert decimal number to binary with set number of bits, and split into array
        $dec = 1;
        $binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));

        while ($dec < pow(2, $bits)) {
            //Each 'word' is linked to a bit of the binary number.
            //Whenever the bit is '1' its added to the current term.
            $curterm = "";
            $i = 0;
            while ($i < ($bits)) {
                if ($binary[$i] == 1) {
                    $curterm .= $list[$i] . " ";
                }
                $i++;
            }
            $terms[] = $curterm;
            //Count up by 1
            $dec++;
            $binary = str_split(str_pad(decbin($dec), $bits, '0', STR_PAD_LEFT));
        }

        return $terms;
    }

Cambiar url de registro de WordPress

Para cambiar la url de registro de WordPress este dispone de un hook con el cual la cambiaremos de una forma muy sencilla como veremos a continuación:

/**
 * Cambiando la url e registro por defecto de WordPress
 */
add_filter( 'register_url', 'custom_register_url' );
function custom_register_url( $register_url ){
    $register_url = get_permalink( $id_post );
    return $register_url;
}

Traducir un plugin en WordPress

Para poder traducir un plugin en WordPress debes añadir en el archivo de configuración del plugin las siguientes lineas de código:

add_action( 'plugins_loaded', 'myplugin_load_textdomain' );

function myplugin_load_textdomain(){
    load_plugin_textdomain( 'my-plugin', false, dirname(plugin_basename(__FILE__)).'/languages' );
}

Con esto conseguimos que cuando WordPress carge los plugins añada los archivos de traducción del plugin. Para que todo esto funcione correctamente el parametro que en este caso coge el valor “my-plugin” debe ser el nombre del plugin y “languages” el nombre del directorio donde estan los archivos .po y .mo de las traducciones.

Mostrar el NIF en la factura

Para mostrar el NIF en la factura que genera Prestashop debemos modificar el archivo “/pdf/invoice.tpl” y añadimos los datos de nuestra empresa. Ahora podreis ver un ejemplo de como quedaría la parte a modificar el archivo.

<!-- ADDRESSES -->
<table style="width: 100%">
	<tr>
        <td style="width: 30%; padding-left: 10pt">
            <span style="font-weight: bold; font-size: 10pt; color: #9E9F9E">Mimalos</span>
            <br/>
            NIF: XXXXXXX<br/>
            Provincia - País<br/>
            Tfno: XXX XXX XXX
        </td>
        <td style="width: 70%">
			{if !empty($delivery_address)}
				<table style="width: 100%">
					<tr>
						<td style="width: 50%">
							<span style="font-weight: bold; font-size: 10pt; color: #9E9F9E">{l s='Delivery Address' pdf='true'}</span><br />
							 {$delivery_address}
						</td>
						<td style="width: 50%">
							<span style="font-weight: bold; font-size: 10pt; color: #9E9F9E">{l s='Billing Address' pdf='true'}</span><br />
							 {$invoice_address}
						</td>
					</tr>
				</table>
			{else}
				<table style="width: 100%">
					<tr>

						<td style="width: 50%">
							<span style="font-weight: bold; font-size: 10pt; color: #9E9F9E">{l s='Billing & Delivery Address.' pdf='true'}</span><br />
							 {$invoice_address}
						</td>
						<td style="width: 50%">

						</td>
					</tr>
				</table>
			{/if}
		</td>
	</tr>
</table>
<!-- / ADDRESSES -->

Modificar o crear el buscador de WordPress

Para modificar o crear el buscador de WordPress, este dispone de una función: get_search_form(), esta función nos permite mostrar el formulario por defecto. Pero Wodpress también nos permite modificar este formulario por si es necesario aplicar otro aspecto, para ello debemos crear un archivo en la raiz de nuestro tema con el nombre: searchform.php. A partir de ahora WordPress mostrará el nuevo formulario que tengamos en el archivo anterior.

Dejo de ejemplo el formulario base que viene por defecto, pero adaptado para mostrarlo en el fichero searchform.php.

<form role="search" method="get" class="search-form" action="<?php echo esc_url( home_url( '/' ) ) ?>">
    <label>
        <input type="search" class="search-field" placeholder="<?php echo esc_attr_x( 'Search &hellip;', 'placeholder' ) ?>" value="<?php echo get_search_query() ?>" name="s" title="<?php echo esc_attr_x( 'Search for:', 'label' ) ?>" />
    </label>

    <input type="submit" class="search-submit" value="<?php echo esc_attr_x( 'Search', 'submit button' ) ?>" />
</form>