Appunti Plone

Tips, Tricks & mini howto

Creare un tema per Plone4 con buildout

con 3 commenti

Premessa

Questa e’ una libera trasposizione dell’articolo di Noe Nieto disponibile sul suo blog a questo indirizzo: http://www.noenieto.com/blog/theming-plone-4

Mi sono permesso comunque di aggiungere qualche dettaglio.

Introduzione

L’audience è chiunque abbia già avuto a che fare con buildout, Plone, temi per Plone e tutte le tecnologie di circostanza come javascript, html, css, ecc.

Impostare l’ambiente iniziale

Chi abbia una Ubuntu puo’ sfruttare aptitude e installare i pacchetti del caso.

$ sudo aptitude install build-essential python-dev python-pip python-pastescript python-setuptools
$ sudo pip install zopeskel

Per altre distro puo’ essere necessario scaricare il file ez_setup.py e dare:

$ sudo python ez_setup.py
$ sudo easy_install ZopeSkel

Così come scaricare ed installare PIL (Python Imaging Library)

Personalmente PIL l’ho sempre installato scaricando il tar.gz, scompattandolo e dando il python setup.py build e poi install quando nella tabellina mostrata a fine compilazione ho gli OK che mi servono.

Creare il buildout

Creiamo il buildout dove lavorare:

$ paster create -t plone3_buildout
Selected and implied templates:
  ZopeSkel#plone3_buildout  A buildout for Plone 3 installation

Enter project name: plone4b3
Variables:
  egg:      plone4b3
  package:  plone4b3
  project:  plone4b3

**************************************************************************
**   *** NOTE: You probably don't want to use this template!

**  Since Plone 3.1, the preferred way to get a buildout-based setup
**  for Plone is to use the standard installer for your operating
**  system (the Windows installer, the Mac installer, or the Unified
**  Installer for Linux/Unix/BSD). These give you a best-practice,
**  widely-used setup with an isolated Python and a well-documented
**  buildout. This template is here for older versions of Plone and
**  for experts who explicitly want a raw, non-installer-based
**  installation.

