new concept type SimpleBlogItem, stores text in concept, not in resource

This commit is contained in:
Helmut Merz 2013-01-04 15:20:14 +01:00
parent 58fda446ff
commit 380aba02ed
4 changed files with 59 additions and 10 deletions

View file

@ -5,6 +5,19 @@
xmlns:browser="http://namespaces.zope.org/browser"
i18n_domain="zope">
<zope:adapter
factory="loops.compound.blog.post.SimpleBlogPost"
provides="loops.compound.blog.interfaces.ISimpleBlogPost"
trusted="True" />
<zope:class class="loops.compound.blog.post.SimpleBlogPost">
<require permission="zope.View"
interface="loops.compound.blog.interfaces.ISimpleBlogPost" />
<require permission="zope.View"
attributes="context" />
<require permission="zope.ManageContent"
set_schema="loops.compound.blog.interfaces.ISimpleBlogPost" />
</zope:class>
<zope:adapter
factory="loops.compound.blog.post.BlogPost"
provides="loops.compound.blog.interfaces.IBlogPost"

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
"""
Blogs (weblogs) and blog posts.
$Id$
"""
from datetime import datetime
@ -27,9 +25,32 @@ from zope.interface import Interface, Attribute
from zope import interface, component, schema
from loops.compound.interfaces import ICompound
from loops.interfaces import HtmlText
from loops.util import _
class ISimpleBlogPost(ICompound):
""" An item on a blog, sort of a diary item, minimal version.
"""
date = schema.Datetime(
title=_(u'Date/Time'),
description=_(u'The date and time the information '
'was posted.'),
required=True,)
date.default_method = datetime.now
creator = schema.ASCIILine(
title=_(u'Creator'),
description=_(u'The principal id of the user that created '
'the blog post.'),
readonly=True,
required=False,)
text = HtmlText(
title=_(u'Text'),
description=_(u'The text of your blog entry'),
required=False)
class IBlogPost(ICompound):
""" An item on a blog, sort of a diary item.
"""

View file

@ -1,5 +1,5 @@
#
# Copyright (c) 2008 Helmut Merz helmutm@cy55.de
# Copyright (c) 2013 Helmut Merz helmutm@cy55.de
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License as published by
@ -18,8 +18,6 @@
"""
Blogs and blog posts.
$Id$
"""
from zope.cachedescriptors.property import Lazy
@ -32,14 +30,31 @@ from zope.traversing.api import getName
from loops.common import adapted
from loops.compound.base import Compound
from loops.compound.blog.interfaces import IBlogPost
from loops.compound.blog.interfaces import ISimpleBlogPost, IBlogPost
from loops.resource import Resource
from loops.security.common import restrictView
from loops.setup import addAndConfigureObject
from loops.type import TypeInterfaceSourceList
TypeInterfaceSourceList.typeInterfaces += (IBlogPost,)
TypeInterfaceSourceList.typeInterfaces += (ISimpleBlogPost, IBlogPost,)
class SimpleBlogPost(Compound):
implements(IBlogPost)
textContentType = 'text/html'
_adapterAttributes = Compound._adapterAttributes + ('creator',)
_contextAttributes = list(ISimpleBlogPost)
_noexportAttributes = _adapterAttributes
_textIndexAttributes = ('text',)
@property
def creator(self):
cr = IZopeDublinCore(self.context).creators
return cr and cr[0] or None
class BlogPost(Compound):

View file

@ -53,7 +53,7 @@
<a tal:omit-tag="not:url"
tal:content="data/creator"
tal:attributes="href url">Will Smith</a>
<span tal:condition="item/adapted/private">
<span tal:condition="item/adapted/private|nothing">
(<span i18n:translate="">Private</span>)
</span>
</div>
@ -65,7 +65,7 @@
<div class="text"
tal:content="structure item/render">Here comes the text...</div>
<div class="comment"
tal:define="comment data/privateComment"
tal:define="comment data/privateComment|nothing"
tal:condition="comment">
<h4 i18n:translate="" class="headline">Private Comment</h4>
<div tal:content="structure python: