Creando un alias personalizado para cada perfil de Profile2

June 18, 2021

Profile2 es un módulo de Drupal 7 el cual nos permite crear múltiples tipo de perfiles a los cuales más adelante se les puede asignar un rol mediante permisos. Profile2 incluye el módulo "Profile pages" el cual permite que cada instancia de Profile2 tenga una página por separado en la cual cada usuario que tenga un perfil pueda tener su enlace en un menú y de esta manera poder acceder a su perfil y modificarlo. Profile2 le asigna automáticamente una URL a cada una de estas páginas, y en algunas ocasiones, esta URL no es muy amigable con el usuario de la aplicación. Sin embargo, para solucionar este inconveniente podemos asignarle un alias a cada perfil utilizando el módulo Pathauto cada vez que un usuario se registra ó edita su perfil y de esta manera los perfiles serán accesibles a través de este alias.

En esta ocasión, cada usuario de nuestra aplicación tendrá un perfil de Profile2 llamado compañía (cada usuario será el "dueño" de una compañía). Para lograr lo que ya he explicado en la introducción, vamos a desarrollar un módulo personalizado para crear un alias a cada perfil de Profile2 de tal manera que estos perfiles puedan ser visitados a través del nombre de la compañía de una forma más amigable. Para lograr esto, estos son los pasos que debemos seguir:

  1. Determinar el formato para el alias personalizado que vamos a crear.
  2. Identificar cuando un perfil de Profile2 está siendo creado ó editado.
  3. Limpiar la información.
  4. Verificar si este alias existe.
  5. Guardar la información de tal manera que este perfil de Profile2 pueda ser visitado a través del alias personalizado.

El formato que vamos a utilizar para crear nuestro alias personalizado será el siguiente: /company/{company_name}. Las principales razones por las cuáles se usará el nombre de la compañía como parte de nuestro formato es porque este es amigable para el usuario y además cada usuario de nuestra aplicación debe darle un nombre único a su compañía. El siguiente paso será utilizar un "hook" el cual el API de Profile2 nos facilita: "hook_profile2_presave". Este hook es llamado cada vez que un perfil de Profile2 es insertado a la base de datos, ya sea mediante registro ó edición del perfil. Para limpiar la información que necesitamos utilizaremos la función "pathauto_cleanstring" la cual el módulo Pathauto nos facilita y la función toAscii la cual nos ayuda a generar una URL limpia. Con esta información podemos implementar nuestro módulo personalizado: [prism:php] <?php /**

  • Implements profile2_presave($profile). */ function mymodule_profile2_presave($profile) { // Get company name $array = $profile->field_company_name['und']; $array = array_filter($array); if (!empty($array)) { $original_url = 'profile-' . $profile->type . '/' . $profile->uid; $profile_company_name = strtolower($profile->field_company_name['und'][0]['value']); // Convert to ACSII $profile_company_name = toAscii($profile_company_name);

    // Load Pathauto module
    if (module_load_include('inc','pathauto','pathauto') !== FALSE) {
        if (function_exists('pathauto_cleanstring')) {
            // Check if that alias already exists (the user might be editing his company)
            if (isset($profile->original)) {
                // Load old value
                $profile_old_value = $profile->original->field_company_name['und'][0]['value'];
                $profile_old_value = pathauto_cleanstring($profile_old_value);
                $old_url = 'company/' . $profile_old_value;
                $old_path = array(
                    'source' => $original_url, 
                    'alias' => $old_url, 
                    'language' => 'en'
                    );  
                // Delete old alias     
                path_delete($old_path);
            }
    
            $profile_company_name = pathauto_cleanstring($profile_company_name);
            $new_url = 'company/' . $profile_company_name;
            $path = array(
                'source' => $original_url, 
                'alias' => $new_url, 
                'language' => 'en'
                );  
    
            // Save our newly created alias
            path_save($path);     
        }
    }

    } } ?> [/prism:php]

En el "hook_profile2_presave" primero obtenemos el nombre de la compañía que estamos procesando. Después de que hallamos convertido el nombre de la compañía a ASCII y limpiado la información, podemos proceder a verificar si este alias existe. Debido a que cada perfil debe tener un nombre único de compañía, podemos asumir con seguridad que si el alias existe, es debido a que esta compañía está siendo editada, por lo tanto podemos proceder a borrar el alias anterior y crear un alias con el nuevo valor del nombre de la compañía. Si el alias no existe, simplemente agregamos el alias de la compañía que ha sido creada.

En conclusión, hemos creado un módulo personalizado para poder acceder a cada perfil de Profile2 de compañía utilizando el nombre de la compañía como alias a través de Pathauto.