I've got this working now, I'll add my current code to the thread tomorrow, once I've done some more testing.
stevecam wrote: > > > stevecam wrote: >> >> Small point of clarification to my first post, I am talking about >> Javascript Flow (i.e. Flowscript), see *** below. >> >> >> Andreas Hartmann wrote: >>> >>> Jörn Nettingsmeier schrieb: >>>> stevecam wrote: >>>>> I want to make use of Flowscript and JXTemplates from Lenya. >>>>> >>>>> My requirement is to create pages that incorporate data from a >>>>> database into >>>>> tables and allow users to select rows in the tables, their selection >>>>> in turn >>>>> affecting what they see on the next page. Flowscript seems to be a >>>>> simple >>>>> means to acheive this. >>>>> >>>>> Also, I want to make use of the JDBi javascript database interface >>>>> library >>>>> in the Cocoon "Easy SQL database access" demo in the forms block. >>>>> >>>>> My task now is to find the best way to make use of these means in >>>>> Lenya. >>>>> There is some information available on how to use CForms from Lenya >>>>> but no >>>>> good example of Javaflow and JXTemplates. >>> >>> *** I should have said Javascript flow (Flowscript) and JXTemplates >>> here! >>> >>>>> Specifically I want to generate the page body (that would normally >>>>> come from >>>>> an index_en.xml file (or other language version of it)) via a >>>>> JXTemplate and >>>>> to have a Flowscript use (call) a modified Lenya pipeline to aggregate >>>>> the >>>>> body with my sites standard header, footer, breadcrumb. >>>>> I presume that for the Lenya menu highlighting and breadcrumb >>>>> functionality >>>>> to work then the page must be one in the Lenya sitetree. >>> >>> That's true, but in your case the page would only be a placeholder for >>> the content which is generated dynamically by the usecase or resource >>> type module sitemap (whatever approach you choose). >>> >>>>> I'll have a go at this now and add to this thread with my results, but >>>>> if >>>>> anyone has already implemented such a thing I'd be happy for some >>>>> help. >>>> >>>> if you need flow, you should implement it as a usecase. >>>> in lenya 2.0, there is a document type called "usecasedocument", which >>>> allows you to disguise a usecase (which normally has a view that's >>>> orthogonal to documents) as a plain document, which you can include in >>>> your navigation menu and handle it as if it were just another xhtml >>>> doc. >>>> perhaps andreas can chime in with more details here? >>> >>> http://lenya.apache.org/docs/modules/usecasedocument/index.html >>> >>>> alternatively, you could create a custom doctype that will just contain >>>> a database query and a link to a special xslt that renders it to the >>>> desired xhtml output. i've done that for accessing an xml database, and >>>> it worked ok. i'd be glad to help out, but i only know lenya 2.0... >>> >>> I'd also use a resource type rather than a usecase because >>> >>> - it is a read-only operation >>> - custom flow is required >>> >>> I guess I'd start with a resource type module (there's a tutorial in the >>> documentation) and add the stuff from the "Easy SQL database access" >>> tutorial in the module sitemap. >>> >>> -- Andreas >>> >>> >>> -- >>> Andreas Hartmann, CTO >>> BeCompany GmbH >>> http://www.becompany.ch >>> Tel.: +41 (0) 43 818 57 01 >>> >>> >>> --------------------------------------------------------------------- >>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>> For additional commands, e-mail: [EMAIL PROTECTED] >>> >>> >>> >> >> > > I've implemented a partial solution to my requirement but it does not seem > to be fully functional, so I'm now looking at the creation of a new > resource type (document_type) 'jxtemplate'. > > I've followed the instructions in the tutorial but have one problem that I > cannot solve. When creating a new page from the menu (using the "New > JXTemplate" option I've added), the new page has the default type of > 'xhtml' rather that 'jxtemplate'. This kind of problem is mentioned in the > tutorial (see 'Resource type matcher') and I've checked what I have done > but cannot see an error. > > It seems to be partly working as my new default jxtemplate.xml sample file > is used but the wrong stylesheet selection is made. > > By using a resource-type I think things are simplified a little as > follows: > > (1)Create entry points for the Flowscript/Continuations to take over page > generation from the pipeline. > (2)Get the dynamic data from the database into javascript objects and then > pass control back to the pipeline. > (3)For my 'jxtemplate' resource type, generate the content with a > different pipeline than the default xhtml > resource type. > > These steps are described in more detail as below; > > (1)Create entry points for the Flowscript/Continuations. > > I add to the publication-sitemap.xml the following. > > <!-- add components for JXTemplate use --> > <map:components> > > <map:generators default="file"> > <map:generator label="content" logger="sitemap.generator.jx" > name="jx" pool-grow="2" pool-max="16" pool-min="2" > src="org.apache.cocoon.generation.JXTemplateGenerator"/> > </map:generators> > > <map:transformers default="xslt"> > <map:transformer logger="sitemap.transformer.jx" name="jx" > pool-grow="2" pool-max="16" pool-min="2" > src="org.apache.cocoon.transformation.JXTemplateTransformer"/> > <map:transformer logger="forms" name="forms" > src="org.apache.cocoon.forms.transformation.FormsTemplateTransformer"/> > </map:transformers> > > </map:components> > > <!-- reference flowscript --> > <map:flow language="javascript"> > <map:script src="flow/application_flow.js"/> > <map:script src="flow/jdbi.js"/> > </map:flow> > > <!-- enable continuations --> > <map:pipeline> > <!-- Continue a scenario. The continuation id is passed in the URL > (typically used for GET requests) --> > <map:match pattern="**/*.continue"> > <map:call continuation="{1}"> > <map:parameter name="publication_id" > value="{page-envelope:publication-id}"/> > <map:parameter name="area" value="{page-envelope:area}"/> > <map:parameter name="document_type" > value="{page-envelope:document-type}"/> > <map:parameter name="document_url" > value="{page-envelope:document-url}"/> > </map:call> > </map:match> > > <!-- Continue a scenario. The continuation id is passed as a request > parameter (typically used for POST request) --> > <map:call continuation="{request-param:continuation-id}"> > <map:parameter name="publication_id" > value="{page-envelope:publication-id}"/> > <map:parameter name="area" value="{page-envelope:area}"/> > <map:parameter name="document_type" > value="{page-envelope:document-type}"/> > <map:parameter name="document_url" > value="{page-envelope:document-url}"/> > </map:call> > </map:match> --> > </map:pipeline> > > <!-- create an flowscript entry point --> > <map:match pattern="*/**/FIRST.html"> > <map:call function="do_first_page"> > <map:parameter name="publication_id" > value="{page-envelope:publication-id}"/> > <map:parameter name="area" value="{page-envelope:area}"/> > <map:parameter name="document_type" > value="{page-envelope:document-type}"/> > <map:parameter name="document_url" > value="{page-envelope:document-url}"/> > </map:call> > </map:match> > > (2)Get the dynamic data into javascript objects and return control to > pipeline > > In my javascript I have the do_first_page function as follows: > > function do_first_page() { > //get a list of occupations > var list = dao.occupation.getAll(); > > //return control to lenya page creation pipeline > > cocoon.sendPage("lenyabody-view/"+cocoon.parameters["publication_id"]+"/"+ > cocoon.parameters["area"] +"/"+cocoon.parameters["document_type"]+"/"+ > cocoon.parameters["document_url"], { occupations: list }); > } > > (3) Generate my 'jxtemplate' resource type (document type) content. > > The page body content is generated in the aggregate as below: > > <!-- This is the pipeline that builds the page. It aggregates all > the navigational elements (breadcrumb, tabs, menu) with the actual > content of the document. --> > <map:pipeline> > <!-- /lenyabody-{rendertype}/{publication-id}/{area}/{doctype}/{url} > --> > <map:match pattern="lenyabody-*/*/*/*/**"> > <map:aggregate element="cmsbody"> > <map:part src="cocoon://navigation/{2}/{3}/breadcrumb/{5}.xml"/> > <map:part src="cocoon://navigation/{2}/{3}/tabs/{5}.xml"/> > <map:part src="cocoon://navigation/{2}/{3}/menu/{5}.xml"/> > <map:part src="cocoon://navigation/{2}/{3}/search/{5}.xml"/> > <map:part > src="cocoon:/lenya-document-{1}/{3}/{4}/{page-envelope:document-path}"/> > </map:aggregate> > > > The last 'map:part' line calls another 'mounted' pipeline in the > doctypes.xmp file and this is where I need to add my jxtemplate rendering > pipeline. The standard pipeline is as follows: > > <!-- parametrized doctype matcher --> > <!-- pattern="{rendertype}/{area}/{doctype}/{document-path}" --> > <map:match pattern="*/*/*/**.xml"> > <map:generate > src="{content-dir:{page-envelope:publication-id},{2}}/{4}.xml"/> > <map:transform src="xslt/{3}2xhtml.xsl"> > <map:parameter name="rendertype" value="{1}"/> > <map:parameter name="nodeid" > value="{page-envelope:document-node-id}"/> > <map:parameter name="language" > value="{page-envelope:document-language}"/> > </map:transform> > <map:serialize type="xml"/> > </map:match> > > I have not test this part yet but I think the modification needed is: > > <!-- parametrized doctype matcher --> > <!-- pattern="{rendertype}/{area}/{doctype}/{document-path}" --> > <map:match pattern="*/*/*/**.xml"> > <map:select> > <map:when test="{3}='jxtemplate'"> > <map:generate type="jx" > src="{content-dir:{page-envelope:publication-id},{2}}/{4}.xml"/> > </map:when> > <map:otherwise> > <map:generate > src="{content-dir:{page-envelope:publication-id},{2}}/{4}.xml"/> > </map:otherwise> > </map:select> > <map:transform src="xslt/{3}2xhtml.xsl"> > <map:parameter name="rendertype" value="{1}"/> > <map:parameter name="nodeid" > value="{page-envelope:document-node-id}"/> > <map:parameter name="language" > value="{page-envelope:document-language}"/> > </map:transform> > <map:serialize type="xml"/> > </map:match> > > So finally if I can get my resource-type (doctype) set up correctly I > should be able to test all this out. > I'm presuming I can move between pages using flowscript and Lenya will > handle all the menu-highlighting and breadcrumb for me (I hope). > > > > > -- View this message in context: http://www.nabble.com/Using-Flowscript-and-JXTemplates-in-Lenya-tf4894710.html#a14123963 Sent from the Lenya - Users mailing list archive at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