**  (This message is particularly aimed at people following out-of-
**  date books/documentation that suggest this is the right way to get
**  a Plone-based buildout. This is no longer the case.)
**************************************************************************

Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: easy
Plone Version (Plone version # to install) ['3.3.4']: 4.0b3
Zope2 Install Path (Path to Zope2 installation; leave blank to fetch one!) ['']:
Plone Products Directory (Path to Plone products; leave blank to fetch [Plone 3.0/3.1 only]) ['']:
Initial Zope Username (Username for Zope root admin user) ['admin']:
Initial User Password (Password for Zope root admin user) ['']: secret
HTTP Port (Port that Zope will use for serving HTTP) ['8080']:
Debug Mode (Should debug mode be "on" or "off"?) ['off']:
Verbose Security? (Should verbose security be "on" or "off"?) ['off']:
Creating template plone3_buildout
Creating directory ./plone4b3
  Copying README.txt to ./plone4b3/README.txt
  Copying bootstrap.py to ./plone4b3/bootstrap.py
  Copying buildout.cfg_tmpl to ./plone4b3/buildout.cfg
  Recursing into products
    Creating ./plone4b3/products/
    Copying README.txt to ./plone4b3/products/README.txt
  Recursing into src
    Creating ./plone4b3/src/
    Copying README.txt to ./plone4b3/src/README.txt
  Recursing into var
    Creating ./plone4b3/var/
    Copying README.txt to ./plone4b3/var/README.txt

**************************************************************************
**   Generation finished.

**  You probably want to run python bootstrap.py and then edit
**  buildout.cfg before running bin/buildout -v".

**  See README.txt for details.
**************************************************************************

In ultimo lanciamo il bootstrap e buildout per scaricare il nostro Plone

tzicatl@tzicatl-lynx:~/plone4b3$ python bootstrap.py
Creating directory '/home/tzicatl/plone4b3/bin'.
Creating directory '/home/tzicatl/plone4b3/parts'.
Creating directory '/home/tzicatl/plone4b3/eggs'.
Creating directory '/home/tzicatl/plone4b3/develop-eggs'.
Generated script '/home/tzicatl/plone4b3/bin/buildout'.
tzicatl@tzicatl-lynx:~/plone4b3$ bin/buildout
.....
$

Creare il prodotto Tema ed aggiungerlo al nostro buildout

Creiamo il Tema. Baseremo il nostro progetto tema su questo template di FreeCSSTemplates.org:

$ cd plone4b3/src

$ paster create -t plone3_theme
Selected and implied templates:
  ZopeSkel#basic_namespace  A basic Python project with a namespace package
  ZopeSkel#plone            A project for Plone products
  ZopeSkel#plone3_theme     A theme for Plone 3

Enter project name: plonetheme.hanging        
Variables:
  egg:      plonetheme.hanging
  package:  plonethemehanging
  project:  plonetheme.hanging
Expert Mode? (What question mode would you like? (easy/expert/all)?) ['easy']: easy
Skin Name (Name of the theme (human facing, added to portal_skins)) ['']: FreeCSSTemplates.org Hanging
Empty Styles? (Override default public stylesheets with empty ones?) [False]:
Include Documentation? (Include in-line documentation in generated code?) [True]: False
Version (Version number for project) ['1.0']:
Description (One-line description of the project) ['An installable theme for Plone 3']: An Installable theme for Plone 4   
Creating template basic_namespace
Creating directory ./plonetheme.hanging

....

Ora dobbiamo apportare modifiche al buildout.cfg per poter rendere disponibile il nostro tema come prodotto. Faremo anche qualche modifica extra come segue:

  • rimuovere tutti i commenti
  • Spostare tutte le dichiarazioni eggs e zcml dalla sezione [instance] alla sezione [buildout][buildout] section
  • Aggiungere PIL e plonetheme.hanging alla sezione eggs (chi ha installato PIL manualmente in python non deve aggiungerlo anche qui)
  • aggiungere la direttiva ZCML per l’inclusione di plonetheme.hanging in zope

Qualche settaggio di fino…

Prima di lanciare il buildout correggiamo il tiro di qualche punto di codice:

[Per i settaggi al setup.py ci sono considerazioni personali dell'autore e vi rimando all'articolo originale]

  • Editare src/plonetheme.hanging/plonetheme/hanging/configure.zcml e commentiamo la linea
    • <i18n:registerTranslations directory=”locales” />
    • Questo perche’ in questo momento non vogliamo localizzare il nostro prodotto
  • Non piacendo i nomi lunghi che genera buildout quando crea le directory nella directory skin, gli diamo un taglio:
    • Rinominare quindi le directory, ad esempio: da plonetheme_hanging_custom_images a hangingtheme_images.
    • cambiare la riga corrispondente alla registrazione in in skins.zcml e profiles/default/skins.xml (lavorando da src/plonetheme.hanging/plonetheme/hanging).
    • Nota 1: Puoi facilmente utilizzare la funzionalita’ Cerca e Sostituisci tra file del tuo Editor
    • Note 2: Puoi aggiungere un ulteriore skin layer aggiungendo la relativa directory ed editando opportunamente i file di cui sopra
  • Cambiare il tema base da “Plone Default” a “Sunburst Theme” editando profiles/default/skins.xml.
    • Apri il file e cerca la seguente riga “<skin-path name=”FreeCSSTemplates.org Hanging” based-on=”Plone Default”>”
    • Sostituisci l’attributo based-on da “Plone Default”  a “Sunburst Theme”
    • Questo step è fondamentale per poter cambiare l’attuale stile di plone4 alle nostre esigenze.

Siamo pronti per lanciare il bootstrap.py (se non l’hai ancora fatto)

$ python bootstrap.py

Quindi lanciare il buildout. Questa operazione potrebbe prendere del tempo a seconda della velocita’ del pc e della banda a disposizione

$bin/buildout

magari

$ bin buildout -vv

Potrebbero visualizzarsi svariati warnings, ma nessun errore significativo.

Avviare l’istanza plone

Se il processo buildout si e’ completato con successo, sarai ing rado di far partire la tua istanza plone, meglio ora in modalita’ foreground:

tzicatl@tzicatl-lynx:~/plone4b3$ bin/instance fg
2010-05-19 18:02:43 INFO ZServer HTTP server started at Wed May 19 18:02:43 2010
    Hostname: 0.0.0.0
    Port: 8080
2010-05-19 18:02:53 WARNING ZODB.FileStorage Ignoring index for /home/tzicatl/plone4b3/var/filestorage/Data.fs
2010-05-19 18:02:53 WARNING ZODB.blob (10127) Blob dir /home/tzicatl/plone4b3/var/blobstorage/ has insecure mode setting
2010-05-19 18:03:12 INFO Zope Ready to handle requests

Crea il sito ed installa il tema appena creato. Dovresti vedere qualcosa pari al tema base di Plone4 “SunBurst Theme”

Our plone theme

Concludendo

Abbiamo imparato (almeno si spera) a preparare un ambiente buildout pronto per Zope, a creare un’istanza plone4 “from scratch” (cioe’ senza nulla di pre-compilato per noi), e ancora a creare e mettere a disposizione di plone un “prodotto  tema” che ci accingeremo a completare.

Questo e’ tutto per ora… aspettiamo la seconda parte.

Scritto da sauzher

21 maggio 2010 alle 07:36

Pubblicato in Plone

Variabili d’ambiente nel buildout

con 2 commenti

Me lo scrivo qua in maniera tale da non dover googolare ogni volta.
Hai bisogno di settare variabili d’ambiente prima di far partire una tua istanza, e vuoi che buildout faccia questo per te senza dover fare un export ogni volta?

Aggiungi il (o al) parametro “zope-conf-additional” alla sezione [instance] il codice che segue:

[instance]
...
zope-conf-additional=
    <environment>
        VARIABILE VALORE
    </environment>

ad esempio

zope-conf-additional=
    <environment>
        FOP_HOME /usr/local/fop-0.94
    </environment>

Divertiti.

Scritto da sauzher

22 marzo 2010 alle 14:26

Pubblicato in Plone

Psycopg2, Plone e buildout (su Mac)

lascia un commento »

Scrivo questo breve post per ricordami come ho fatto a installare la versione 2.0.11 di Psycopg2 utile a collegare Plone con banche dati in Postgres, e come monito ai posteri :-D

Tutto nasce da un odioso errore che ho ottenuto al momento di creare un collegamento in ZMI al mio Postgres:

ImportError: psycopg version mismatch (imported 2.0.11 (dt dec ext pq3))

Premetto subito: è un lavoro sporco (con la versione di psycopg2 2.0.11) da fare sulla piattaforma MacOS Leopard con a bordo il python 2.4.

Gli steps riguardano fondamentalmente: l’installazione di Postgres, configurazione e installazione del modulo per python e fixaggio del database adapter da porre nel buildout.

In teoria esistono degli eggs che fanno tutto ciò. Io gli ho provati a volo e non funzionavano affatto (per me) :’( Leggi il seguito di questo post »

Scritto da vito80ba

12 marzo 2010 alle 12:02

Pubblicato in Plone

I templates e Plone 4

con un commento

Questo articolo nasce da una rielaborazione del post di Denys Mishunov.

Plone 4 sarà una piccola rivoluzione per la comunità plonistica poichè porta con se diverse migliorie e rielaborazioni significative del codice portante, e quindi dovremo rivedere un po’ la maniera di scrivere templates acquisita in questi anni di esperienza con la versione 2.5 e 3 del nostro CMS preferito.

C’è subito da specificare che il main_template.pt , ovvero il template dei template, ha subito rivisitazioni e quindi se nelle istanze di plone che vogliamo migrare tale file è stato modificato (spero che l’abbiate fatto perchè era l’ultima spiaggia…) allora dovremo stare molto attenti.

Leggi il seguito di questo post »

Scritto da vito80ba

12 febbraio 2010 alle 17:38

Pubblicato in Plone

Stabilizzare le versioni di ogni pacchetto in un buildout.

con un commento

La sezione [versions]

Il vostro buildout.cfg cominciera’ con una sezione [buidout] in cui ad un certo punto ci saranno le righe:
...
extends = http://dist.plone.org/release/3.3.4/versions.cfg
versions = versions
...

Queste due righe fanno si ‘ che vengano bloccati tutti i pacchetti elencati in versions.cfg alla relativa versione indicata a fianco di ciascun pacchetto.

In altre parole, un “$buildout -n” non aggiornera’ questi pacchetti anche se ne e’ stata rilasciata  una versione piu’ recente.

Presumibilmente avrete aggiunto altri pacchetti al vostro buildout popolando la sezione eggs con una riga del tipo:

eggs =
    ...
    plone.app.ldap
    ...

Per “pinnare” la versione del pacchetto ed evitare che venga aggiornata automaticamente dovete aggiugere al vostro buildout.cfg una sezione [versions] in cui eguagliate (o diseguagliate) un prodotto con il numero di versione desiderato. Ad esempio:

[versions]
plone.app.ldap = 1.1
python-ldap = 2.2.0

N.B.: La sezione va aggiunta dopo quella [buildout] subito prima dell’inizio della sezione successiva.

Come sapere quali pacchetti non son pinnati?

Date le decine di prodotti e pacchetti che include un buildout standard puo’ essere molto facile lasciarne qualcuno unpinned.

Wichert Akkerman ha gentilmente pensato una riga di codice shell che ci viene in aiuto (linux):

$ bin/buildout -Novvvvv |sed -ne 's/^Picked: //p' | sort | uniq

Da qualche versione di plone ad oggi non si riesce piu’ a lancire il comando buildout con l’opzione -o (offline). Quindi tale comando andrebbe rivisto senza la ‘o’ e pare funzionare comunque correttamente.

$ bin/buildout -Nvvvvv |sed -ne 's/^Picked: //p' | sort | uniq

Tale comando restituisce qualcosa del tipo:

elementtree = 1.2.7-20070827-preview
plone.recipe.distros = 1.3
plone.recipe.zope2install = 1.2
plone.recipe.zope2instance = 1.3
python-openid = 2.0.1
setuptools = 0.6c7
zc.recipe.egg = 1.0.0

E’ sufficiente copiare ed incollare questo output nella sezione [versions] creata in precedenza.

fonte: http://maurits.vanrees.org/weblog/archive/2008/01/easily-creating-repeatable-buildouts

Scritto da sauzher

27 gennaio 2010 alle 10:28

Pubblicato in Plone

Aggiungere un criterio ad una collezione per un proprio oggetto

con un commento

Uno dei primi utilizzi che si vuol fare del nuovo prodottino fiammante creato con Archetypes è renderlo, in alcuni dei suoi campi, ricercabile tramite una “collezione” (o “smart folder” o “ex-cercatore”, qui si sprecano gli alias :-) ).

Per esempio: abbiamo creato un nuovo oggetto chiamato “libro” che possiede i seguenti (pochi) campi:

  • Titolo (previsto di default da plone)
  • Descrizione (previsto di default da plone)
  • Recensione (tipo testo)
  • Anno di pubblicazione (tipo integer)
  • Casa editrice (String con accesso da un vocabulary di case editrici)

Vogliamo creare due nuove “collezioni” che indicizzino e mostrino a video i nostri libri, uno ordinato per data di pubblicazione e l’altro solo con la casa editrice nostra preferita (o che forse paga di più ^____^). Andiamo nel menu a tendina selezioniamo “Collezione”, gli diamo un nome e andiamo spediti nei “criteri” … amara sopresa! Non vediamo i nostri due campi. Niente paura, bisogna solo istruire a dovere il catalog.

Leggi il seguito di questo post »

Scritto da vito80ba

26 gennaio 2010 alle 16:09

Pubblicato in Plone

Plone Conference 2010: Bristol… arriviamo!

con 2 commenti

La Plone Foundation ha annuciato la sede della prossima Plone Conference: Bristol!

Incomincio a cercare le offerte per i voli … ;)

