Progetto My Campus

La pagina personale dello studente – e qualcosa di più

Nona settimana – dall’8 novembre al 18 novembre


Primi esperimenti con l’interfaccia di gestione di Zope


Questa fase consiste nell’esplorare l’interfaccia di gestione di zope e provare, in modo casuale, a fare degli esperimenti modificando i contenuti delle principali cartelle.


portal_skin


Tra i contenuti del nostro portale possiamo trovare la cartella portal_skin, la quale contiene tutti i dati riguardanti l’aspetto grafico del portale stesso. Tra le varie sezioni esiste la cartella ‘Custom’ che contiene tutte le nostre personalizzazioni, la cartella ‘archetypes’ che contiene tutti i tipi di contenuto che verranno visualizzati e ovviamente molte altre cartelle.
Il primo esperimento consiste nel ‘personalizzare’ la pagina di edit di un qualunque oggetto. Questa pagina si trova in ‘archetypes’ è si chiama ‘base_edit’; tale pagina viene visualizzata ogni qualvolta si inserisce, dall’interfaccia plone (quindi non da zope), un oggetto (cartella, pagina, favourites, ect…).
Cliccando sulla pagina ‘base_edit’ appare il seguende codice

<tal:block metal:define-macro="master"
define="errors options/state/getErrors | nothing;
Iterator python:modules['Products.Archetypes'].IndexIterator;
schematas here/Schemata;
fieldsets python:[key for key in schematas.keys() if (key != 'metadata') and (schematas[key].editableFields(here, visible_only=True))];
default_fieldset python:(not schematas or schematas.has_key(‘default’)) and ‘default’ or fieldsets[0];
fieldset request/fieldset|options/fieldset|default_fieldset;
fields python:schematas[fieldset].editableFields(here);
dummy python:here.at_isEditable(fields);
portal_type python:here.getPortalTypeName().lower().replace(‘ ‘, ‘_’);
type_name here/getPortalTypeName|here/archetype_name;
base_macros here/edit_macros/macros;
edit_template python:’%s_edit’ % portal_type;
edit_macros python:path(‘here/%s/macros | nothing’ % edit_template);
header_macro edit_macros/header | header_macro | base_macros/header;
typedescription_macro edit_macros/typedescription | typedescription_macro | base_macros/typedescription;
body_macro edit_macros/body | body_macro | base_macros/body;
footer_macro edit_macros/footer | footer_macro | base_macros/footer;
lockable python:hasattr(here, ‘wl_isLocked’);
isLocked python:lockable and here.wl_isLocked();
tabindex tabindex|python:Iterator(pos=7000);
css python:here.getUniqueWidgetAttr(fields, ‘helper_css’);
js python:here.getUniqueWidgetAttr(fields, ‘helper_js’);">

<html xmlns="http://www.w3.org/1999/xhtml"
xml:lang="en"
lang="en"
xmlns:tal="http://xml.zope.org/namespaces/tal"
xmlns:metal="http://xml.zope.org/namespaces/metal"
xmlns:i18n="http://xml.zope.org/namespaces/i18n"
metal:use-macro="here/main_template/macros/master"
i18n:domain="plone">

<metal:head fill-slot="top_slot">
<tal:block define="macro edit_macros/topslot | nothing"
condition="macro">
<metal:block use-macro="macro" />
</tal:block>
</metal:head>

<metal:javascript_head fill-slot="javascript_head_slot">
<tal:block define="macro here/archetypes_custom_js/macros/javascript_head | nothing"
condition="macro">
<metal:block use-macro="macro" />
</tal:block>
<tal:js condition="js"
repeat="item js">
<script type="text/javascript"
charset="iso-8859-1"
tal:condition="python:exists(‘portal/%s’ % item)"
tal:attributes="src string:$portal_url/$item">
</script>
</tal:js>
<tal:block define="macro edit_macros/javascript_head | nothing"
condition="macro">
<metal:block use-macro="macro" />
</tal:block>
</metal:javascript_head>

<metal:css fill-slot="css_slot">
<tal:css condition="css"
repeat="item css">
<style type="text/css"
media="all"
tal:condition="python:exists(‘portal/%s’ % item)"
tal:content="structure string:<!– @import url($portal_url/$item); –>">
</style>
</tal:css>
<tal:block define="macro edit_macros/css | nothing"
condition="macro">
<metal:block use-macro="macro" />
</tal:block>
</metal:css>

<body>

<metal:fill fill-slot="main">
<metal:main define-macro="main">
<metal:use_header use-macro="header_macro" />
<metal:use_typedescription use-macro="typedescription_macro" />
<metal:use_body use-macro="body_macro" />
<metal:use_footer use-macro="footer_macro" />
</metal:main>
</metal:fill>

</body>

</html>

</tal:block>

Come si può notare è scritto in TAL, richiama molteplici funzioni python e utilizza anche molte macro.
Ora proveremo a modificare queste funzioni e queste macro per capire meglio come funzionano.
Quando abbiamo aperto la pagina, oltre al codice di questa, è presente il pulsante ‘customize’ che serve a personalizzare la pagina; di default viene creata una pagina identica, ma modificabile, nella cartella custom.
Al momento della creazione della nuova pagina viene chiesto il titolo della stessa (io ho inserito : ‘MyEdit’).
Proviamo ora ad aggiungere un oggetto nell’interfaccia plone, si può notare che l’url termina con base_edit. In pratica le funzioni e le macro personalizzano questa pagina base,che è unica, a seconda dell’oggetto trattato.


portal_css


Sezione di Plone che contiene il registro generale degli stili CSS applicati al sito. Oltre ha svolge un ruolo centralizzato di ottimizzazione del codice in fase di pubblicazione, acconsente anche all’effettuazione di caching delle varie versioni di CSS, in modo da permettere ai proxy e alle cache dei browser degli utenti finali di effettuare sempre una resa grafica aggiornata all’ultima versione.


portal_types


Come da descrizione “Controls the available content types in your portal”, permette di controllare tutti i tipi disponibili nel proprio sito: oltre ad elencare i tipi offre la possiblità di rinominare, copiare, cancellare, ed effettuare operazioni di importazione/esportazione dei tipi.

Giovedì 3 Gennaio 2008 Pubblicato da Maurizio Moscatelli | prove con zope | | Ancora nessun commento.