Foros del Web » Creando para Internet » Sistemas de gestión de contenidos » Drupal »

[SOLUCIONADO] Formulario de registro personalizado (Drupal 7)

Estas en el tema de Formulario de registro personalizado (Drupal 7) en el foro de Drupal en Foros del Web. Un saludo a tod@s se ha hablado de esto por aquí pero no he encontrado nada que en realidad me sirva por eso abro el ...
  #1 (permalink)  
Antiguo 31/07/2013, 04:41
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Exclamación Formulario de registro personalizado (Drupal 7)

Un saludo a tod@s se ha hablado de esto por aquí pero no he encontrado nada que en realidad me sirva por eso abro el nuevo hilo, a ver si podemos llegar a una solución entre todos ;)

lo que pretendo es:
Mostrar el formulario de registro de drupal 7 simplemente con el campo de email y contraseña, mas el registro por redes sociales, y algunos textos escritos manualmente, para las redes sociales utilizo un modulo que me lo saca perfectamente.
Alguien sabría como hacer esto?

He probado con este articulo https://drupal.org/node/350634?goback=%2Egna_103062 y algunos parecidos, pero ninguno me modifica el formulario de registro, parece que nunca pasa por allí entrando en user/register, sin embargo para el de login va fenómeno :(

He conseguido modificar un poco el formulario de registro con el siguiente código:

function insurance_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'search_block_form') {
$form['search_block_form']['#title'] = t(''); // Change the text on the label element
$form['search_block_form']['#title_display'] = 'invisible'; // Toggle label visibilty
$form['search_block_form']['#size'] = 25; // define size of the textfield
$form['search_block_form']['#attributes']['placeholder'] = t('¿Qué quieres buscar?'); // Set a default value for the textfield

$form['actions']['submit']['#value'] = t(''); // Change the text on the submit button
$form['actions']['submit'] = array('#type' => 'image_button', '#src' => base_path() . 'sites/default/files/btnBusqueda.png');
$form['actions']['submit']['#id'] = t('edit-submit-search');

/*$form['search_block_form']['#attributes']['onblur'] = "if (this.value == '') {this.value = 'Search';}";
$form['search_block_form']['#attributes']['onfocus'] = "if (this.value == 'Search') {this.value = '';}";*/
}elseif ($form_id == "user_register_form") {
echo 'Blah Bla bla';
echo '<hr>Paso 1 de 2<hr>';

$form['name']['#title'] = t("Custom title");
$form['actions']['submit']['#value'] = t("CREA UNA CUENTA");

$form['campo_personalizado']=array(
'#type' => 'weight',
'#title' => t('campo personalizado'),
'#size' => 60,
'#maxlength' => 128,
'#required' => TRUE,
);
}
}

Pero $form['name']['#title'] = t("Custom title"); no me modifica el label del campo name, ni tampoco me deja cambiarlo de orden

¿Algún consejo?
Un saludo y gracias de antemano
  #2 (permalink)  
Antiguo 31/07/2013, 05:22
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

Si estas usando Drupal 6, creo que podés agregar campos del módulo Profile al registro, has probado eso?

En Drupal 7 podés cambiar los cambios desde la parte de Account settings, en la parte de Configure.

Saludos.
  #3 (permalink)  
Antiguo 31/07/2013, 06:06
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Antetodo Gracias por tu pronta respuesta, estoy usando Drupal 7
Desde donde indicas puedo asignarle nuevos campos y gestionar los personalizados, pero no puedo cambiar el orden de los predefinidos (Nombre de usuario, contraeña, email); tambien me da la impresion de uqe eso esta mas pensado para el formulario de perfil del usuario que para el de registro, al crear los campos que deseas puedes marcar si quieres que los pidan en el registro o no y son esos los que aparecen en user/register.

Si alguien con mas experiencia que yo en Drupal (es decir cualquiera ) no me dice que estoy equivocado, lo que yo necesito es personalizar el formulario de registro, ya lo hice para el de loggin con el enlace del primer articulo y me fue muy bien, pero con este no hay manera.
Otra de las razones que tengo para pensar que tengo que crear un formulario personalizado un .tpl.php es que tengo que sacar un texto suelto, sin campo alguno, eso creo que no se puede hacer de otra manera, no es solo ordenar los campos para que una cosa salga por encima de otra y tal.

