[opencms-dev] How to move content properly

Alexander Kandzior alex at opencms.org
Tue May 3 07:50:46 CEST 2005


Daniel,

This approach should work for updating the links in the HTML of xmlpages.
Other links, like links set in properties, won't be updated. 

In case you are doing a folder rename (not unlikley), I recommend you lock
the whole source folder first. Otherwise you will be in "lock hell", meaning
you never know if another user has locked a resource or not. 

Because of the lock and permission issues involved otherwise I also
recommend you allow only Administrators to execute this function.

Best Regards,
Alex.

Alexander Kandzior
Alkacon Software - The OpenCms Experts
http://www.alkacon.com

 

> -----Original Message-----
> From: opencms-dev-bounces at opencms.org 
> [mailto:opencms-dev-bounces at opencms.org] On Behalf Of Wiesner, Daniel
> Sent: Tuesday, May 03, 2005 6:53 AM
> To: The OpenCms mailing list
> Subject: Re: [opencms-dev] How to move content properly
> 
> hello,
> 
> because there seems to be no support for internal link 
> management in OCMS 6.0 I have to try writing a module for 
> moving/renaming resources. I have digged a bit in the sources 
> and found a lot usefull.
> 
> I think the goal is a dialog in the admin/content-tools area 
> containing input for source-folder and target-folder. 
> 
> All resources witch are childs of the source-folder will be 
> stored in a List. Then all relevant resourses in the current 
> site including the just copied (moving is copying and 
> deleting) are scanned for every resource in the stored list 
> and if required corrected.
> 
>  
> 
> I think starting with findLinks(CmsObject cms, CmsResource 
> resource) from CmsResourceTypeXmlPage is not a bad idea.
> 
> I used the code and had success replacing links:
> 
> 
> ..
> 
> 	CmsFile file = cmsobj.readFile(resourceName , 
> CmsResourceFilter.IGNORE_EXPIRATION);
> 	CmsXmlPage xmlPage = CmsXmlPageFactory.unmarshal(cmsobj, file);
> 	List locales = xmlPage.getLocales();
> 
> 	Iterator i = locales.iterator();
> 
> 		
> 	while (i.hasNext()) {
>                 Locale locale = (Locale)i.next();
>                 List elementNames = xmlPage.getNames(locale);
> 
>                 // iterate over all body elements per language
>                 Iterator j = elementNames.iterator();
>                 while (j.hasNext()) {
>                    String elementName = (String)j.next();
>                    CmsLinkTable linkTable = 
> xmlPage.getLinkTable(elementName, locale);
> 
>                    // iterate over all links inside a body element
>                    Iterator k = linkTable.iterator();
> 					
>                    while (k.hasNext()) {
>                    	CmsLink link = (CmsLink)k.next();
> 
>                         // external links are ommitted
>                         if 
> (link.getTarget().equals(movedResourceOldName)) {
>                            link.updateLink(movedResourceNewName);
> 
> 								
> 			
>                        }
>                     }
>                 }
>             }
> 
> 	
> 	byte[] contentByteArray = xmlPage.marshal();
> 	file.setContents(contentByteArray);
> 	
> 	cmsobj.lockResource(resourceName);
> 	cmsobj.writeFile(file);
> 	cmsobj.unlockResource(resourceName);
> 
> 
> 	...
> 
> 
> I hope someone will help me to fix this problem.
> 
> Daniel
> 
> 
> 
> Stephan Hartmann schrieb:
> 
> 
> >> no
> >>
> >> Daniel Wiesner schrieb:
> >>
> >  
> >
> >>>> So in OCMS 5.0 internal links are corrected automatic?
> >>>>
> >>>> Stephan Hartmann schrieb:
> >>>>
> >>    
> >>
> >>>>>> Internal links could be tracked in an additional table 
> as it was 
> >>>>>> in OpenCms 5. Maybe this concept has been dropped due 
> to overhead 
> >>>>>> of maintenance and access rights (when an editor moves 
> a resource 
> >>>>>> you have to check if he has the rights to edit the 
> pages that link to it).
> >>>>>>
> >>>>>> Daniel Wiesner schrieb:
> >>>>>>
> >>>      
> >>>
> >>>>>>>> I think the first option is the better one. The kind of 
> >>>>>>>> internal links in this style: "/en/projects/overview.html" 
> >>>>>>>> istead of "page?id=4532534..." includes additional 
> information 
> >>>>>>>> for users and searchbots.
> >>>>>>>> Maybe there is a way to rewrite internal links after 
> moving a 
> >>>>>>>> page in a new module under admin/content-tools?
> >>>>>>>>
> >>>>>>>> Daniel
> >>>>>>>>
> >>>>>>>> Peter Birchmeier schrieb:
> >>>>>>>>
> >>>>        
> >>>>
> >>>>>>>>>> Hi
> >>>>>>>>>>
> >>>>>>>>>> to be honest, I also wonder about the content addressing 
> >>>>>>>>>> mechanism used by OpenCms. In my opinion, it is one of the 
> >>>>>>>>>> main tasks of a CMS to take over the automated 
> linking between content objects.
> >>>>>>>>>> I think there exist two ways to go:
> >>>>>>>>>>
> >>>>>>>>>> 1. Content objects (xml content, jsp/html pages, ..) are 
> >>>>>>>>>> further addressed by its VFS file name. Whenever an object 
> >>>>>>>>>> shall be renamed/moved, all other objects linking to the 
> >>>>>>>>>> previous should be adapted. A good solution would 
> be to store 
> >>>>>>>>>> additional infos for each content object, infos 
> containing a 
> >>>>>>>>>> list of all objects linking to the specific one. 
> Thus instead 
> >>>>>>>>>> of starting a complete search over a wide range of 
> objects to 
> >>>>>>>>>> find all linking objects, only the objects in the 
> list have to updated.
> >>>>>>>>>>
> >>>>>>>>>> 2. More complicated but more effective: content 
> objects are 
> >>>>>>>>>> only addressed by its id.
> >>>>>>>>>> Disadvantage: Building and maintaining JSP files 
> manually is 
> >>>>>>>>>> nasty since links (includes, ..) contain ids instead of 
> >>>>>>>>>> comprehensible file names of objects.
> >>>>>>>>>> Advantage: objects can be renamed, moved, whatever 
> you like 
> >>>>>>>>>> to do with it. If there is enough support in 
> automating the 
> >>>>>>>>>> process of linking (e.g. inserting a link: OpenCms asks to 
> >>>>>>>>>> chose a file (=
> >>>>>>>>>> object) and inserts its id), it is the way to go.
> >>>>>>>>>>
> >>>>>>>>>> kind regards, Peter
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> _______________________________________________
> >>>>>>>>>> This mail is send to you from the opencms-dev 
> mailing list To 
> >>>>>>>>>> change your list options, or to unsubscribe from the list, 
> >>>>>>>>>> please visit 
> >>>>>>>>>> http://mail.opencms.org/mailman/listinfo/opencms-dev
> >>>>>          
> >>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>>>>>
> >>>>        
> >>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>>
> >>>>>> _______________________________________________
> >>>>>> This mail is send to you from the opencms-dev mailing list To 
> >>>>>> change your list options, or to unsubscribe from the 
> list, please 
> >>>>>> visit http://mail.opencms.org/mailman/listinfo/opencms-dev
> >>>      
> >>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>>
> >>>> _______________________________________________
> >>>> This mail is send to you from the opencms-dev mailing list To 
> >>>> change your list options, or to unsubscribe from the 
> list, please 
> >>>> visit http://mail.opencms.org/mailman/listinfo/opencms-dev
> >>    
> >>
> >>
> >>
> >>
> >>
> >>
> >> _______________________________________________
> >> This mail is send to you from the opencms-dev mailing list 
> To change 
> >> your list options, or to unsubscribe from the list, please visit 
> >> http://mail.opencms.org/mailman/listinfo/opencms-dev
> >  
> >
> 
> 
> 
> 
> 
> _______________________________________________
> This mail is send to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, 
> please visit
> http://mail.opencms.org/mailman/listinfo/opencms-dev
> 
> 
> _______________________________________________
> This mail is send to you from the opencms-dev mailing list
> To change your list options, or to unsubscribe from the list, 
> please visit
> http://mail.opencms.org/mailman/listinfo/opencms-dev
> 
> 




More information about the opencms-dev mailing list