Forum OpenACS Development: Re: Embedding xowiki portlets in different packages

Collapse
Posted by Gustaf Neumann on
Pablo,

i have not looked how hamiltons beautiful mashup works. but anyhow, there is quite a simple way to include xowiki pages in other applications.

The xowiki portlets/includelets works only for nesting xowiki pages, since they reuses the context of the including object, which you don't have in the general case. however, someone has commited a version of view.tcl/adp into xowiki/lib, which mostly works (see below).

Include in your own page the following code

array set node_info [site_node::get -url /xowiki]
set folder_id [::xowiki::Page require_folder \
		   -name xowiki -package_id $node_info(package_id)]
set item_id [::Generic::CrItem lookup -name "en:index" -parent_id $folder_id]
set page_title "Page including a wiki page"
set context ""
where "en:index" is the name of the page to lookup.
Add to your own adp file something like
<master>
  <property name="title">@page_title;noquote@</property>
  <property name="context">@context;noquote@</property>

<include src="/packages/xowiki/lib/view" item_id="@item_id@" folder_id="@folder_id@">

and change finally the the query parameter
in xowiki/lib/view.tcl to
{item_id:optional}
otherwise it will set always the specified item_id.
This is just a first shot. In the mid-term range,
the preferred interface would look most likely more like:
<include src="/packages/xowiki/lib/view"
	 instance="/xowiki"
	 name="en:index">
where one does not need to know folders etc. However, If you want to have edit links of these pages in your own package, you will however have to know the right item_id etc. and point the link to /xowiki/edit?item_id=$item_id, since edit depends as well on package_ids etc. It would be much nicer to make edit etc. methods in an oo sense of the pages, such that one does not have to deal with item and package ids like now.

This is just to warn you, that the interface with the IDs might change in the future. For now, please use the approach with the IDs like sketched above. I will commit an updated version of xowiki/lib/view.tcl when i have some more time to look more closely to it... i am not too happy about maintaining multiple versions of view.tcl, this should be somewhat refactored.

Thanks everybody for the useful feedback and code. We will be implementing this throughout the week and post feedback on whatever we learn during the process.
Collapse
Posted by Pablo Moreno-Ger on
Following the suggestions received here we integrated the wiki into a custom package that we are working on so that blocks of text can be edited using xowiki (using adp includes).

Here is what we are trying to achieve:

1. Add edit buttons to the adp page that has the wiki includes that goes to the edit page. Ideally the edit page would show up in the URL space of the package itself and not within the xowiki url space (We have already achieved this following Gustaf's suggestion except for the URL space).

2. Pass a return URL to the xowiki edit page that we can use to bring us back to the page we were on before the edit.

For #2 Ham suggested we changed edit.tcl to add that param and modify the form when it is created like this:

set form_class [$object_type getFormClass]
$form_class create ::xowiki::f1 -volatile \
-data $page \
-folderspec $folderspec \
-submit_link $return_url

Unfortunately, it is not working. Even if we change the submit_link original definition in xowiki-form-procs.tcl, it always goes back to "view" after we edit.

Something is instructing it to do that and although it is probably obvious, we don't find it. Can any one help?

(commenting out line 160 didn't affect the behaviour, since we are dealing with plain pages)

Collapse
Posted by Hamilton Chua on
I'm not sure if you got this but I also suggested that you add a return_url to the query section on ad_page_contract at the top of edit.tcl

ad_page_contract {
This is the edit page for notes.

@author Gustaf Neumann (mailto:gustaf.neumann@wu-wien.ac.at)
@creation-date Oct 23, 2005
@cvs-id $Id: edit.tcl,v 1.13 2006/05/19 22:21:30 gustafn Exp $

@param item_id If present, item to be edited
@param name Name of the item
@param object_type the source class providing the data source for filling the form
} -query {
item_id:integer,optional
name:optional
last_page_id:integer,optional
folder_id:integer,optional
{object_type:optional ::xowiki::Page}
page_template:integer,optional
{return_url "view" }
}

By line #60, you should be referring to this line of code

### provide a nice link
my set submit_link [::xowiki::Page pretty_link \
-package_id [$data set parent_id] \
[$data set name]]

Also your edit link should ressemble edit?item_id=0000&return_url=/your_return_url

Also, please remember to go to acs-admin/apm and reload the changes on xowiki. Your changes to the proc will not take effect until you restart the instance or reload the changed tcl files.