Skip to content. Skip to navigation

ICTP Portal

Sections
You are here: Home notes on site structure and other plone tricks Note sui portlet delle activities e dei seminars
Personal tools
Document Actions

Note sui portlet delle activities e dei seminars

Il problema fondamentale e' che AGENDA e' fatto abbastanza male, e chi vi inserisce i dati sbaglia, percio' ci troviamo con un database eccessivamente complesso, ridondante e mancante di alcuni vincoli necessari tra le varie tabelle.

Quello che ho alla fine capito di quel che mi serviva riguardo alcune delle relazioni tra le tabelle sono:

field AGENDA LEVEL
field_name    
field_id field_of_interest
  fid uid
  title

ovvero: AGENDA.field_of_interest e' una foreign key collegata a field.field_id, e AGENDA.fid e' una foreign key collegata a LEVEL.uid.

La tabella field contiene i campi di interesse. Il contenuto interessante e' la seguente:

field_id field_name
2 Condensed Matter Physics
3 Ecological and Environmental Economics
4 High Energy Physics
5 Mathematics
6 Physics of Weather and Climate
7 Public Lecture
8 Structure and Non-Linear Dynamics of the Earth
9 Chemical Physics
10 Disorder and Strong Electron Correlations
11 Phenomenology Journal Club
12 Algebra/Topology/K-Theory
13 Algebraic Geometry
14 Colloquium
15 Statistical Physics
100 Hosted
22 Other
23 Without field level2
16 Physics of the Living State
17 Fluid Dynamics
24 Choose one
18 Applied Physics

get_field_of_interest_from_URL

In portal_skins esiste uno script chiamato get_field_of_interest_from_URL cui si deve passare il proprio context. Lo script controlla la prima parte del path (ad esempio, /math, /cmsp etc...) e restituisce il Field of Interest cui presumibilmente si e' interessati; semplicemente contiene un mapping tra i section-name (usati, per inciso, anche per la scelta del logo e del css da usare) e il field of interest.

get_activities_for_url

Questo script chiama innanzitutto get_field_of_interest_from_URL per capire quale sia l'area di interesse per la pagina richiesta. Per questo motivo e' necessario passare allo script context. Successivamente chiama lo script get_from_agenda e restituisce una tupla (field, results, url) in cui:

field
e' l'area di interesse (field_of_interest) in forma leggibile
results
e' l'elenco delle attivita' richieste
url
e' l'url necessaria per richiedere le attivita'. In effetti ora non e' piu' necessaria, dato che abbiamo un unico page template per visualizzare seminari e attivita' inside e outside trieste.

I parametri activity e outin servono rispettivamente per capire se si richiede un seminario (activity=='seminars') o un'attivita' (activity='activities', che e' il default), e per richiedere se si desidera avere le attivita' ospitate dall'ICTP (outin='inside'), esternamente (outin='outside') o qualsiasi (outin=False, che e' il default)

get_from_agenda

Questo e' lo script piu' complicato: seleziona il field dal contesto (probabilmente e' ridondante, potremmo farlo passare da get_activities_for_url), si prende tutti i seminari e le attivita' grazie allo ZSQL method select_everithing_from_agenda [1] e poi filtra i risultati in base ai parametri passati: outside_inside, activity, field.

readabledate_smart

Questo script converte semplicemente una data in un'altra. Dovrebbe essere retrocompatibile con il vecchio readabledate (che comunque era buggato). Adesso il comportamento di questo script e' tale per cui puo' restituire anche un range di due date; in tal caso, cerca di essere abbastanza smart da eliminare le inforamzioni ridondanti, quindi se abbiamo date del tipo ``dd/mm/yy`` e ``dd1/mm1/yy`` (ovvero con l'anno in comune) la stringa restituita sara` "dd Month - dd1 Month1 yyyy". Allo stesso modo se le date sono ``dd/mm/yy`` e ``dd1/mm/yy`` restituira' "dd - dd1 Month yyyy", mentre se le date sono uguali restituisce "dd Month yyyy". I due portlet portlet-seminars e portlet-activities sono stati modificati per usare il nuovo script.

portlet-seminars [2]

Questo page template chiamera' lo script get_activities_for_url con opzione activity='seminars'. Se lo script restituisce field diverso da None allora mostrera' nei vari titoli anche l'area di interesse.

Se si passa in query il parametro seminars_maxresults=N verranno visualizzati N seminari anziche' il default (5)

portlet-activities [2]

sostanzialmente questo portlet e' uguale al precedente con le sostituzioni (case insensitive):

s/seminars/activities/
s/seminar/activity/

(e quindi ammette il parametro activities_maxresults anziche' seminars_maxresults :))

[1]si' lo so si scrive con la 'y' ma ormai ho sbagliato quindi ce lo teniamo sgrammaticato :)
[2](1, 2) sostanzialmente non e' necessario cambiare nulla tra la versione 2.1 di plone e la 2.5, ad eccezione di questi due page template. Infatti in plone 2.5 ho usato le view (cerca per @@calendar_view), che e' una roba di zope3 che sta in plone2.5 grazie a Five (vorresti che avessi messo dei link vero?). In plone2.1 invece bisogna recuperare year, month e day dal modulo DateTime. (probabilmente avremmo potuto farlo anche nel 2.5, ma fa piu' figo usare le view...)

Powered by Plone This site conforms to the following standards: