Blog addon for Plone 5?

https://github.com/plone/plone.formwidget.recaptcha should do it.

Very early days, but I'm making progress on a "blog" distribution - https://github.com/PlaythingBlog/plaything.core

1 Like

Just an observation. From the perspective of a Blog, the closest thing to an ordinary post would be a "News Item" however, if you look at the Tumblr model everything is a post type: Photo, Audio, Link, Text etc..
In the context of a Blog, I think "News Items" should be called "Text Posts" or simply "Text".

Further, there is little value for Pages/Documents since "News Items" offer everything that a page can do with added value of a "Lead Image".

in fact a newsitem is behavior wise the same as a page with a leadimage behavior enabled.

I suppose the value of distinguishing between the two is when you want to aggregate all of one type e.g. News Items or Pages/Documents.

Phase 1 of my Plone for Blogging side project is to make a standalone blogging platform - "Plaything" (https://github.com/PlaythingBlog/plaything.core), in this phase it will be a very opinionated product that is a ready made blog out of the box but may do unwanted things to an existing site.

Phase 2 will focus on making it play well as an add-on to an existing Plone site.

... it will be very opinionated product that does unwanted things to an existing site.

The beginnings of every great add-on! :slight_smile:

Hi, I didn't have success trying norobots. steps taken to install collective.z3cform.norobots:

  1. installed per https://plone.org/products/collective.z3cform.norobots/#overview
    Notes: included adding zcml slug, did not pin version, run buildout, restart. no errors.

  2. the proper control panel configlet appears and "norobots" in "captcha" list for "Discussions Settings". selected it.

  3. configured discussions and added to content type.

  4. discussions work as advertised; however, no captcha on content previously created or newly created content.

what am I missing?

There's a controlpanel which you need to use under site setup I believe.

the control panel only controls the questions that can be asked (see below). Is this product only supposed to work with with z3cforms? Is it supposed to work with Dexterity? Adding this feature isn't an option when creating a Dexterity Content Type.
Thanks

Interesting development in my testing. I went to register for my plone site and the captcha is on the registration form . I didn't do anything unique to make this happen.

Is the problem with Dexterity forms? That's a shot in the dark because in Plone 5 , I don't know what type of forms they use.

Has anyone had a different experience creating a form with Dexterity but able to use this captcha?

You may want to split your question (and its thread) out from this subject line, because I'm not able to follow it anymore :slight_smile:

1 Like

Thank you for huge and useful feedback!

We picked default Plone 5 features with portlets and newsitem as blog article.

1 Like

I've written collective.blog which i'm using on rene.jochums.at its a pure Plone 5 blog addon.

Its main features are the blog tag cloud (code stollen from ftw.blog) and it supports "<!--more-->" to split up the text and its intro.

The view is capable to get blog posts from child directories so you can use it with sc.contentrules.groupbydate but groupbydate isn't plone 5 ready yet.

This is the theme i'm using plonetheme.persona it integrates mockup-highlightjs.

3 Likes

The only think you probably want to add to default Plone is one part of collective.blog.star, https://github.com/collective/collective.blog.portlets which adds some common portlets like monthly
archive and a last posts portlet. If you need a TagCloud-portlet have a look at qi.portlet.tagClouds.
I don't know if there ready for Plone 5 but should be easy to fix if not.

Apologies for waking an old post, but since it's relevant...

collective.blog.portlets is not yet Plone5 ready. I have started a branch to get it there - it could do with a bit more love to get it working smoothly in both Plone 4 and Plone 5.

3 Likes

Just tried 1.8al it make the Plone 4.3.11 not even start. Many thanks.

If you want help figuring that out, please provide your buildout.cfg and the actual error messages.

Plone 4.3.11-r1
quills.app == 1.8a1
Products.Quills == 1.8a1

Traceback (most recent call last):
  File "/opt/plone4/zinstance/parts/instance/bin/interpreter", line 272, in <module>
    exec(compile(__file__f.read(), __file__, "exec"))
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/Startup/run.py", line 76, in <module>
    run()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/Startup/run.py", line 22, in run
    starter.prepare()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/Startup/__init__.py", line 92, in prepare
    self.startZope()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/Startup/__init__.py", line 268, in startZope
    Zope2.startup()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/__init__.py", line 47, in startup
    _startup()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/App/startup.py", line 118, in startup
    load_zcml()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/App/startup.py", line 52, in load_zcml
    load_site()
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/Zope2/App/zcml.py", line 46, in load_site
    _context = xmlconfig.file(site_zcml)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 649, in file
    include(context, name, package)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/local/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 706, in finish
    actions = self.handler(context, **args)
  File "/opt/plone4/buildout-cache/eggs/Zope2-2.13.24-py2.7.egg/OFS/metaconfigure.py", line 46, in loadProducts
    xmlconfig.include(_context, zcml, package=product)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/local/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 706, in finish
    actions = self.handler(context, **args)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/local/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 706, in finish
    actions = self.handler(context, **args)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 548, in include
    processxmlfile(f, context)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 380, in processxmlfile
    parser.parse(src)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 107, in parse
    xmlreader.IncrementalParser.parse(self, source)
  File "/usr/local/lib/python2.7/xml/sax/xmlreader.py", line 123, in parse
    self.feed(buffer)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 210, in feed
    self._parser.Parse(data, isFinal)
  File "/usr/local/lib/python2.7/xml/sax/expatreader.py", line 352, in end_element_ns
    self._cont_handler.endElementNS(pair, None)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/xmlconfig.py", line 359, in endElementNS
    self.context.end()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 558, in end
    self.stack.pop().finish()
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 705, in finish
    args = toargs(context, *self.argdata)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 1397, in toargs
    args[str(name)] = field.fromUnicode(s)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/fields.py", line 227, in fromUnicode
    v = vt.fromUnicode(s)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/fields.py", line 137, in fromUnicode
    value = self.context.resolve(name)
  File "/opt/plone4/buildout-cache/eggs/zope.configuration-3.7.4-py2.7.egg/zope/configuration/config.py", line 179, in resolve
    mod = __import__(mname, *_import_chickens)
  File "/opt/plone4/buildout-cache/eggs/quills.app-1.8a1-py2.7.egg/quills/app/traversal.py", line 4, in <module>
    from zope.app.publisher.browser import getDefaultViewName
zope.configuration.xmlconfig.ZopeXMLConfigurationError: File "/opt/plone4/zinstance/parts/instance/etc/site.zcml", line 16.2-16.23
    ZopeXMLConfigurationError: File "/opt/plone4/buildout-cache/eggs/Products.Quills-1.8a1-py2.7.egg/Products/Quills/configure.zcml", line 8.2-8.34
    ZopeXMLConfigurationError: File "/opt/plone4/buildout-cache/eggs/quills.app-1.8a1-py2.7.egg/quills/app/configure.zcml", line 16.2-16.35
    ZopeXMLConfigurationError: File "/opt/plone4/buildout-cache/eggs/quills.app-1.8a1-py2.7.egg/quills/app/traversal.zcml", line 4.2-8.55
    ImportError: No module named publisher.browser

Maybe a quick Google for the last line of the error message?