http://plone.org/events/conferences/bristol-2010/plone-conference-2010-bristol-uk

Vito

Scritto da vito80ba

23 gennaio 2010 alle 15:00

Pubblicato in Plone

Plone 3 buildout su SnowLeopard (a 32bit)

con 5 commenti

E alla fine luce fu :)

Sono riuscito a creare l’ambiente buildout sul mio MacBook (Intel Core Duo)  a 32bit con il nuovo e fiammante SnowLeopard.
Vi anticipo che l’operazione è abbastanza “sporca”, ma quando il gioco si fa duro…

Per partire avete bisogno di avere a bordo l’ultima XCode disponibile.

Gli steps da seguire sono:

  1. installare MacPorts
  2. installare Python 2.4.6 via MacPorts
  3. installare PIL in Python 2.4.6
  4. patchare asyncore
  5. installare easy_installvirtualenv
  6. creare il buildout

Leggi il seguito di questo post »

Scritto da vito80ba

14 gennaio 2010 alle 15:54

Pubblicato in Plone

LinguaPlone3 rilasciato

con 2 commenti

Jarn ha appena rilasciato LinguaPlone3 l’add-on di Plone che permette di gestire comodamente contenuti in piu’ lingue.

Ricordo che non e’ un prodotto che traduce per voi Documenti e News, bensi’ fornisce gli strumenti per poter gestire efficacemente le n-traduzioni di ciascun contenuto di portale.

