The company I'm working with has a site in Plone (with a Zope database) and is considering migrating it to Drupal. However, I've heard that since Zope is an object-oriented database the migration, which in this case would involve thousands of files and multiple gigs, could be prohibitively time-consuming and difficult. Does anyone have thoughts on this? Anyone know of a successful migration of a significantly large site from Plone to Drupal? Any scripts out there? Anyway, thanks for any insight you can provide.

Comments

aitala’s picture

From what I know of Plone, it may be as tricky as you described. I've not seen a direct migration script... Not sure if you can dump Plone/Zope into HTML or CSV, then import into Drupal.

E

__________

Eric Aitala - f1m@f1m.com
The Formula 1 Modeling Website
www.f1m.com

__________
Eric Aitala - ema13@psu.edu
Penn State

224b8605113373e086cb27708ff301ba18ce394db1996e7e22928e4555e0d20b1b6cecc7f67c9bd9e536cb915779c485

fumbling’s picture

Thanks, yeah, I was getting the sense this was the ask, but thought I should ask around.

info@idlsolutions.com’s picture

I don't like to remember my time with Plone, but if memory serves there is a webdav "product" that you may be able to use to dump the content out of ZODB and onto the filesystem.

fumbling’s picture

Thanks. If you happen to know the name of that webdav "product" or where you may have found it, please let me know. Would be interesting to have a look at that. Otherwise I hear it's very difficult to pull from an object-oriented database like Zope to MySQL.

Drupalot.com - ask & answer Drupal questions

jkc103’s picture

On the Plone site I wrote a python script that queried the ZODB that printed the properties of all the objects I was migrating.

On my Drupal site I wrote a php script that did a file_get_contents() of the python script on the Plone site, and node_save()'d my new site one object at a time.

I was able to migrate titles, bodies, teasers, authors, created/last modified dates, authors, taxonomies, url paths, aliases, and possibly more, I forget. Links broke, such as images and documents, but running link checker on the new Drupal site eased the pain of patching it up.

I know several expert Plone developers and even they don't know how to export a Plone site.

Hope this helps.

Jim

wimbou’s picture

Hi Jim,

"Real" Plone experts (developers and even non developers) do know how to export a Plone site, they also know how to use Plone and relational database, ... etc.
Probably you hired somebody thinking he/she is an expert...

Regards

Wim

jkc103’s picture

I have the zodb file of an old site that I would love to get the content out of. I did an O/S upgrade about a year ago and was never able to get it up and running again. I know people working on an API and documentation but it's nowhere near usable yet. Know of any links?

Thanks,

Jim

priya5791’s picture

Hi,

I am pretty new to Plone & I have a plone site mainly used for discussion forum purpose. Want to migrate this into Drupal. When I googled, saw your post saying that you did the migration successfully. Can you please give me the guidelines on how to start. Finding bit difficult to understand as I am not a programmer. Could you please share your script or documents that you followed. Your help is greatly appreciated.

Thank you.

Priya

petednz’s picture

jim - i know the script won't be a panacea but could save some experimentation time - care to share? looks like we have a plone to drupal to work on in next couple of months

peter davis : fuzion : connect.campaign.communicate : www.fuzion.co.nz

jkc103’s picture

Pete,

Below is the python script I wrote to export my Plone site. We were using a custom object of type KBArticle that was nothing more than a PloneArticle with a different name.

wf_wlist_map = context.portal_workflow.getWorklists()
catalog=context.portal_catalog

for wlist_map_sequence in wf_wlist_map.values():
    for wlist_map in wlist_map_sequence:

        catalog_vars=wlist_map['catalog_vars']
        types=['KBArticle','PloneArticle']

        for key,value in catalog_vars.items():
            print 'key ', key
            print 'value ', value
            for result in catalog.searchResults(portal_types=types):
                o = result.getObject()
                if o.portal_type == 'KBArticle':
                    absurl = o.absolute_url()
                    print '::-:CONTENT_DIVIDER:-::'
                    print 'path::-:NAME_VALUE_DIVIDER:-::',result.getPath(),'::-:FIELD_DIVIDER:-::'
                    #print 'filename::-:NAME_VALUE_DIVIDER:-::',result.getId,'::-:FIELD_DIVIDER:-::'
                    print 'subject::-:NAME_VALUE_DIVIDER:-::',result.Title,'::-:FIELD_DIVIDER:-::'
                    print 'desc::-:NAME_VALUE_DIVIDER:-::',result.Description,'::-:FIELD_DIVIDER:-::'
                    #print 'modifiedBy::-:NAME_VALUE_DIVIDER:-::',result.Creator,'::-:FIELD_DIVIDER:-::'
                    print 'created::-:NAME_VALUE_DIVIDER:-::',result.created,'::-:FIELD_DIVIDER:-::'
                    print 'modifiedDate::-:NAME_VALUE_DIVIDER:-::',result.ModificationDate,'::-:FIELD_DIVIDER:-::'
                    print 'keywords::-:NAME_VALUE_DIVIDER:-::',result.Subject,'::-:FIELD_DIVIDER:-::'
                    print 'state::-:NAME_VALUE_DIVIDER:-::',result.review_state,'::-:FIELD_DIVIDER:-::'
                    #print result.meta_type,'::-:FIELD_DIVIDER:-::'
                    print 'body::-:NAME_VALUE_DIVIDER:-::',o.text,'::-:FIELD_DIVIDER:-::'

        return printed
return printed

I then created a .php script inside my Drupal site that called the code above, parsed the tags, and saved the nodes.

require_once './includes/bootstrap.inc';
error_reporting(E_ALL);
drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);

$plonekb_dump = file_get_contents("http://yourplonesite.com/exportContent");

# parse articles, field names and values, build nodes and node_save() ....

I then installed the workflow_post_install module to set the workflow states and reindexed the site.

Hope this helps, let me know if you need anything else.

Jim

petednz’s picture

Not sure how I missed this reply - or maybe it never came - but awesome - thank you so much - i am getting some ploners to give the python part of this a workout and shall report back.

peter davis : fuzion : connect.campaign.communicate : www.fuzion.co.nz

erutan’s picture

http://plone.org/products/contentmirror

http://plone.org/products/proteon.sqlexporter

I'll give these a try - we have a decent amount of custom content types in plone and it'd be more pleasant (for me) to pull data from a SQL database if easily possible.

priya5791’s picture

Hi,

I am pretty new to Plone & I have a plone site mainly used for discussion forum purpose. Want to migrate this into Drupal. When I googled, saw your post saying that you did the migration successfully. Can you please give me the guidelines on how to start. Finding bit difficult to understand... Could you please share your script or documents that you followed. Your help is greatly appreciated.

Thank you.

Priya