Classi Python
Up one level
Che cos'è una Classe?
Il modo migliore per comprendere una classe (in python viene definita con class) è pensarla come un distinto pezzo di codice contenente una serie di metodi ('azioni' di qualche tipo) e attributi ('proprietà' aventi un dato valore).
Nel caso dei componenti, lo scopo principale di una classe è quello di elaborare i pezzi di informazione che un componente necessita visualizzare. Un buon esempio è la class del logo viewlet. La si può trovare in:
- [your egg location]/plone/app/layout/viewlets/common.py – cercare LogoViewlet
Dopo qualche azione preliminare la classe LogoViewlet ricerca il nome dell'immagine che si desidera usare per il logo (è definita nel property sheet di base_properties) e lo assegna a una variabile:
logoName = portal.restrictedTraverse('base_properties').logoName Dopodiché la classe imposterà un ulteriore proprietà contentente il tag in html del logo, correttamente compilato con tutti i valori necessari quali: dimensione e testo alternativo:
self.logo_tag = portal.restrictedTraverse(logoName).tag()
Infine, nel caso si riveli necessario, imposterà un ulteriore proprietà ricercando il titolo del sito:
self.portal_title = self.portal_state.portal_title()
Nel page template associato con questa viewlet è possibile appigliarsi a queste informazioni (self.logo_tag, self.portal_title) usando la variabile “view”:
<img src="/it/labs/documentazione/manual/usare-i-theme-in-plone-3/costruire-le-diverse-parti/components/s-1/logo.jpg" alt="" tal:replace="structure view/logo_tag" />
Devo per forza usare le Classi?
Le viewlets tendono ad essere collegate con una classe Python che indica il template. Quindi, anche se si desidera solamente creare un nuovo template, sarà necessario scrivere una classe che indichi il nuovo template. La sezione Elementi di questo manuale dovrebbe fornire un sostegno in quanto fornisce un frammento di codice per ogni elemento in modo da copiare e incollare nel proprio prodotto.
Riportiamo un esempio qui di seguito. Il template standard che visualizza il logo del portale in realtà non fa uso di view/portal_title. Se si desidera quindi incorporarlo in qualche modo nel proprio logo bisognerà scrivere il proprio template e anche la propria classe:
from plone.app.layout.viewlets.common import LogoViewlet
from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile
class [nome-della-vostra-classe](LogoViewlet):
render = ViewPageTemplateFile('[nome-del-vostro-template]') - Per prima cosa importare tutti i moduli necessari per costruire la classe usando la sintassi di Python "from ... import ...".
- Successivamente si deve definire la classe. In questo caso è importante basarla su una classe preesistente così da poter sovrascrivere solo le cose necessarie e non tutta la classe. Inserire quindi il nome della classe preesistente tra parentesi dopo il nome della propria classe (assicurarsi prima di averla già importata). Non dimenticare i due punti!
- Riscrivere infine tutti i metodi e gli attributi che si vuole sovrascrivere (di cui si vuole cambiare il comportamento n.d.r.). Nel nostro caso si è scelto di riscrivere solo il metodo render per visualizzare il nostro template.
Nota bene: il rientro del margine è molto importante in Python; per convenzione si usano quattro spazi (invece che il tasto tab). In caso di difficoltà prima di tutto controllare molto bene l'indentazione.
Se si vuole provare con qualcosa di più impegnativo o semplicemente saperne di più, si rimanda ad un'introduzione a Python semplice e diretta:
