2013-05-17 5 views
6

Sto usando elfinder e vorrei aggiungere una nuova funzionalità aggiungendo un comando al menu di scelta rapida. Ho trovato una soluzione sul tracker dei problemi github del progetto ma non riesco a farlo funzionare. Ecco quello che faccio: voce di menuAggiunta di una voce di menu di scelta rapida personalizzata a elFinder

var elf; 
jQuery().ready(function() { 
    elFinder.prototype._options.commands.push('editimage'); 
    elFinder.prototype._options.contextmenu.files.push('editimage'); 
    elFinder.prototype.i18.en.messages['cmdeditimage'] = 'Edit Image';   
    elFinder.prototype.i18.de.messages['cmdeditimage'] = 'Bild bearbeiten'; 
    elFinder.prototype.commands.editimage = function() { 
     this.exec = function(hashes) { 
      console.log('hallo'); 
     } 
    } 
    elf = jQuery('#elfinder').elfinder({ 
    ... 
    //elfinder initialization 

Il contesto non si presenta, nessun messaggio di errore è da ricercarsi nella console. Ho anche provato a inserire editimage in contextmenu -> "files" nella parte init nel caso in cui fosse stato sovrascritto dall'inizializzazione.

risposta

20

ho trovato la soluzione: Gli esempi non mostrano il fatto che si bisogno di avere una funzione chiamata this.getstate all'interno della funzione elFinder.prototype.commands.yourcommand. Restituisce 0 quando l'icona è abilitata e -1 quando è disabilitata.

Così il codice completo per aggiungere il proprio punto di menu o voce di menu contestuale si presenta così:

var elf; 
jQuery().ready(function() { 

    elFinder.prototype.i18.en.messages['cmdeditimage'] = 'Edit Image';   
    elFinder.prototype.i18.de.messages['cmdeditimage'] = 'Bild bearbeiten'; 
    elFinder.prototype._options.commands.push('editimage'); 
    elFinder.prototype.commands.editimage = function() { 
     this.exec = function(hashes) { 
      //do whatever 
     } 
     this.getstate = function() { 
      //return 0 to enable, -1 to disable icon access 
      return 0; 
     } 
    } 
    ... 
    elf = jQuery('#elfinder').elfinder({ 
     lang: 'de',    // language (OPTIONAL) 
     url : '/ext/elfinder-2.0-rc1/php/connector.php', //connector URL 
     width:'100%', 
     uiOptions : { 
      // toolbar configuration 
      toolbar : [ 
       ... 
       ['quicklook', 'editimage'], 
       /*['copy', 'cut', 'paste'],*/ 
       ... 
      ]}, 
     contextmenu : { 
      ... 
      // current directory file menu 
      files : [ 
       'getfile', '|','open', 'quicklook', 'editimage', ... 
      ] 
     } 
    }).elfinder('instance'); 

}); 

Spero che questo aiuti qualcuno con lo stesso problema.

+0

grazie mille ! – KryDos

+0

Questo è finalmente salvato molte ore di sperimentazione. Ti chiedi perché il team di elFinder non è in grado di scrivere una simile risposta come questa. Grazie ancora. – jm666

+0

Yp che fa il trucco. Grazie mille! – Gogol

4

Grazie per la risposta, fantastico!

Una cosa che non era chiara era come passavano le variabili.

Quindi, per chiunque altro che trova questa pagina ....

elFinder.prototype.commands.editpres = function() { 
    this.exec = function(hashes) { 
     var file = this.files(hashes); 
     var hash = file[0].hash; 
     var fm = this.fm; 
     var url = fm.url(hash); 
     var scope = angular.element("body").scope(); 
     scope.openEditorEdit(url); 
    } 
    // Getstate configured to only light up button if a file is selected. 
    this.getstate = function() { 
     var sel = this.files(sel), 
     cnt = sel.length; 
     return !this._disabled && cnt ? 0 : -1; 
    } 
} 

per ottenere la vostra icona di presentarsi, aggiungere il seguente al file css:

.elfinder-button-icon-editpres { background:url('../img/icons/editpres.png') no-repeat; }