[opencms-dev] How to move content properly

Daniel Wiesner daniel.wiesner at av-studio.de
Mon May 2 21:12:41 CEST 2005


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






More information about the opencms-dev mailing list