FoxCat
Questions answered by this recipe
- How can I make it easier to add links to existing categories?
- How can I make it easier to create relationships among pages, for example, to relate people, places and projects?
- How can I keep the edit page view uncluttered by the markup used in this recipe?
- How can I create picklists to select multiple items to be posted back to another page?
Description
The answers provided by this recipe require that you install the Fox recipe. The EditMore recipe is only required for the solution to the third question about hiding the markup from the edit page view.
I - The Basics: A drop down list for existing Categories
To make it easier to add links to existing categories, combine Fox's ability to post to the current page with a pagelist formatted as an input select form like this:
(:pagelist fmt=#selectpage group=Category name=-HomePage:) |
|
Try the input select form, but note that it won't post links on this page because the Fox recipe is not enabled.
This solution involves three basic steps:
1. Add a PageListTemplate to format pagelist results into an input select Forms
[[#selectpage]] (:template each:)(:input select pagelink[] "[[{=$FullName}|{=$Namespaced}]]" "{=$Namespaced}":) (:template last:)(:input submit post "Add Link":) [[#selectpageend]]
2. Add Fox markup and a pagelist to generate a working input select form that can post a link to a selected category page
(:fox selectcategory:) (:foxtemplate "*{$$pagelink[]}":) (:pagelist fmt=#selectpage group=Category name=-HomePage:) (:foxend selectcategory:)
3. Add a heading and Fox directive to place and organize new category links
!!!Categories (:foxprepend selectcategory:)
Try it (if Fox is enabled on this page, otherwise just read on to see what it should do)
- Select a category from the drop down form created in step 2 and the Add Link button.
- After the page refreshes you should see a link to the category page you selected.
- Click on that new category link.
- When the category page is displayed you should see a link back to this page (if the Category group was set up properly with a pagelist in the footer or header, see Categories).
Tweaking the basic solution
The example above uses a bare minimum of markup to make it easier to understand the core components. The following are several tweaks that you may want to consider.
Use GroupFooters
Move the Fox markup (from step 2) into the GroupFooter (or GroupHeader) to make it available on each page in a group. Use ConditionalMarkup to limit, or exclude, certain pages or users.
Use Fox's template options to make the posted links do more.
Enable posted links to be deleted without editing the page by changing the foxtemplate (in step 2 above) to:
(:foxtemplate *{$$pagelink[]}, {[foxdelline]}:)
If you want to limit who can see and use that link, include some conditional markup in the template, as described at Fox and at Cookbook:FoxSimpleTodoList.
Note, if a foxtemplate requires line breaks it can't be defined using the (:foxtemplate:)
directive. The template will have to saved in separate page and identified using the template argument in the initial fox directive (:fox selectcategory template=pagename:)
. See Fox
Add an input box to create a new Category
At the end of fox markup (in step 2 above) add the following markup to create an input form that Fox will use to add a new page to the Category group
(:fox addcategory #top foxgroup=Category:) (:foxtemplate "":) (:input text target value="" size=20:) (:input submit post "New Category":) (:foxend addcategory:)
(:fox addcategory template=0:)
. If you want to specify the content of the new page, modify the foxtemplate directive, or use a separate template file and point to it using the template argument in the initial fox directive, as described above. Select multiple Categories at once
To allow more than one Category to be selected at once change the pagelist template (in step 1 above).
To keep the input form working like a drop down list or menu, add both the "multiple" and "size" arguments, like this:
[[#selectpage]] (:template each:)(:input select pagelink[] [[{=$FullName}|{=$Name}]] "{=$Titlespaced}" multiple size=3:) (:template last:)(:input submit post Ok:) [[#selectpageend]]
Note, when you use an input select with the multiple argument, selecting multiple items will require users to hold down the shift, or control keys while selecting items.
{$$pagelink[]}
in Step 2. Those square brackets specify that the variable uses an array. If it still doesn't work, make sure that you are using a current version of the Fox recipe. (Arrays were added in version 2007-09-24 with a bug fix in version 2007-10-21).II - Beyond Categories: Relating various groups
The same concepts illustrated above for working with the Category group can be used for linking to other groups. Those other groups can be set up like categories, with pagelist markup in footers to cross-reference back to linking pages.
For each additional group, just copy the fox markup (from steps 2 and 3 above) and make the necessary adjustments. For example, if you create a group called "People", you could change "selectcategory" to selectpeople" and the pagelist argument from "group=Category" to "group=People" in step 2, and make similar changes to the heading and fox markup in step 3 to keep the links separated and organized. Note, you would not have to make any changes to the pagelist template (from step 1 above).
III - Displaying full picklists
The same approach used for linking to categories and cross-referencing amoung groups can also be used to provide pages that display full picklists. While such picklists might not make sense for adding categories and cross-referencing from other pages to the currently viewed page, they would make more sense for picking and choosing from a long list displayed on the viewed page and posting back to a different page (for example, back to the current author's profile page) using fox.
To make the input form expand into full listing of all items (losing the drop down effect), just add the "multiple" argument but leave off the "size" argument from the instructions about allowing multiple items to be selected at once. Specifically, change step2 to add the "multiple" argument:
[[#selectpage]] (:template each:)(:input select pagelink[] [[{=$FullName}|{=$Name}]] "{=$Titlespaced}" multiple:) (:template last:)(:input submit post Ok:) [[#selectpageend]]
To make the selection of multiple items easier and more appropriate for a picklist function, change the input type from "select" to "checkbox," like this:
[[#selectpage]] (:template each:)(:input checkbox pagelink[] "[[{=$FullName}|{=$Namespaced}]]":) {=$Namespaced}\\ (:template last:)(:input submit post "Ok":)
[[<<]]
to keep items on separate lines (because we eliminated the starting asterisk "*" from the beginning of the line, which would have generated a list, but the asterisk and checkbox would not have looked good together.IV - Moving markup out of the main editing screen
The EditMore recipe allows a portion of the page text to be moved out of the main editing screen into a separate text box for notes. In the editing screen, clicking the button labeled "show notes" causes a second text box to display. This may not seem like much of an advantage if you are using the basic set up, but if you start using the fox markup to create delete links, the underlying markup that will be generated can get pretty ugly and cluttered. If the wiki is intended to be edited by novice users, moving this markup off the main editing screen can make a big difference.
Release Notes
20071208 Initial draft published
See Also
Contributors
Comments
See discussion at FoxCat-Talk?