Combinación ganadora: Plone como CMS, tu framework preferido como frontend
-
Upload
menttes -
Category
Technology
-
view
1.339 -
download
0
description
Transcript of Combinación ganadora: Plone como CMS, tu framework preferido como frontend
![Page 1: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/1.jpg)
Combinación ganadora: Plone y tu framework favorito
![Page 2: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/2.jpg)
Charla basadaen un trabajo
de Carlos de la Guardia
http://us.pycon.org/2009/conference/schedule/event/85/
![Page 3: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/3.jpg)
Ustedes ?
![Page 4: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/4.jpg)
menttes
![Page 5: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/5.jpg)
![Page 6: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/6.jpg)
Por qué ?
![Page 7: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/7.jpg)
Plone es el mejor CMSNO desarrollado en PHP
![Page 8: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/8.jpg)
Plone tiene muchas prestaciones● Fácil de usar e instalar ● Cumple con estandares, incluyendo
accesibilidad● Mejor registro de seguridad entre los CMSs
mas populares● Disponible en mas de 40 lenguajes● Motor de workflow y reglas● Versionado: historial y revertir cambios ● y por supuesto...
![Page 9: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/9.jpg)
Python
![Page 10: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/10.jpg)
pero...
![Page 11: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/11.jpg)
Plone es complejo
![Page 12: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/12.jpg)
Plone puede ser lento
![Page 13: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/13.jpg)
Caching no siempre es la respuesta al tráfico
![Page 14: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/14.jpg)
Plone NO es un framework web de propósito general
● Aunque a veces ovidamos eso...● Nuestros clientes no piden funcionalidades:
“queremos Plone, solo necesitamos sacar tal funcionalidad y agregar otras tantas”
● O simplemente creemos que no tenemos otra opción.
● y al final nos queda...
![Page 15: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/15.jpg)
Frankenplone
![Page 16: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/16.jpg)
Y no deberia ser siempre asi.
Es posible trabajar con tus herramientas favoritas.
![Page 17: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/17.jpg)
Content MirrorKapil Thangavelu
![Page 18: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/18.jpg)
Content Mirror serializa el contenido de Plone en una bdd
relacional
● Todos los tipos de contenidos que vienen out of the box en Plone y los campos archetypes.
● Tipos de contenidos archetypes, agregados en productos de terceros.
● Mantiene jerarquía de contenido.
● Mirroring completamente automatizado, no requiere configuración mas allá de la instalación.
● Soporte para Plone 2.5, 3.0, 3.1, 3.2 y 3.3.
![Page 19: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/19.jpg)
Simple
![Page 20: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/20.jpg)
Ahora podemos:
● Usar Plone solo para administrar contenido● Usar cualquier framework para trabajar con el
contenido.● Quitar Plone del deployment● Dejar de pensar como hacer algo en términos
de plone y comenzar a pensar qué queremos realizar.
● Simplificar, simplificar
![Page 21: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/21.jpg)
..y podemos servir contenido Plone rápido!
![Page 22: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/22.jpg)
Cómo funciona ?
● Se integra dentro del manejador de eventos de Plone y subscribe eventos al ciclo de vida de contenido (object added, edited, deleted).
● Transforma schemas de contenido Plone en tablas relacionales usando SQLAlchemy
● Para todos los objetos se genera un schema, incluyendo archivos y relaciones.
● Se genera una tabla para cada tipo de contenido Plone.
![Page 23: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/23.jpg)
![Page 24: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/24.jpg)
Instalación
● Bajar: http://code.google.com/p/contentmirror/downloads/list
● Instalar● Configurar bdd● Configurar tipos de contenidos propios● Generar tablas● Exportar contenido preexistente
![Page 25: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/25.jpg)
Configurar la bdd con ZCML<configure xmlns="http://namespaces.zope.org/zope" xmlns:db="http://namespaces.objectrealms.net/rdb" xmlns:ore="http://namespaces.objectrealms.net/mirror"> <! setup a database connection > <db:engine url="postgres://localhost/plone" name="mirrordb" echo="True"/>
<! associate the database connection to mirror db structures > <db:bind engine="mirrordb" metadata="ore.contentmirror.schema.metadata" />
</configure>
![Page 26: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/26.jpg)
Configurar los tipos de contenidos propios
Por cada tipo de contenido del sitio:
<ore:mirror content= "Products.ATContentTypes.content.document.ATDocument" />
![Page 27: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/27.jpg)
Generar tablas y subir el contenido
$ dropdb plone$ createdb plone encoding=UTF8
# generate table definitions and create tables$ bin/instance run parts/productdistros/ContentMirror/ddl.py $ postgres > mirror.sql$ psql plone < /home/andy/plone/zinstance/mirror.sql
# optionally, load existing content$ bin/instance run parts/productdistros/ContentMirror/bulk.py Plone
![Page 28: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/28.jpg)
Listo.
![Page 29: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/29.jpg)
Los cambios se envían de forma síncrona a la bdd
plone# select content_id, id, title from content where id = 'frontpage'; content_id | id | title++ 8 | frontpage | Content Mirror sent this(1 row)
![Page 30: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/30.jpg)
Qué tipos de sitios ?
● Pocos gestores de contenidos, muchos usuarios
● Sitios freezados● Sitios con separación clara contenido y
presentación: – Revistas – Períodicos– Gobierno– ONG
![Page 31: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/31.jpg)
Plyne, por menttes
from pylons import configfrom sqlalchemy import Column, MetaData, Table, typesfrom sqlalchemy.orm import mapperfrom sqlalchemy.orm import scoped_session, sessionmaker
meta = MetaData(engine)model_classes = {}
for tn in engine.table_names(): class_name = str(tn).capitalize() new_class = type( class_name , object.__bases__, dict (object.__dict__)) new_table = Table( tn, meta, autoload=True) mapper(new_class, new_table)
model_classes[ class_name ] = new_class
![Page 32: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/32.jpg)
Plango, por Andy McKay
from django.db import modelsfrom django.contrib.contenttypes.models import ContentType
from utils import normalize_name
class Content(models.Model): class Meta: db_table = u'content' content_id = models.IntegerField(primary_key=True, editable=False) id = models.CharField(max_length=256, editable=False) uid = models.CharField(unique=True, max_length=36, editable=False) portal_type = models.CharField(max_length=64, editable=False) status = models.CharField(max_length=64, editable=False, null=False) type = models.CharField(max_length=64, editable=False) container = models.ForeignKey('self', related_name="parent", editable=False)
![Page 33: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/33.jpg)
Repoze.BFG, por Carlos de la Guardia
class WebSite(UserDict): implements(IWebSite,ILocation) __acl__ = [ (Allow, Everyone, 'view') ]
def __init__(self, website_id): UserDict.__init__(self) self.__name__ = None self.__parent__ = None self.website_id = website_id session = Session() website = session.query( PloneContent ).with_polymorphic( PloneWebSite ).filter( PloneContent.id==website_id ).first() self.title = website.title
![Page 34: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/34.jpg)
Y mas...
● Turbogears● Werkzeug● PHP● Java
![Page 35: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/35.jpg)
Content Mirror es fácil de extender● Por ejemplo
– Reportes a partir del contenido– Auditar cambios– Exportar a formatos como JSON– Otros medios de persistencia
● Content mirror Usa la Arquitectura de Componentes de Zope
● Otra cosa que sea bdd relacional
![Page 36: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/36.jpg)
Nosotros estudiamos la AC de Zope para que vos no tengas que hacerlo.
![Page 37: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/37.jpg)
Front end para Google App Engine
● Aprovechar la infraestructura de Google● Usar su autenticación● Dejar que ellos solucionen la escalabilidad
● Casi un juguete, pero muestra que se puede hacer con ContentMirror y Plone
![Page 38: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/38.jpg)
front end para GAE import osimport wsgiref.handlers
from google.appengine.ext import webappfrom google.appengine.ext.webapp import templatefrom google.appengine.ext import dbfrom google.appengine.ext.db import polymodelfrom google.appengine.api import users
class PloneContent(polymodel.PolyModel): id = db.StringProperty() uid = db.StringProperty() portal_type = db.StringProperty() status = db.StringProperty() type = db.StringProperty()
![Page 39: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/39.jpg)
Plone content in GAE
![Page 40: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/40.jpg)
Todos los frontends están disponibles en:
http://contentmirror.googlecode.com/
![Page 41: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/41.jpg)
Caso de éxito
Biblioteca del Congress en Chile
![Page 42: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/42.jpg)
Crear multiple sitios en una instancia
![Page 43: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/43.jpg)
Seleccionar contenido
![Page 44: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/44.jpg)
Definir layout y estilo
![Page 45: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/45.jpg)
Deploy usando repoze.bfg
![Page 46: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/46.jpg)
Y que Plone sea parte del universo Python
![Page 47: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/47.jpg)
http://www.plonesymposium.com.br
![Page 48: Combinación ganadora: Plone como CMS, tu framework preferido como frontend](https://reader034.fdocuments.co/reader034/viewer/2022051610/54965604b479596f4d8b4efc/html5/thumbnails/48.jpg)
Muchas gracias!
Roberto AllendeSobre un trabajo de Carlos de la Guardia
http://twitter.com/robertoallende
http://robertoallende.com