Question
Is there a way to create a link in
c:/twiki/templates/view.pattern.tmpl that will open a topic which matches the exact name of the selected topic minus specific text that appears at the end of the name?
Background
We would like every topic in our wiki to have a corresponding, but separate “Comments” topic.
For example:
-
Main.TopicNameAlpha
-
Main.TopicNameAlphaComments
-
Main.TopicNameBeta
-
Main.TopicNameBetaComments
What I Can Do
I’m able to create a single link in
c:/twiki/templates/view.pattern.tmpl that I can use to view
Main.TopicNameAlphaComments from
Main.TopicNameAlpha and to view
Main.TopicNameBetaComments from
Main.TopicNameBeta. Here’s the following line of code I use to accomplish this:
* <a href="%SCRIPTURLPATH%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%Comments">Topic</a>
What I Want to Do
Create a single link in
c:/twiki/templates/view.pattern.tmpl that I can use to view
Main.TopicNameAlpha from
Main.TopicNameAlphaComments and to view
Main.TopicNameBeta from
Main.TopicNameBetaComments. Based on the line of code I use above, the relevant code might look similar to one of these examples (I know they aren't technically accurate, but I’m providing them to demonstrate/help explain):
%NameThatMatchesAllButTheCommentsPortionOfThisCommentsTopic%
- or, put another way (topic name minus the “Comments” portion):
%TOPIC%-*Comments
%TOPIC%excludetopic=“*Comments”
%TOPIC%/%EXCLUDE {“*Comments”}%
Environment
--
JasonVensel - 06 Mar 2006
Answer
If you answer a question - or someone answered one of your questions - please remember to edit the page and set the status to answered. The status selector is below the edit box.
Hm, should be doable by some SSP-wizardry (SSP =
SpreadSheetPlugin).
For example:
See the raw source for how I did this. Hint:
$SEARCH allows
RegularExpressions. If you don't need this you may use
$FIND instead.
--
FranzJosefSilli - 06 Mar 2006
Excellent! Franz, thank you for this solution. This meets what I was looking for.
SOLUTION
For future readers, here's what I did based on
FranzJosefSilli's response:
- Open
c:/twiki/templates/view.pattern.tmpl.
- Locate the following line (it should be located around line 81 or so):
%TMPL:DEF{"toolbar"}%<div class="twikiToolBar"><div>
- Add the CALC lines and replace the href "link" lines with the following:
%TMPL:DEF{"toolbar"}%<div class="twikiToolBar"><div>
%CALC{"$SET(my_topic,%TOPIC%)"}%
%CALC{"$SET(my_exclude,[D][iscussion])"}%
%CALC{"$SET(my_pos,$SEARCH($GET(my_exclude),$GET(my_topic)))"}%
%CALC{"$SET(my_len,$LENGTH($GET(my_exclude)))"}%
%CALC{"$SET(my_result,$REPLACE($GET(my_topic),$GET(my_pos),$GET(my_len),))"}%
* <a href="%SCRIPTURLPATH%/view%SCRIPTSUFFIX%/%WEB%/%CALC{"$GET(my_result)"}%">Topic</a>
* <a href="%SCRIPTURLPATH%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%Discussion">Discussion</a>
* %EDITTOPIC%
* <a href="%SCRIPTURLPATH%/edit%SCRIPTSUFFIX%/%WEB%/%TOPIC%?skin=kupu">WYSIWYG</a>
* <a href="%SCRIPTURLPATH%/attach%SCRIPTSUFFIX%/%WEB%/%TOPIC%">Attach</a>
* <a href="%SCRIPTURLPATH%/view%SCRIPTSUFFIX%/%WEB%/%TOPIC%?skin=print.pattern%REVARG%">Printable</a>
</div><div class="twikiRevInfo"><span class="twikiGrayText"><span class="twikiToolbarElem"><nop>%WEB%.%TOPIC%</span><span class="twikiToolbarElem">%REVINFO%</span><span class="twikiToolbarElem"><a href="#TopicEnd">topic end</a></span></span></div></div>%TMPL:END%
--
JasonVensel - 07 Mar 2006
The solution described above works for the most part. However, I ran into a slight issue.
I'll use the following topics to describe the issue:
-
Policies.SalesTaxes
-
Policies.SalesTaxesDiscussion
and
-
Policies.IRSMileageRate
-
Policies.IRSMileageRateDiscussion
and
-
Policies.ItemSetupInASiteDatabase
-
Policies.ItemSetupInASiteDatabaseDiscussion
Each of the links at the top (
Topic,
Discussion,
Edit,
WYSIWYG,
Attach, and
Printable) is always enabled/active. Normally, I use our wiki site in the following manner:
- From the
Policies.SalesTaxes topic, I click the Discussion link to open the Policies.SalesTaxesDiscussion topic. This works just fine.
- After viewing and/or editing the
Policies.SalesTaxesDiscussion topic, I click the Topic link and am returned to the Policies.SalesTaxes topic. This works just fine.
- In addition, because the
Topic link is never disabled/inactive, when I have the Policies.SalesTaxes topic open and click the Topic link, I expect the Policies.SalesTaxes topic to simply re-load. In fact, this is how it works and there are no issues.
However, there is an issue with step 3 of the above process when the non-discussion topic's wiki name is
GREATER THAN 14 characters. Here's what happens:
- First consider the
Policies.ItemSetupInASiteDatabase topic. Important: Note that the ItemSetupInASiteDatabase portion of the topic name is greater than 14 characters. Counting from left to right, the "t" in "Site" is the 15th character in the name.
- Now, from the
Policies.ItemSetupInASiteDatabase topic, I click the Discussion link to open the Policies.ItemSetupInASiteDatabaseDiscussion topic. This works just fine.
- After viewing and/or editing the
Policies.ItemSetupInASiteDatabaseDiscussion topic, I click the Topic link and am returned to the Policies.ItemSetupInASiteDatabase topic. This works just fine.
- Again, because the
Topic link is never disabled/inactive, when I have the Policies.ItemSetupInASiteDatabase topic open and click the Topic link, I would expect the Policies.ItemSetupInASiteDatabase topic to simply re-load. However, this is NOT how it works. Instead, the NOTE: This Wiki topic does not exist yet message appears, prompting me to do a full text search for teDatabase (that is not a mis-type; it is "teDatabase"). It also warns me that creating a page with this topic name is not recommended because it's not a wiki word.
- Based on my testing, I've discovered that this happens for any topic with a name that is greater than 14 characters.
- I also discovered the following:
- The web name of the topic is not a factor in the 14-character count. E.g.,
Policies (one of our web names) consists of 8 characters whereas Instructions (another one of our web names) consists of 12 characters; the 14 character issue is true for topics in both webs.
- This isn't an issue for topics that have exactly 14 characters.
- For topic names that exceed 14 characters, the name that appears in the full text search box of the "NOTE: This Wiki topic does not exist yet" page is the entire remaining portion of the topic name, beginning with the 15th character.
- The 14-character issue appears to stem from the
$LENGTH setting above. This setting uses my_exclude, which is [D][iscussion], which happens to be 14 characters. I verified this by changing my_exclude to Discussion (which is only 10 characters) and then trying the steps described above with the Policies.IRSMileageRate topic (the topic name is exactly 14 characters).
- With
my_exclude set to [D][iscussion], clicking the Topic link with Policies.IRSMileageRate already selected simply re-loads the page. This is how I want it to function for all non-discussion topics.
- With
my_exclude set to Discussion, clicking the Topic link with Policies.IRSMileageRate already selected opens the "NOTE: This Wiki topic does not exist yet" page with "Rate" in the full text search and a warning that this topic name isn't a wiki word. The "R" in "Rate" is the 11th character in the Policies.IRSMileageRate topic name.
Conclusion
I need to modify:
%CALC{"$SET(my_len,$LENGTH($GET(my_exclude)))"}%
Ideally, I'll be able to set this to some numeric value high enough to include all my topics. I haven't worked with SSP at all, so I'm going to do a little research on it and the
$LENGTH variable, do some trial and error testing by inserting different values, and then post the results here when I'm done.
--
JasonVensel - 08 Mar 2006
TEST 1
* Set
my_len to a numeric value. For this test, I'll set it to 16.
Replacing:
%CALC{"$SET(my_len,$LENGTH($GET(my_exclude)))"}%
with:
%CALC{"$SET(my_len,16)"}%
worked. Based on limited testing, this seems to work. It hasn't caused any problems. The only issue with using this is that I'll have to replace 16 with some number greater than the longest wiki topic name in our TWiki installation.
TEST 2
* Omit
my_len parameter entirely.
Deleted:
%CALC{"$SET(my_len,16)"}%
And the replaced:
%CALC{"$SET(my_result,$REPLACE($GET(my_topic),$GET(my_pos),$GET(my_len),))"}%
With:
%CALC{"$SET(my_result,$REPLACE($GET(my_topic),$GET(my_pos),))"}%
This didn't work. From a "discussion" page, clicking
Topic just reloaded the "discussion" page; it didn't return me to the main topic.
TEST CONCLUSION
I've decided to use:
%CALC{"$SET(my_len,100)"}%
And see how it runs for awhile. I'm marking this Answered. If anything else related comes up, I'll update this post.
Much thanks again to
FranzJosefSilli for his invaluable input.
--
JasonVensel - 08 Mar 2006
Hm, the length is needed if you want to cut out a subtext from within another text (as far as I understood the
SpreadSheetPlugin function description, didn't check the code). If you just want to snip of the subtext from the end of the string ... Well, I didn't that much testing.

Maybe Peter has more insight.
--
FranzJosefSilli - 08 Mar 2006
Setting it to
100 has worked so far. I may adjust (shorten) it based on the character length of our longest topic. Otherwise, I'm content to leave it like this unless someone knows of a reason against it.
--
JasonVensel - 09 Mar 2006