Oltre all’aumento generale di prestazioni questa nuova versione, compatibile solo con Plone3.3 e superiori:

  • collega le “referenze” al documento nella lingua attesa qualora questo esista. Caso in cui scrivete in italiano, collegate una pagina con un link o un reference field e poi traducete il documento in inglese. LinguaPlone3 in questo caso cerca il documento destinazione tradotto in inglese preservando la coerenza della lingua (COOL!)
  • attraverso il plone.app.blob se traducete un oggetto che ha un campo “language indipentent” e che contiene un file, quest’ultimo non verra’ duplicato, mantenendo la stessa sorgente binaria come blob su fs (doppio cool!)

Un ringraziamento ai ragazzi di Jarn :)

Tutti a tradurre!!

Scritto da sauzher

23 dicembre 2009 alle 21:04

Pubblicato in Plone

Rendere il contenuto di una Pagina un Portlet

lascia un commento »

Nella nostra realta’ universitaria abbiamo una redazione centrale e tante sotto redazioni che corrispondono piu’ o meno a vari sotto siti plone. Abbiamo dei portlet nella root che devono essere ereditati in tutto il portale, come ad esempio il Navigation, ed altri, da “spegnere” quando si entra in un sottosito. Questi sono portlet “statici” gestiti dalla redazione. Il nostro scopo e’ di avere dei portlet istanziabili in qualsiasi punto del portale, il cui contenuto sia a totale ed esclusiva gestione della redazione. Il nostro approccio al problema e’ stato questo…

Leggi il seguito di questo post »

Scritto da sauzher

23 dicembre 2009 alle 11:38

Pubblicato in Plone

Iscriviti

Get every new post delivered to your Inbox.