Hey there, loving the CWS stuff really helped me get a grip umbraco and how it works.
I'm creating a booking form which is based on your contact form, I'm writing a control in .net but part of my form will need a drop down list, which i want the user to be able to manage themselves from Umbraco, can this be done?
HI Stephen, as Guji suggests it is probably best to use our Umbraco form builder addon Contour. Which will allow users of your Umbraco installation to build & create forms (with dropdown options which you are after) all with an easy to use interface.
You could probably code it yourself, however for the low cost of Contour it will be alot cheaper than the time it would take you to build & develop what you want.
thank you both for your input, so will contour allow me to build a drop down list which in turn the client can edit?
Can i also sneak in another question whilst i can! On my home page design's i like to display content (character limited) from other pages and a "find out more..." link taking them to the actual page is there a way to do this in umbraco and i guess is there a way to let the client chose from the pages they have created below the home page to display on the home page?
The attached below shows my home page and the red panels would could shortened text and a link the "about me" and "lessons" page.
Yes you can add give the client access to add new items in the drop down list by using the edit items in Contour. The other great feature of Contour is the Prevalue Sources where you can make a connection with your sql db and so get the list of items from your db inside contour and edit the item list instead of inserting items one by one.
For the second point what you are looking for is totally possible you just need to make use of the umbraco library (TrunCate) inside your XSLT
So just to confirm the 2nd point above Fiji, in XLST i need to reference the page (using page name?) and then the alias within that page (i.e bodyText) if so is there an example of how this is done on any of the sample websites...sorry my XSLT skills are nowhere at the moment.
the tmTextPage is referring to a document type, but can i refer to an actual page rather than a document type as that document type is used by several pages...i'm guessing @isDoc would change...
Hello Stephen, The best way to add specific tmTextPage documents to the homepage is to add a new property that is a true/false (boolean) to your tmTextPage document type. Give it the alias of showOnHomepage for example and then your Xpath in your xslt will look like this:
select="$currentPage/ancestor-or-self::homeNodeAliasHere[@isDoc]" /> <xsl:for-eachselect="$homeNode//tmTextPage[@isDoc and string(umbracoNaviHide) != '1' and showOnHomepage = '1']"> <xsl:value-ofselect="umbraco.library:TruncateString(bodyText, 100, '...')"/> xsl:for-each>
Without seeing your site structure I am not 100% sure I am selecting the correct documents in the location, but this should help you out. The for each here is saying find me tmTextPage document nodes no matter how deep (//) under the homepage node where it is a document and the property umbracoNaviHide is not true/yes and our property showOnHompege is true/yes.
Then for each tmTextPage that matches that critera we output the property value of bodyText and truncate it to 100characters and append ... to it.
Hi Warren yes that does make sense...i have shown an image of my structure below. The key for me is that i have several pages (this might be my first mistake) that use a tmTextPage document type however i want to target the "about us page". Should i really have a specific document type for the about us page or can I, in XSLT reference the page alias rather than document type?
The problem is that if you change the name of the node to somethign else, which the content editor could do, it will obviously break this logic, but you can try something that may be a bit better by targeting the specific nodeID of the about page (found on the properties tab of a node)
Again this is not ideal, as the content editor could delete the node by mistake, but this may not be a problem for you.
thanks Warren, i can see that referencing a page by name is dangerous, i have no control what the client could rename this to, or even delete by mistake and then recreate which would break both node and nodeID methods you describe, which by the way was exactly what i was after! although maybe not now. :-\
Effectively i want to have two feature panels on my home page. I want these feature panels to be automatically populated with content from pages below the home page by the user selecting which pages to feature (which is a change to my original idea which clearly will cause problems). If they selected the about us page to feature on the home page then if should take the about us "Title" and "BodyText" copy and display it in the panel with a link to view that page in full.
Hey Stephen, THe best thing is to do what I suggested and add a new Yes/No (boolean) property to your tmTextPage docType. Then you can say get all nodes of tmTextPage only where the boolean property is set to true.
So the user can control any child pages of the homepage that are tmTextPage with the property being in the carousel or on the homepage. Let me know if you need a hand with the XSLT, for this.
thanks for all your help Warren, i'm going to give the XSLT a go this morning and see how i get on...can you recommend any XSLT or even Umbraco books...I'll be signing up for the TV sub this week but I think a book might be better for XSLT.
Hey warren, I have this working the way i want it..using the code below. I'm trying expand this further by NOT showing the content if I'm on the page which i'm highlighting in the code below? Could i simply add a choice statement?
expanding the contact form
Hey there, loving the CWS stuff really helped me get a grip umbraco and how it works.
I'm creating a booking form which is based on your contact form, I'm writing a control in .net but part of my form will need a drop down list, which i want the user to be able to manage themselves from Umbraco, can this be done?
Many thanks,
S
Hi Stephen
If you are only making a booking form just like you would do with a contact form then you could also used one of the packages from cultiv http://our.umbraco.org/projects/website-utilities/cultiv-razor-contact-form or Contour http://our.umbraco.org/projects/umbraco-pro/contour.
HI Stephen, as Guji suggests it is probably best to use our Umbraco form builder addon Contour.
Which will allow users of your Umbraco installation to build & create forms (with dropdown options which you are after) all with an easy to use interface.
You could probably code it yourself, however for the low cost of Contour it will be alot cheaper than the time it would take you to build & develop what you want.
http://umbraco.com/products/more-add-ons/contour
thank you both for your input, so will contour allow me to build a drop down list which in turn the client can edit?
Can i also sneak in another question whilst i can! On my home page design's i like to display content (character limited) from other pages and a "find out more..." link taking them to the actual page is there a way to do this in umbraco and i guess is there a way to let the client chose from the pages they have created below the home page to display on the home page?
The attached below shows my home page and the red panels would could shortened text and a link the "about me" and "lessons" page.
Hi Stephen,
Yes you can add give the client access to add new items in the drop down list by using the edit items in Contour. The other great feature of Contour is the Prevalue Sources where you can make a connection with your sql db and so get the list of items from your db inside contour and edit the item list instead of inserting items one by one.
For the second point what you are looking for is totally possible you just need to make use of the umbraco library (TrunCate) inside your XSLT
//fuji
thanks all, appreciate the time.
So just to confirm the 2nd point above Fiji, in XLST i need to reference the page (using page name?) and then the alias within that page (i.e bodyText) if so is there an example of how this is done on any of the sample websites...sorry my XSLT skills are nowhere at the moment.
Hey Stephen,
Can you show us your XSLT code or how your content structure looks like?
(yourAlias here is the document Alias type you created in your document Type, 100 is the maximum numbre of characters to display)
//fuji
If i understand this right
<xsl:for-each select="$currentPage/ancestor-or-self::* [@isDoc]/tmTextPage/* [@isDoc]">
the tmTextPage is referring to a document type, but can i refer to an actual page rather than a document type as that document type is used by several pages...i'm guessing @isDoc would change...
Hi again, sorry am really not sure what you are asking here.
From your previous post i kind remember that there was a news section under which you wanted to truncate your content right?
You can do this by using the following in your XSLT
Hello Stephen,
The best way to add specific tmTextPage documents to the homepage is to add a new property that is a true/false (boolean) to your tmTextPage document type.
Give it the alias of showOnHomepage for example and then your Xpath in your xslt will look like this:
Without seeing your site structure I am not 100% sure I am selecting the correct documents in the location, but this should help you out.
The for each here is saying find me tmTextPage document nodes no matter how deep (//) under the homepage node where it is a document and the property umbracoNaviHide is not true/yes and our property showOnHompege is true/yes.
Then for each tmTextPage that matches that critera we output the property value of bodyText and truncate it to 100characters and append ... to it.
Hopefully this answers your question though.
Cheers,
Warren
Hi Warren yes that does make sense...i have shown an image of my structure below. The key for me is that i have several pages (this might be my first mistake) that use a tmTextPage document type however i want to target the "about us page". Should i really have a specific document type for the about us page or can I, in XSLT reference the page alias rather than document type?
Hi Stephen,
Yes you can target the about us node with xPath.
You can do something like so:
The problem is that if you change the name of the node to somethign else, which the content editor could do, it will obviously break this logic, but you can try something that may be a bit better by targeting the specific nodeID of the about page (found on the properties tab of a node)
Again this is not ideal, as the content editor could delete the node by mistake, but this may not be a problem for you.
If you tell me what you are trying to achieve specifically then I may able to offer some advice on an xPath selector that is maybe more bullet proof.
Cheers,
Warren
thanks Warren, i can see that referencing a page by name is dangerous, i have no control what the client could rename this to, or even delete by mistake and then recreate which would break both node and nodeID methods you describe, which by the way was exactly what i was after! although maybe not now. :-\
Effectively i want to have two feature panels on my home page. I want these feature panels to be automatically populated with content from pages below the home page by the user selecting which pages to feature (which is a change to my original idea which clearly will cause problems). If they selected the about us page to feature on the home page then if should take the about us "Title" and "BodyText" copy and display it in the panel with a link to view that page in full.
Does that makes sense?
S
Hey Stephen,
THe best thing is to do what I suggested and add a new Yes/No (boolean) property to your tmTextPage docType. Then you can say get all nodes of tmTextPage only where the boolean property is set to true.
So the user can control any child pages of the homepage that are tmTextPage with the property being in the carousel or on the homepage.
Let me know if you need a hand with the XSLT, for this.
Warren
thanks for all your help Warren, i'm going to give the XSLT a go this morning and see how i get on...can you recommend any XSLT or even Umbraco books...I'll be signing up for the TV sub this week but I think a book might be better for XSLT.
Stephen
Hey warren, I have this working the way i want it..using the code below. I'm trying expand this further by NOT showing the content if I'm on the page which i'm highlighting in the code below? Could i simply add a choice statement?
<?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:msxml="urn:schemas-microsoft-com:xslt"
xmlns:umbraco.library="urn:umbraco.library" xmlns:Exslt.ExsltCommon="urn:Exslt.ExsltCommon" xmlns:Exslt.ExsltDatesAndTimes="urn:Exslt.ExsltDatesAndTimes" xmlns:Exslt.ExsltMath="urn:Exslt.ExsltMath" xmlns:Exslt.ExsltRegularExpressions="urn:Exslt.ExsltRegularExpressions" xmlns:Exslt.ExsltStrings="urn:Exslt.ExsltStrings" xmlns:Exslt.ExsltSets="urn:Exslt.ExsltSets" xmlns:PS.XSLTsearch="urn:PS.XSLTsearch"
exclude-result-prefixes="msxml umbraco.library Exslt.ExsltCommon Exslt.ExsltDatesAndTimes Exslt.ExsltMath Exslt.ExsltRegularExpressions Exslt.ExsltStrings Exslt.ExsltSets PS.XSLTsearch ">
<xsl:output method="xml" omit-xml-declaration="yes"/>
<xsl:param name="currentPage"/>
<xsl:param name="MaxNoChars" select="100" />
<xsl:template match="/">
<xsl:for-each select="$currentPage//ancestor-or-self::* [@level = '1']//* [name() = 'tmTextPage' and showOnHomepage = '1']">
<h2><xsl:value-of select="@nodeName" /></h2>
<p><xsl:value-of select="umbraco.library:TruncateString(umbraco.library:StripHtml(current()/bodyText), $MaxNoChars, '...')" /><a href="{umbraco.library:NiceUrl(@id)}"> Read more </a></p>
</xsl:for-each>
</xsl:template>
</xsl:stylesheet>
Hi Stephen,
One easy way you could do is to add an xsl:if inside the for-each loop.
However you could update the xPath in the xsl:for-each but the if inside the loop is much easier to begin with.
Cheers,
Warren
easy works for me Warren, at least until my XSLT book arrives!
thanks again.
S
is working on a reply...