imagenes en bloques 2.7

imagenes en bloques 2.7

de Alberto Marina -
Número de respuestas: 4

Buenas a todos,

Estoy creando un bloque,

necesito luego poder mostrar las imagenes que guardo con este form.

require_once("{$CFG->libdir}/formslib.php");
class myblock_form extends moodleform {

function definition() {

$mform = & $this->_form;
$mform->addElement('header', 'displayinfo', get_string('header_form', 'block_myblock'));
$mform->addElement('text', 'name', get_string('namemyThing', 'block_myblock'));
$mform->setType('description', PARAM_TEXT);
$mform->addRule('name', null, 'required', null, 'client');
$mform->addElement('text', 'url', get_string('urlmyThing', 'block_myblock'));
$mform->setType('description', PARAM_PATH);
$mform->addRule('url', null, 'required', null, 'client');


// add filename selection.
$mform->addElement('filepicker', 'image', get_string('filelogo','block_myblock'), null, array('accepted_types' => 'image'));
$this->add_action_buttons();
}

y después trato con 

    if (!$DB->insert_record('block_mitabla', $fromform)) {

        print_error('inserterror', 'block_myblock');

    }

eso "funciona", seguro que falta cargar la imagen a la bd ya que solo hago el $DB->insert_record(...), pero luego desde lib.php como muestro esta imagen?

solo encuentro por la documentación de moodle esto 

$content = $mform->get_file_content('userfile'); 

pero yo no quiero mostrarlo a través de un form triste


Gracias por la ayuda.

Promedio de valoraciones: -
En respuesta a Alberto Marina

Re: imagenes en bloques 2.7

de David Monllaó -

Hola Alberto,


Las imagenes se guardan en disco; si te entiendo bien el proceso seria 

* guardar formulario

* processar los datos que vengan del formulario incluyendo un $success=$mform->save_file('userfile',$fullpath,$override);

* usar la File API para recuperar el archivo y mostrarlo


Mas info en:

http://docs.moodle.org/dev/Using_the_File_API_in_Moodle_forms

http://docs.moodle.org/dev/File_API

En respuesta a David Monllaó

Re: imagenes en bloques 2.7

de Alberto Marina -

Gracias David,

Que $fullpath le pongo? La que a mi me interese o alguna en especial?

Con esto tendria que ser capaz de mostrar la imagen no?

$fs= get_file_storage();

// Prepare file record object
$fileinfo=array(
'component'=>'mod_mymodule',// usually = table name
'filearea'=>'myarea',// usually = table name
'itemid'=>0,// usually = ID of row in table
'contextid'=>$context->id,// ID of context
'filepath'=>'/',// any path beginning and ending in /
'filename'=>'myfile.txt');// any filename

// Get file
$file=$fs->get_file($fileinfo['contextid'],$fileinfo['component'],$fileinfo['filearea'],
$fileinfo['itemid'],$fileinfo['filepath'],$fileinfo['filename']);

// Read contents
if($file){
$contents=$file->get_content();
}else{
// file doesn't exist - do something
}

Pone que tengo q ponerle el nombre del archivo, según la form api el campo de la imagen es int(2) guarda un "id".

y ya perdona mi ignorancia, el $context de donde lo saco?


Menudo atracón a contestar, gracias.

Un saludo

En respuesta a Alberto Marina

Re: imagenes en bloques 2.7

de Alberto Marina -
Perdonar, de nuevo.
Llevo toda la p*** mañana y no soy capaz.

Pongo esto en el view.php del bloque:
 var_dump($success=$sponsorship->save_file('image','/',false));

siempre me devuelve false!

Que tengo que hacer para guardar y luego mostrar la imagen?

Gracias.
En respuesta a Alberto Marina

Re: imagenes en bloques 2.7

de Lucio García López -

Hola Alberto,

¿Tuviste éxito con este problema? 

Estoy desarrollando un bloque para la versión 3.3 de Moodle, en este bloque estoy creando un formulario en el cual hago uso de filemanager para seleccionar una imagen y guardarla, me estoy guiando de información en https://docs.moodle.org/dev/Using_the_File_API_in_Moodle_forms

He logrado guardar las imagen en la tabla files y también logro recuperarlo para mostrarlo a los usuarios.

El problema que tengo es que después de un tiempo, las imágenes son borradas automáticamente por el cron.

¿Alguien puede indicarme que estoy haciendo mal? deseo que las imágenes no se eliminen.

Les comparto parte del código que estoy empleando para guardar en la tabla files:

$context = CONTEXT_BLOCK::instance($blockid);

if (!($lastinsertid=$DB->insert_record('articulo', $fromform))) {

            print_error('inserterror', 'monedas');

        }else{ //Lucius - Aquí inserta en tabla files

            if ($draftitemid = file_get_submitted_draft_itemid('filename')) {

                file_save_draft_area_files($draftitemid, $context->id, 'block_monedas', 'articulo', $lastinsertid, array('subdirs' => false, 'maxfiles' => 1, 'accepted_types' => array('.png','.jpg')));

                }

            }

Saludos!

Lucio G.