Como crear un nuevo campo en la sección del curso

Issue #10 resolved
Nolberto Valencia created an issue

Buenas tardes compañero. Tengo la curiosidad de como se puede agregar un campo nuevo en edición de sección, este campo permita que el docente escoja un conjunto de imágenes que se encuentra almacenada en moodle y esta imagen seleccionada se pueda ver en la vista del curso.

Comments (10)

  1. David Watson repo owner

    Hola Nolberto. ¿Has visto el extensión "mod_unilabel"? Quizas puede hacer lo que quieras (o algo similar), especialmente con sus sub plugins "carousel" y "grid".

    Dependiendo de los detailes, puede ser que un extensión "mod" (como unilabel, u otro) seria mejor para esta tarea que un formato de curso. La razón es, si he entendido bien, tu projecto es mas sobre mostrar y almacenar artículos de conentido (es esta caso imagines). En general los extensiónes "mod" tratan con el contenido, y los formatos más con la estructura.

    Espero que esto sea de ayuda. ¡Disculpa mis errores!

  2. Nolberto Valencia reporter

    Gracias por responderme David. Lo que mas deseo hacer es el proceso que hiciste principalmente con el tema de los icons que puedes seleccionar unos icons a cada sección del tema.

  3. David Watson repo owner

    Vale entiendo.

    "Moodle core" hace la pagina "Editar la configuración del curso", pero hace un "callback" al formato del curso, para determinar que son los opciones que requiere el formato.

    En "Tiles", puedes ver las opciones en lib.php (https://bitbucket.org/dw8/moodle-format_tiles/src/master/lib.php) específicamente section_format_options().

    Si quieres añadir otro opción, es necesario editar $sectionformatoptions y sectionformatoptionsedit en section_format_options().

    $sectionformatoptions = array(
        'tileicon' => array(
            'default' => '',
            'type' => PARAM_TEXT,
        ),
    );
    
    $sectionformatoptionsedit['tileicon'] = array(
                   'label' => $label,
                   'element_type' => 'select',
                   'element_attributes' => array($tileicons),
                   'help' => 'tileicon',
    );
    

    Puedes ver los datos para cada sección del curso en la base de datos así:

    • SELECT * FROM mdl_course_format_options where format = 'tiles' and name = 'tileicon'

    o en el código así:

    • echo $DB->get_field('course_format_options', 'value', array('format' => 'tiles', 'name' => 'tileicon', 'courseid' => 2, 'sectionid' => 3));

    Espero que sea la información que quieras

  4. Nolberto Valencia reporter

    Muchas gracias David. Es una gran ayuda esta información. Me gustaría preguntar después de que guarde el campo como se hace para visualizar el nuevo campo en los template .mustache?

  5. David Watson repo owner

    Hola Nolberto disculpas la retraso. Un ejemplo para mostrar un neuvo campo 'tileicon2':

    En classes/output/course_output, preparar los datos:

    public function export_for_template(\renderer_base $output) {
      global $DB;
      $sectionid = 2;
      $data['tileicon2'] = $DB->get_field('course_format_options', 'value', array('format' => 'tiles', 'name' => 'tileicon2', 'courseid' => $this->course->id, 'sectionid' => $sectionid));
      ......
    }
    

    En el template (por ejemplo multi_section_page.mustache), imprimir los datos que has definido en 'export_for_template' :

    {{#tileicon2}}
        El campo 'tileicon2' existe por este curso/sección. Valor: {{tileicon2}}
    {{/tileicon2}}
    {{^tileicon2}}
        El campo 'tileicon2' no existe por este curso/sección.
    {{/tileicon2}}
    

    Este pagina explica mas (en Ingles): https://docs.moodle.org/dev/Templates

  6. Nolberto Valencia reporter

    Hola compañero David.

    Realizo las lineas de código que corresponde al proyecto y no puedo visualizar y no me permite la visualización del contenido de la BD.

    Otra curiosidad que tengo que hacer para no visualizar la lista sino las imágenes que se encuentra en la carpeta en el modal.

  7. David Watson repo owner

    Hola, no puedo ver lo que tienes después de 'courseid' => $this->co .... en tu código. ¿Estás seguro que este línea es correcto? Muchas veces los errores en esta clase no producirán mensajes de error obvios. Durante el desarrollo, para ver cualquier mensaje más fácilmente, desactivo la navegación animada temporalmente. O quizás podrías añadir su código temporalmente al fin de format.php, solo para ver si hay un error, es decir, print_object($DB->get_field('course_format_options', .....)); Otra sugerencia sería imprimir más información en mustache para que puedas ver cómo funciona.

    Tileimg estado:<br>
    {{#tileimg}}
        Si: {{tileimg}}
    {{/tileimg}}
    {{^tileimg}}
        No
    {{/tileimg}}
    Fin
    

    Para tu segunda pregunta, después de cargar la página, si el usuario tiene JavaScript, /amd/src/edit_form_helper.php cambia algunas elementos de la forma. La lista todavia esta presente (porque es necesaria), pero esta ocultado. Línea 143: "// We can hide the original select box now as users will use the button instead".

    Es posible que la nueva versión de Tiles (el mes que viene) también te interese, porque tendrá la capacidad por un profesor seleccionar y usar una imagen para el fondo de un mosaico. Está casi todo listo. No estoy seguro de lo que estás haciendo, pero puede ayudar.

  8. Nolberto Valencia reporter

    Hola compañero.

    Cuando estoy en proceso de editar la sección de un curso muestra la opción de cambio de icon por medio de un modal. El nuevo campo que cree se llama tileimg ya me almacena el dato en la bd pero me gustaria visualizar la imagen que deseo seleccionar desde el modal.

  9. Log in to comment