Personalizar formulario de registro Moodle 2.6

Re: Personalizar formulario de registro Moodle 2.6

de Valentina Lombardy -
Número de respuestas: 2

Para agregar los campos al formulario de registro simplemente se debe ingresar a:

Área personalAdministración del sitio/ Usuarios Cuentas / Campos de perfil del usuario


Alli ingresas todos los campos que se requieras personalizar, y seleccionas si desean que esten en la pagina de registro o en la pagina de perfil. No es necesario modificar la base de datos ni los archivos php



En respuesta a Valentina Lombardy

Re: Personalizar formulario de registro Moodle 2.6

de Francisco Gonzalez -

Bueno dias.

Tengo un problema que no se si por aqui me lo podeis solucinar:

Estoy intentando agregar nuevos campos al formulario de 'crear cuenta'. y me he fijado que se puede hacer a mano mirando https://docs.moodle.org/dev/Form_API , pero la cosa es que no te crea los campos en la BBDD, al contrario que introduciendolos mediante Administracion del sitio->usuarios->Campos de perfil de usuario, que SI te lo crea, pero con la diferencia de que todo lo guarda en  profile_signup_fields($mform). La cosa es que desde aqui te los muestra todos, y me meto en la funcion que lo pinta , que es la siguiente:

function profile_signup_fields($mform) {
    global $CFG, $DB;

    // Only retrieve required custom fields (with category information)
    // results are sort by categories, then by fields.
    $sql = "SELECT uf.id as fieldid, ic.id as categoryid, ic.name as categoryname, uf.datatype
                FROM {user_info_field} uf
                JOIN {user_info_category} ic
                ON uf.categoryid = ic.id AND uf.signup = 1 AND uf.visible<>0
                ORDER BY ic.sortorder ASC, uf.sortorder ASC";

    if ( $fields = $DB->get_records_sql($sql)) {
        foreach ($fields as $field) {
            // Check if we change the categories.
            if (!isset($currentcat) || $currentcat != $field->categoryid) {
                 $currentcat = $field->categoryid;
                 $mform->addElement('header', 'category_'.$field->categoryid, format_string($field->categoryname));
            }
            require_once($CFG->dirroot.'/user/profile/field/'.$field->datatype.'/field.class.php');
            $newfield = 'profile_field_'.$field->datatype;
            $formfield = new $newfield($field->fieldid);
            $formfield->edit_field($mform);
        }
    }
}

El problema es que yo no quiero que me los muestre en esa catergoria(en la que los tienes que meter cuando creas los campos, que no te dejan tenerlos sin categoria). Campos que añado desde Administracion del sitio->usuarios->Campos de perfi los quiero poner, por ejemplo en En la primera categoria (creo que se llama datos de usuario), y otros en la segunda categoria (Datos de contacto). Estos campos creo que los cambié en las cadenas de texto, pero son los primeros que aparecen (Los campos que vienen por defecto, que son 2 ). Pues la cosa es que en estas categorias por defecto quiero meter los campos nuevos que estoy generando, pero como me lo pinta de una vez todos los campos, no consigo sacarlos uno a uno. Asi es como los pinta en el signup-form:

$mform->addElement('text', 'city', get_string('city'), 'maxlength="120" size="20"');
        $mform->setType('city', core_user::get_property_type('city'));
        if (!empty($CFG->defaultcity)) {
            $mform->setDefault('city', $CFG->defaultcity);
        }

        $country = get_string_manager()->get_list_of_countries();
        $default_country[''] = get_string('selectacountry');
        $country = array_merge($default_country, $country);
        $mform->addElement('select', 'country', get_string('country'), $country);

        if( !empty($CFG->country) ){
            $mform->setDefault('country', $CFG->country);
        }else{
            $mform->setDefault('country', '');
        }

        profile_signup_fields($mform);


Los campos de 'country' y de'city' son los que vienen por defecto, pero profile_signup_fields($mform) es la que me esta pintando los nuevos que he creado. Pues el problama es ese, ¿Como hago para recorrer esa consulta y sacarlos de profile_signup_fields($mform), en plan profile_signup_fields($mform)->telefono,profile_signup_fields($mform)->calle, etc.....?

Espero haberme explicado lo mejor posible ;)

Muchas gracias de antemano