un saludo y gracias de nuevo.
  #4 (permalink)  
Antiguo 31/07/2013, 06:48
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

Bueno me parece bien que separes así el problema.
Mi recomendación era que dejes para tu módulo la parte de reordenar los campos nada más. Si creas los campos desde el profile y los haces visible en el formulario de registro entonces solo te quedará la parte de maquetación y reordenamiento.

Usar un tpl para el formulario es una buena opción pero si deseas en el tpl poder hacer un print de cada campo por separado pienso que tendrás muchos dolores de cabeza.
Lo mismo si querés agregar los campos desde un módulo personalizado. Tendrías que hacer las operaciones de guardar y actualizar información.
Por eso mi recomendación es que uses los campos del profile y solo te centres en reordenar el formulario y maquetarlo.

Ahora bien, creo que el código que tenes puesto no sirve de mucho si lo vas a hacer como yo te lo planteo. Pero te dejaré una introducción y vos luego decidís que es mejor.

Los campos del formulario están ordenador por peso, es decir, por la variable #weight, entonces debes depurar la variable $form y ponerle el peso al campo que quieras poner primero de modo que salga primero, es decir, un valor muy bajo.

Código PHP:
Ver original
  1. $form['search_block_form']['#weight'] = 1;

Eso por ejemplo. No se exactamente si ese es un campo del formulario, pero si le pones un peso muy bajo se va arriba del todo.
Así lo deberías hacer con los demás.

Ya me contarás que tal te ha ido.

Saludos.
  #5 (permalink)  
Antiguo 31/07/2013, 08:04
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Gracias por tu comentario; la verdad es que me a servido de mucho, sobre todo para el planteamiento; pero con este codigo para hacer mis primeras pruebas no me funciona.
$form['name']['#title'] = t("Custom title");
$form['name']['#weight'] = 1000;
$form['actions']['submit']['#value'] = t("CREA UNA CUENTA");
$form['actions']['submit']['#weight'] = 1;

Sigue sin aparecerme el texto editado en el label del text con el nombre de name, y el boton sale en la ultima posicion, debajo de todo.

El codigo que te pase es hasta donde he llegado; ya que no consigo que me coja el tpl.php.

El codigo que uso para ello es:
function insurance_theme(&$existing, $type, $theme, $path) {
$hooks['user_login_block'] = array(
'template' => 'templates/user-login-block',
'render element' => 'form',
);
$hooks['user_register_form'] = array(
'template' => 'templates/user-register-form',
'render element' => 'form',
);
return $hooks;
}

El de login funciona correctamente; tengo dentro de la carpeta templates el archivo user-register-form.tpl.php y alli este codigo, aunque solo de prueba; en realidad de lo que pone aqui no me vale nada

dpm($form);

hide($form['body']);

print drupal_render_children($form['field_custom_image']);
print drupal_render_children($form['title']);

print drupal_render_children($form);

Gracias de nuevo
  #6 (permalink)  
Antiguo 31/07/2013, 08:25
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

Sobre lo del tpl, quizás te sirva este artículo que te pongo aca: https://drupal.org/node/1211520

Creo que le das demasiadas vueltas a un tema que es bastante fácil de solucionar, qué significa este código?

Código PHP:
Ver original
  1. $form['name']['#title'] = t("Custom title");
  2. $form['name']['#weight'] = 1000;
  3. $form['actions']['submit']['#value'] = t("CREA UNA CUENTA");
  4. $form['actions']['submit']['#weight'] = 1;

No entiendo que intentas hacer con ese cambio, me lo podés explicar?

Lo que debes hacer es agregar los campos con el Profile, reorganizarlos con el hook_form_alter y maquetarlos con el user-register.tpl.php (o user--register.tpl.php si trabajas en Drupal 7).

Implementa esto:

Código PHP:
Ver original
  1. function insurance_form_alter(&$form, &$form_state, $form_id) {
  2.    if ($form_id == "user_register_form"){
  3.        echo "<pre>"; print_r($form); exit;
  4.    }
  5. }

Obtené los valores del formulario y fijate el weight que tiene cada uno, y ponelo de tal manera que quede ordenado como vos queres. Si tiene weight 1000 seguro que saldrá abajo del todo.

