wiki:UIApprofondimentiSuiBlocchi

Version 3 (modified by fero, 3 years ago) (diff)

Azioni sui blocchi di tipo "lista di risorse"

Python

Gasista Felice facilita la creazione dei blocchi generalizzando la produzione di:

  • blocchi
  • blocchi che includono liste di risorse

Liste di risorse

I blocchi che includono liste possono essere implementati semplicemente:

class Block(BlockWithList):

    BLOCK_NAME = "myblockwithlist"
    BLOCK_DESCRIPTION = "myblockwithlistdescription"
    BLOCK_VALID_FOR_RESOURCE_TYPES = [list of valid resource types]

    def _get_resource_list(self, request):
        return request.resource.related_resource_attribute

Ogni blocco può avere associate più azioni. In particolare una lista di risorsa ha sempre associata l'azione CREA. L'azione è permessa ovviamente solo se si hanno i diritti.

È molto semplice integrare le azioni in un blocco. La classe rest.views.blocks.Action è fatta appositamente. Nel nostro blocco non dovremo far altro che:

  1. definire l'azione
  2. restituirla su richiesta secondo il ruolo dell'utente implementando il metodo _get_user_actions(request)

NOTA: queste azioni dovrebbero apparire in alto a destra di ogni blocco di riferimento, ma per ora non importa che appaiano sopra la lista di risorse in modo molto rudimentale.

Questa la parte da implementare nel blocco

    # Actions
    ACTION_CREATE_GAS = Action(
        name=CREATE, 
        verbose_name=_("Add GAS"), 
        url=urlresolvers.reverse('admin:gas_gas_add')
    )

    def _get_user_actions(self, request):

        user_actions = []
        if request.user.has_perm("di creare un GAS"):
            user_actions.append(self.ACTION_CREATE_GAS)
        return user_actions

IMPORTANTE: le azioni possono specificare un url apposito come in questo caso, oppure assumere l'url predefinito che fa sì che ci si ritrovi il nome dell'azione (nell'esempio precedente CREATE), come valore del parametro args del metodo get_response(request, resource_type, resource_id, args)

Javascript

Gasista Felice facilita la creazione dei blocchi generalizzando la produzione di:

  • liste
    • in forma di elenco
    • in forma di elenco dettagliato (NOTA TODO: predisposto ma non implementato)
    • in forma di icone (NOTA TODO: predisposto ma non implementato)
  • form

A questo proposito è stato creato il file static/nui/scripts/jquery.rees.js

Il codice js per un nuovo blocco che implementa una lista ora è

jQuery.REGISTER_BLOCK_UPDATE_HANDLER('gas_list', jQuery.resource_list_block_update);

Esiste la possibilità di impostare la modalità di visualizzazione predefinita impostando

jQuery.BLOCK_REGISTER_DISPLAY_DEFAULT_BY_NAME = { 'gas_list' : 'resource_list_as_icons' }