Bookmark and Share
You are here: Home Documentazione Guide Icone delle cartelle differenti a seconda del contesto
Document Actions

Icone delle cartelle differenti a seconda del contesto

Note: Return to tutorial view.

Cambiare le icone delle cartelle mostrate nei menù di navigazione a seconda che la cartella sia visibile per navigatori anonimi o meno.

Icone delle cartelle differenti a seconda del contesto

Cambiare le icone delle cartelle mostrate nei menù di navigazione a seconda che la cartella sia visibile per navigatori anonimi o meno.

Ciò che si vuole ottenere è che, nel portlet della navigazione, le cartelle siano mostrate con un'icona differente in base ai diritti di accesso dei navigatori anonimi per quei contenuti.

Concretamente, se per una data cartella i navigatori anonimi non hanno il permesso di visualizzazione (View), gli utenti autenticati dovrebbero vedere un'icona rossa per la cartella in questione, invece che una gialla (naturalmente gli utenti non autenticati non vedranno affatto la cartella).

  • Adattare portlet_navigation

In una copia personalizzata di portal_skins/plone_portlets/portlet_navigation, sostituire la linea:

<img tal:replace="structure python:path('here/%s' % sibling.getIcon(1))"

con:

<img tal:replace="structure python:path(here.portal_url.scripts.folder_icon(sibling))"
  • Customizzare l'icona

Creare una copia personale di portal_skins/portal_images/folder_icon.gif, rinominarla come red_folder_icon.gif, caricare una versione dell'icona con i colori alterati.

  • Implementare la logica in uno Script/External Method

Nella propria cartella portal_skins/custom nello ZMI, o in un'altra cartella di skin layer, aggiungere uno "Script (Python)" col nome "folder_icon" con il seguente contenuto, e impostare nella Parameter List: 'obj=None':

canMaybeView = context.anonymousHasRight(obj, 'View')
or context.anonymousHasRight(obj, 'Access contents information')
or context.anonymousHasRight(obj, 'Search ZCatalog')
if canMaybeView:
return 'here/' + obj.getIcon(1)
else:
return 'here/red_' + obj.getIcon(1)

Il confronto dei diritti effettivi deve essere fatto usando un External Method, per evitare limitazioni di diritti per utenti che non hanno ruoli di Manager. Creare un file CheckRights.py nel file system, nella directory Extensions sotto la directory dell'installazione di Zope, con il contenuto seguente:

def anonymousHasRight(folder, right='View'):
"""
For a given Plone folder, determine whether Anonymous has the right
given by parameter 'right' (String). This recurses to parents if
'Acquire' is checked.
Returns 1 if Anonymous has the right, 0 otherwise.
"""
ps = folder.permission_settings()
for p in ps:
if (p['name'] == right):
acquired = not not p['acquire']
break
if acquired:
# recurse upwardly:
parent = folder.aq_parent
return anonymousHasRight(parent, right)
else:
for p in folder.rolesOfPermission(right):
if p['name'] == "Anonymous":
selected = not not p['selected']
return selected

Questo è tutto! Non è molto elegante, ma dovrebbe funzionare. Suggerimenti riguardo a possibili miglioramenti sono i benvenuti.

Credits

Autori, provenienza e altri dati su questo documento.

Questo documento è stato realizzato da:

  • Alice Narduzzo

Fonti e contributi:

Questo how-to è una libera traduzione del testo originale Context-dependent navigation folder icons.