Skip to main content

No acquistion during publish traverse

Project description

Introduction

The problem with “acquisition” and publishTraverse is that the current method returns too many different URLs for the same content. For instance here is some potential url for the “kb” page of the plone.org website

and here is a generic “Plone” site with two content items “a” and “b” (folderish or not)

All the urls above returns 200 with the same content, while I would like the “canonical url” to return 200 and the other to return 404.

The behaviour described above constitute a problem because:

  • multiple url for the same content is a problem for SEO and is confusing to people. For SEO, in the latest versions Plone introduced the canonical META, but IMHO it’s just a workaround. People are confused. For example: sometimes some of my editors ask me: “I can’t remove the http://example.com/Plone/a/b/a/page. Can you do it for me?”

  • the page doesn’t seem really the same on all urls: if you open https://plone.org/documentation/kb and https://plone.org/documentation/manual/kb the second has a portlet that the first is missing

  • removing page from external cache (varnish or squid), for example after a content modification, will be a pain. This is because for the same content there could be multiple urls without any control or rules (collective.purgebyid solves this)

  • when using subsite (or multiple plone site on the same zope app) the problem is even more annoying: suppose that “a” is a subsite (marked with INavigationRoot) for http://a.example.org and “b” for http://b.example.org. Opening the url http://a.example.org/b will probably show the homepage of site “a” inside the “b” site. collective.siteisolation and probably collective.lineage do something to isolate subsite, but IMHO again are only workarounds.

Usage

This is a monkey patch for publishTraverse method of Zope2’s ZPublisher.BaseRequest.DefaultPublishTraverse and a monkey patch for Products.Archetypes.BaseObject.BaseObject.__bobo_traverse__

By default invalid traverse is only logged as warning.

For enable raising exceptions, you need to manually modify config.py changing DRYRUN to False.

Or using plone.recipe.zope2instance >= 4.2.14, e.g.:

[instance]
recipe = plone.recipe.zope2instance
eggs =
    experimental.noacquisition
...
initialization =
   from experimental.noacquisition import config
   config.DRYRUN = False

Warning

USE AT YOUR OWN RISK

Don’t use it, if you don’t know exactly what are you doing… at least use leaving DRYRUN = True.

Tests

This add-on is tested using Travis CI. The current status of the add-on is :

https://secure.travis-ci.org/collective/experimental.noacquisition.png

Other solutions

There is a more elegant solution in a branch of Products.CMFPlone, that makes use of IPubAfterTraversal event instead of a monkey patch. But seems that currently it doesn’t works for all cases, at least when there is a custom traversal at the end of the request (take a look at the tests inside this package). https://github.com/plone/Products.CMFPlone/tree/publication-through-explicit-acquisition

There is also other packages with same approach as CMFPlone’s branch: collective.explicitacquisition and collective.redirectacquired

Changelog

1.0.0b10 (2023-02-09)

  • Zope < 6 (no changes) [daniele-andreotti]

1.0.0b9 (2020-07-02)

  • Zope < 5 (no changes) [mamico]

1.0.0b7 (2019-12-10)

  • Zope < 4.2 (no changes) [mamico]

1.0.0b6 (2019-11-07)

  • Python3 Plone 5.2 [mamico]

1.0.0b5 (2019-06-05)

  • Zope2 2.13.28 (no changes) [mamico]

1.0.0b4 (2018-05-14)

  • Zope2 2.13.27 (no changes) [mamico]

1.0.0b3 (2017-05-09)

  • Zope2 2.13.26 (no changes) [mamico]

1.0.0b2 (2016-06-10)

  • Zope2 2.13.24 [mamico]

1.0.0b1 (2015-10-23)

  • Zope2 2.13.23 (Plone 4.3.7/5.0) [mamico]

1.0.0a5 (2014-10-31)

  • Nothing changed yet.

1.0.0a4 (2014-10-31)

  • Initial release

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

experimental.noacquisition-1.0.0b10.tar.gz (12.6 kB view details)

Uploaded Source

File details

Details for the file experimental.noacquisition-1.0.0b10.tar.gz.

File metadata

File hashes

Hashes for experimental.noacquisition-1.0.0b10.tar.gz
Algorithm Hash digest
SHA256 41898ff6a4cf0c4ce37f003b62902f8b22a46620b78f38e1b22256a17f2d4eef
MD5 e4d8980ee22acc8f6ef7524c2abef63a
BLAKE2b-256 06c7eb8bd38ce976fb2d853e89ceaf6c2f7f301296bb1487415d2f81f6be8610

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page