Why?
Cforms are hard to do. In fact, I haven't been able to get them going in any useful way. Until such time as ProposalPublets has been done, this is a nice easy weay to get form-to-email up.
- You don't need to do much customisation from the default publication to make this work.
- This lets Lenya do CMS which it is good at, and lets something else handle the email sending part.
- This is much easier for a novice lenya user to acheive.
- users can still edit the text in the page above the form using BXE or whatever.
How?
We will call the new form "contact".
In your publication's paramater-doctype.xmap, do this.
<map:components>
<map:generators default="file"/>
<map:transformers default="xslt"/>
<map:readers default="resource"/>
<map:serializers default="html"/>
<map:matchers default="wildcard"/>
<map:actions>
<map:action logger="sitemap.action.sourcetype" name="sourcetype" src="org.apache.cocoon.acting.sourcetype.SourceTypeAction">
<sourcetype name="xhtml">
<document-element namespace="http://www.w3.org/1999/xhtml"/>
</sourcetype>
<sourcetype name="links">
<document-element namespace="http://apache.org/lenya/pubs/default/1.0"/>
</sourcetype>
+ <sourcetype name="contact">
+ <document-element namespace="http://www.my_organisation.com/lenya/contactform"/>
+ </sourcetype>
</map:action>
</map:actions>
</map:components>In your publication's xslt folder, add a new file contact2xhtml.xsl with the following contents:
<?xml version="1.0"?> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform" > <xsl:import href="xhtml2xhtml.xsl"/> </xsl:stylesheet>
In your publication's xslt folder, add a new file page2xhtml-content.xsl. Copy and paste one of your other templates and edit it. Note that in the example below, I use a file called common.xsl and centrally manage lots of my interface in there, in one place. This saves headaches.
<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE xsl:stylesheet [
<!ENTITY nbsp ' '>
]>
<xsl:stylesheet version="1.0"
xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
xmlns="http://www.w3.org/1999/xhtml"
xmlns:xhtml="http://www.w3.org/1999/xhtml"
xmlns:page="http://apache.org/cocoon/lenya/cms-page/1.0"
xmlns:lenya="http://apache.org/cocoon/lenya/page-envelope/1.0"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:dcterms="http://purl.org/dc/terms/"
xmlns:i18n="http://apache.org/cocoon/i18n/2.1"
exclude-result-prefixes="page xhtml"
>
<xsl:param name="root"/>
<xsl:param name="document-id"/>
<xsl:param name="raw"/>
<xsl:param name="document-type"/>
<xsl:param name="document-label"/>
<xsl:param name="url"/>
<xsl:param name="language"/>
<xsl:include href="common.xsl"/>
<xsl:template match="cmsbody">
<html>
<head>
<title><xsl:value-of select="$document-label"/></title>
<link href="{$root}/css/styles.css" rel="stylesheet" media="screen, print" type="text/css"/>
</head>
<body>
<xsl:call-template name="header"/>
<div id="content_2">
<xsl:apply-templates select="xhtml:div[@id = 'menu']"/>
<div id="Content" class="bulleted">
<xsl:attribute name="bxe_xpath">//xhtml:div[@id='Content']</xsl:attribute>
<xsl:apply-templates select="//xhtml:div[@id = 'Content']"/>
</div>
<form action="/cgi-bin/formmail.cgi">
<input type="hidden" name="your form handlers parameters, etc" value="whatever"/>
<table border="0">
<tr>
<td colspan="4"><strong>Your details</strong></td>
</tr>
<tr>
<td>Name: <span class="required small">(Required)</span></td>
<td colspan="3"><input type="text" name="Name" size="55"/></td>
</tr>
... rest of file .....OK now the template's set up. Now we need to set up the pages in Lanya and trick them into using the new template.
- Create a new 'contact us' page and set up the content how you want it.
- Create a 'thank you' page and make it hidden in the navigation.
- Configure your external form handler how you normally would for a static HTML site. Set it up to redirect users back to your 'thank you' page.
Go to the your_pub/content/authoring/contact/index_en.html (or wherever it is in your page tree/language) and edit the source. This part is a bit of a hack. An example is below. The main thing is to change the default namespace to the new namespace you created in the first code block above (http://www.my_organisation.com/lenya/contactform) and then make sure that all the html elements have an xhtml: prefix.
- Reboot Lenya and you're away
<?xml version="1.0" encoding="UTF-8"?><html xmlns="http://www.my_organisation.com/lenya/contactform" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:dcterms="http://purl.org/dc/terms/" xmlns:lenya="http://apache.org/cocoon/lenya/page-envelope/1.0" xmlns:xhtml="http://www.w3.org/1999/xhtml" dc:dummy="FIXME:keepNamespace" dcterms:dummy="FIXME:keepNamespace" lenya:dummy="FIXME:keepNamespace" xhtml:dummy="FIXME:keepNamespace">
<lenya:meta>
</lenya:meta>
<xhtml:head>
<xhtml:title>Contact form</xhtml:title>
</xhtml:head>
<xhtml:body>
<xhtml:p>get in touch with us using the form below.</xhtml:p>
</xhtml:body>
</html>