Creo que es mejor que primero decidas que vas a hacer con los campos, luego reordenalos, y por último ponete a maquetar la página. No se si usar el hook_theme sea la mejor opción para alguien que recién está empezando. La tendencia siempre está en complicarse haciendo módulos personalizados o queriendo usar más PHP que las facilidades que te brinda Drupal.

Mi recomendación es que empieces así, y cuando sepas reordenar los campos de un formulario entonces ponete a pensar como lo maquetarás.

Fijate como lo hacen en este ejemplo, es muy sencillo: https://drupal.org/node/1010348

Saludos.
  #7 (permalink)  
Antiguo 31/07/2013, 08:57
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Te Volveria a dar las gravias por el aporte anterior, pero se quedan cortas, eres un monstruo; lo que intentaba con
Cita:
$form['name']['#title'] = t("Custom title");
$form['name']['#weight'] = 1000;
$form['actions']['submit']['#value'] = t("CREA UNA CUENTA");
$form['actions']['submit']['#weight'] = 1;
era quitar el titulo al campo name, y ponerlo en ultimo lugar, al boton cambiarle el texto y ponerlo en primer lugar

eso ha quedado solucionado con:
Código:
$form['account']['name']['#title'] = t("Custom title");
            $form['account']['name']['#weight'] = 1000;
            $form['account']['name']['#description'] = t("");
            
            $form['actions']['submit']['#value'] = t("CREA UNA CUENTA");
            $form['actions']['submit']['#weight'] = 1;
Ahora solo me queda el problema del tpl, intento mostrarlo con este codigo:
Código:
function insurance_theme(&$existing, $type, $theme, $path) {
   $hooks['user_login_block'] = array(
     'template' => 'templates/user-login-block',
     'render element' => 'form',
   );
   $hooks['user_register_form'] = array(
       'arguments' => array('form' => NULL),
     'template' => 'templates/user-register',
       'render element' => 'form',
   );
   return $hooks;
 }
function insurance_preprocess_user_register_form (&$variables) { 
    $variables['form'] = drupal_build_form('user_register_form', user_register_form(array())); 
}
tengo dentro de la carpeta templates un archivo llamado:
user--register.tpl.php como me comentas al ser drupal 7; su contenido es este (uno cualquiera que e sacado de algun sitio de internet) para probar
Código:
<h1>Testing that this is my own user registration form</h1>
<?php print render($form['form_id']); ?>
<?php print render($form['form_build_id']); ?>

<?php 
print render ($form['field_firstname']);
print render ($form['field_lastname']);
print render ($form['field_dob']);
print render ($form['name']);
print render ($form['mail']);
print render ($form['pass']);
print render ($form['timezone']);
print render ($form['form_token']);

print drupal_render($form['actions']); ?>

<input type="submit" name="op" id="edit-submit" value="Create"  class="form-submit" />
pero no me muestra ese formulario
  #8 (permalink)  
Antiguo 31/07/2013, 09:09
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

La funcion insurance_theme está en tu theme verdad? Porque no debes hacerlo con un hook.

Probá hacer esto:

Código HTML:
Ver original
  1. function insurance_theme() {
  2.   $items = array();
  3.  
  4.   $items['user_register_form'] = array(
  5.     'render element' => 'form',
  6.     'template' => 'user-register-form',
  7.   );
  8.  
  9.   return $items;
  10. }

Recordá que debes limpiar la caché del site luego de estos cambios, porque Drupal a veces cachea los resultados.

Este tutorial es muy bonito, te va a servir de mucho: https://drupal.org/node/350634

Saludos.
  #9 (permalink)  
Antiguo 01/08/2013, 01:13
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Gracias de nuevo por tu tiempo Mario.

Lamento decirte que esta vez no ha funcionado, he copiado el codigo que me pasaste y no ha tenido ningun efecto; ni antes ni despues de limpiar la cache.

Tambien me paseado por el tutorial que me as mandado; ya le habia visto y lo habia intentado seguir alguna que otra vez, he vuelto a seguirlo, pero sin exito.

Alguna otra idea?

Un abrazo amigo
  #10 (permalink)  
Antiguo 01/08/2013, 01:24
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

