Archivos de Categoría: Programación - Paginas 2

Llamadas de ajax en ColdFusion y jQuery

Es un ejemplo muy facilito pero me ha servido sobre todo para crear componentes en cfscript que su día cuando empecé no se podía usar.
Lo primero sería tener un formulario, en este caso uno para logarse en la web.

<table>
    <tr>
        <td>Email</td>
        <td><input name="email" type="text"></td>
    </tr>
    <tr>
        <td>Contraseña</td>
        <td><input name="password" type="input"></td>
    </tr>
    <tr>
        <td colspan="2"><button id="login">Logarse</button></td>
    </tr>
</table>

Y un javascript que controle el envío del formulario:

$( document ).ready(function() {               
    $('#login').click( function(e) {
    $('#resultLogin').text('');
    $.post(
        'ajax/user.cfc', // ruta del componente
        {
            method: 'login', // método al que llamaremos
            email: $('input[name="email"]').val(),
            password: $('input[name="password"]').val()
        }
        , "json")
        .done( function(result) {                           
            // es este caso siempre entrará por aquí cuando sea un acceso valido                            
            $('#resultLogin').text(JSON.stringify(result, undefined, 2));
        })
        .fail( function(xhr, status, error) {
            // si falla alguna de las validaciones o el usuario no es válido se generará un error
            $('#resultLogin').text(error);
        });
    });
});     

Por último el componente, que tendría en este caso todos los métodos que pudieran ser llamados por Ajax sobre el usuario:

component { 
    remote any function login ( required string email, required string password ) returnFormat="JSON" {
        // validación del email
        if(!isValid('email', email)) {
            cfheader(
                statuscode = 403,
                statustext = "Invalid Email"
            );       
            return {};     
        }
        // validación de la contraseña
        if(len(password) eq 0) {
            cfheader(
                statuscode = 403,
                statustext = "Invalid Password"
            );            
            return {};
        }

        userObj = createObject('component', 'cfc.User');
        result = userObj.login(email=email, password=password);
        // el componente devuelve una estructura con status 200 si es un usuario válido
        if(result.status neq 200){
            cfheader(
                statuscode = result.status,
                statustext = "Invalid Email or Password"
            );       
            return {};
        }else{
            structDelete(result, 'status');
            return result;
        }
    }  

    // el resto de metodos...

}

Web en multidioma en coldfusion

Nuevo proyecto y toca volver al ColdFusion y SQL Server así que las siguientes entradas seguramente tratarán de estos temas ya que los tenía un pelín oxidados.

Lo primero que me ha tocado hacer es montar el sistema multidioma de del sitio, y gustándome como me gusta Laravel, he decidido basarme también en ficheros JSON que iran en cada carpeta para personalizar dependiendo de la sección, y unos en el raíz que servirán como traducciones generales.

La estructura esta subida en mi github y básicamente lo que he hecho es crear un componente helpers.cfc que se carga en el application para que sea accesible desde toda la web. En este componente la idea es meter todas las funciones generales que pueda necesitar.

Así desde cualquier punto de la web puedo hacer un cfoutput #application.helpers.translate(‘TEXTO A TRADUCIR’, ‘IDIOMA A MOSTRAR’)#. La función está hecha para que en caso de no pasarle el idioma coja el del navegador por defecto

Cambiar nombres de tablas por defecto

En un proyecto que estoy montando tengo que usar una base de datos donde ya hay tablas por lo que he decidido ponerles a todas las tablas del proyecto en prefijo bk_ para poder tenerlas organizadas. El problema está en las tablas que genera Laravel por defecto, así que toca cambiar un poco la configuración para que use las nuevas.
Lo primero es en las migraciones, eso es sencillo, simplemente modificar los nombres en los ficheros de creación de la tabla users, password_reset y notifications. Despues podemos correr las migraciones para que cree las nuevas tablas.
Después vamos a cambiar los ficheros donde aparece la referencia a la tabla users y cambiarlo por bk_users:

App/Http/Controllers/Auth/RegisterController.php:

  'email' => ['required', 'string', 'email', 'max:255', 'unique:bk_users'],

App/User.php:

 protected $table = 'bk_users';

La referencia a la tabla passwords_reset está en el fichero config/auth.php:

'passwords' => [
        'users' => [
            'provider' => 'users',
            'table' => 'bk_password_resets',
            'expire' => 60,
        ],
    ],

Por ultimo las notificaciones, que es un pelín más enrevesado. Lo primero es crear un nuevo modelo que será el que relacionaremos luego con los usuarios:

php artisan make:model DatabaseUserNotification

Y el modelo quedaría de la siguiente forma:

namespace App;
use Illuminate\Notifications\DatabaseNotification;
class DatabaseUserNotification extends DatabaseNotification 
{
     protected $table = 'bk_notifications';
}

Luego en el modelo User vamos a sobreescribir las notificaciones para que tiren de este nuevo modelo:

public function notifications()
    {
        return $this->morphMany(DatabaseUserNotification::class, 'notifiable')->orderBy('created_at', 'desc');
    }