Lo has puesto en tu fichero template.php a esto no?
Que raro, debería funcionar ya que la misma gente de Drupal te está diciendo cómo hacerlo.

Si tenés tus templates dentro de la carpeta template, entonces agrega esta línea:

Código PHP:
Ver original
  1. 'path' => drupal_get_path('theme', 'yourtheme') . '/templates',

No se como se llame tu theme, pero reemplazalo por el nombre del tuyo.

Saludos.
  #11 (permalink)  
Antiguo 01/08/2013, 01:32
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Nada amigo sin cambios
Este es el codigo que tengo ahora

Código:
function insurance_theme() {
  $items = array();
 
  $items['user_register_form'] = array(
    'render element' => 'form',
      'path' => drupal_get_path('theme', 'insurance') . '/templates',
    'template' => 'user-register-form',
  );
  
  return $items;
}
este el que tenia:
Código:
function insurance_theme(&$existing, $type, $theme, $path) {
   $hoks = array();
   $hoks['user_login_block'] = array(
     'template' => 'templates/user-login-block',
     'render element' => 'form',
   );
    $hoks['user_register_form'] = array(
        'render element' => 'form',
        'template' => 'templates/user-register-form',
      );
   return $hoks;
 }
  #12 (permalink)  
Antiguo 01/08/2013, 01:34
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

El codigo del bloque del login si funciona, es por eso que no entiendo que este dando tanto problema el nuevo de registro....
Deberia ser igual de sencillo y parece ser que drupal dice que es la manera de hacerlo...
  #13 (permalink)  
Antiguo 01/08/2013, 01:58
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

En este artículo lo ponen de muchas maneras diferentes, la verdad alguna debería funcionar: https://drupal.org/node/1211520

No tengo más forma de poder ayudarte, la verdad debe ser un pequeño error fácil de solucionar.

Saludos.
  #14 (permalink)  
Antiguo 01/08/2013, 03:36
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

acabo de probar todas las posibles soluciones que aportan, pero nada, ninguna de ellas.

Código:
$hoks['user_login_block'] = array(
     'template' => 'templates/user-login-block',
     'render element' => 'form',
   );
         $hoks['user_register_form'] = array(
      'template' => 'templates/user-register-form',
      'arguments' => array('form' => NULL),
    );
   return $hoks;
Esto es lo ultimo que tengo, creo que el problema esta en $hoks['user_register_form'] que no reconoce el no mbre y se lo salta o algo parecido, he visto que en algunos lados lo llaman $hoks['user_register'], pero ni de una ni de la otra manera

Un saludo y gracias por todo el esfuerzo Mario
  #15 (permalink)  
Antiguo 01/08/2013, 04:12
Avatar de MarioAraque
Colaborador
 
Fecha de Ingreso: octubre-2009
Ubicación: Valencia
Mensajes: 1.398
Antigüedad: 15 años, 1 mes
Puntos: 265
Respuesta: Formulario de registro personalizado (Drupal 7)

Lamento no poder ayudarte con eso.
Deberás empezar desde cero, no lo hagas con hooks ni nada al theme, primero intenta hacer que funcione el tpl y luego intenta ponerle las imágenes.

Saludos.
  #16 (permalink)  
Antiguo 01/08/2013, 04:20
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

Gracias, vere que consigo, te mantendre informado

Un saludo
  #17 (permalink)  
Antiguo 02/08/2013, 03:15
 
Fecha de Ingreso: marzo-2012
Ubicación: Madrid
Mensajes: 37
Antigüedad: 12 años, 7 meses
Puntos: 0
Respuesta: Formulario de registro personalizado (Drupal 7)

por fin di con la solucion

Código:
function insurance_form_user_register_form_alter(&$form, &$form_state, $form_id) {
  $form['#theme'] = 'user_register_form';
}
function insurance_theme() {
  return array(
    'user_register_form' => array(
      'render element' => 'form',
      'template' => 'templates/user-register-form',
    ),
  );
}
function insurance_preprocess_user_register(&$variables) {
  $variables['rendered'] = drupal_render_children($variables['form']);
}
hay dejo el codigo para quien le sea de utilidad

el truco esta en la 2 linea, que es la que le da el nombre del theme

Etiquetas: drupal7, formulario, personalizado, registro
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:49.