Proposed: Automatic window title based on first heading in topic
You get nice window titles if you pull the first heading from the topic and use it as the window title text. This proposed feature allows you to do that automatically. It is enabled with preferences settings, e.g. it can be set flexibly site-wide, per web or per topic.
-
Set NICEWINDOWTITLE = on or Actual window title with optional $topic, $web and $heading
If the setting is set to
on on
SomeTopic (on site-wide, web-level or topic level), the window title will be set to the
First heading text of
SomeTopic. If there is no heading, it will be set to the topic name.
If the setting is set to an
Actual window title, the
Actual window title will be shown in the browser. Optional tokens
$topic,
$web are expanded to topic name and web name, respectively. Optional token $heading is expanded to the first heading in the topic, or $topic if there is none.
This setting makes it compatible with the current spec:
-
Set NICEWINDOWTITLE = $topic < $web < %WIKITOOLNAME%
This is consistent with the proposed
AutomaticLinkLabelBasedOnHeading feature.
--
Contributors: PeterThoeny
Discussions
Introduce a Page Title Variable
The request is to introduce a variable named
TOPICTITLE that can be used to set the title of the page.
This request is based on a suggestion from the discussion about
ReversePageTitle.
I have suggestion about this:
Why don't we change the
twiki.pattern.tmpl like this:
<title> %TOPICTITLE% </title>
Then we define the following variable in
WebPreferences:
* Set TOPICTITLE = %TOPIC% > %WEB% > %WIKITOOLNAME%
This will have the added benefit that now the title can be changed web-wide (using the variable in
WebPreferences) and page-wide using the following invisible code:
<!--
* Set TOPICTITLE = My topic on my web.
-->
Altogether a discussion like in this topic can be totally avoided, because everybody can define the title at will. Suggestions on this?
A patched wiki using this change to the pattern-skin can be found at
http://page.mi.fu-berlin.de/~oezbek/cgi-bin/view/TestSE/WebHome
.
--
ChristopherOezbek - 04 Oct 2004
Is it problematic / useful if this variable can be overridden in the topic text? In other words, should it be included in the FINALPREFERENCES of the Web's WebPreferences?
--
ArthurClemens - 04 Oct 2004
I think the whole point is to
allow it to be set per topic. To avoid setting it accidentially, how about naming it TOPICTITLE instead?
--
PeterThoeny - 05 Oct 2004
It would be defintely be a feature that is especially designed to allow the title to be set per topic. It is mainly a step to make Google search results more readable.
--
ChristopherOezbek - 07 Oct 2004
What I'd realy like would be the ability to set titles site wide to be a form field or the first heading in a topic.
The ability for it to fall back to headings if the form is not present would be good.
Would probably have to be done as a plugin.
If this variable was in the templates then I guess all the plugin would have to do would be to overwrite whatever the site setting was, unless it was set in the topic.
--
SamHasler - 07 Oct 2004
That's a good idea with the forms and works nicely alongside the =TITLE=-tag. I have incorporated it into my test-twiki at
http://projects.mi.fu-berlin.de/w/bin/view/SE/FOSSHome
Since I am pretty new to TWiki, I don't know how complicated a plugin would be that extracts the title information from the first top-level heading, but if you guys want I can have a look.
--
ChristopherOezbek - 21 Oct 2004
Alright, I tried to write a plugin that adds a
Set TOPICTITLE = ... depending on the top-level entry of the TOC, but the plugin architecture is not made to accomodate changes to the preferences by the commonTagHandler (preferences are only parsed once and cannot be modified using
TWiki::Func). It seems that the only solution would be to use the
renderHandler which is said to be expensive. But unfortunately this is not possible either since the header of the html file is not passed into the plugin at all. As a last resort I tried to modify the topic-text before the preferences are initialized, but this fails because the topic is not passed along to
initialize1. Any suggestions?
--
ChristopherOezbek - 21 Oct 2004
I have a three line fix for the whole problem, which on the other hand might destroy the security model of TWiki. I added a function called
setPreferenceValue which allows modification of the
requestPrefs and added another one that gives access using
TWiki::Func.
And it works even though I just discovered a problematic situtation: My professor uses the convention to remove the top-most toc-entry using
!! because it is kind of redundant to have the title of the page to appear in the toc.
--
ChristopherOezbek - 21 Oct 2004
Can you post those changes here? I'd be very interested in trying this out and testing it on my own site. Thanks!
--
ClausBrod - 18 Dec 2004
--- Prefs.pm.old 2004-05-29 08:51:35.000000000 +0200
+++ Prefs.pm 2005-01-03 15:56:10.000000000 +0100
@@ -834,6 +834,24 @@
# =========================
+
+=pod
+
+---+++ sub setPreferenceValue( $theKey, $theValue )
+
+Will set the given preference value.
+
+=cut
+
+sub setPreferenceValue( $theKey, $theValue )
+{
+ my ( $theKey, $theValue ) = @_;
+ $requestPrefs->_insertPreference($theKey, $theValue);
+}
+
+# =========================
+
+
1;
=end twiki
and
--- TWiki.old 2005-01-03 15:27:46.000000000 +0100
+++ TWiki.pm 2005-01-03 18:28:59.000000000 +0100
@@ -2460,6 +2460,8 @@
my $tabs = "";
my $anchor = "";
my $highest = 99;
+ my $toctitle = "";
+ my $highestToc = 99;
foreach $line ( @list ) {
if( $line =~ /^.*<pre>.*$/io ) {
$insidePre = 1;
@@ -2492,11 +2494,16 @@
}
if( ( $line ) && ( $level <= $depth ) ) {
$anchor = TWiki::Render::makeAnchorName( $line );
+ if ($level < $highestToc){
+ $toctitle = $line;
+ $toctitle =~ s/$regex{headerPatternNoTOC}//go; # We ignore !! and %NOTOC%
+ $highestToc = $level;
+ }
# cut TOC exclude '---+ heading !! exclude'
$line =~ s/\s*$regex{headerPatternNoTOC}.+$//go;
$line =~ s/[\n\r]//go;
next unless $line;
- $highest = $level if( $level < $highest );
+ $highest = $level if( $level < $highest );
$tabs = "";
for( $i=0 ; $i<$level ; $i++ ) {
$tabs = "\t$tabs";
@@ -2523,6 +2530,10 @@
$highest--;
$result =~ s/^\t{$highest}//gm;
}
+ if ($toctitle){
+ &TWiki::Prefs::setPreferenceValue( "TOCTITLE", $toctitle );
+ }
+
$result = "<div class=\"twikiToc\">$title$result\n</div>";
return $result;
@@ -3157,8 +3168,9 @@
&TWiki::Prefs::handlePreferencesTags( $text );
handleInternalTags( $text, $theTopic, $theWeb );
+ my $handledToc = &handleToc($text,$theTopic,$theWeb,"");
$text =~ s/%TOC{([^}]*)}%/&handleToc($text,$theTopic,$theWeb,$1)/ge;
- $text =~ s/%TOC%/&handleToc($text,$theTopic,$theWeb,"")/ge;
+ $text =~ s/%TOC%/$handledToc/ge;
# Codev.FormattedSearchWithConditionalOutput: remove <nop> lines, possibly introduced by
# SEARCHes with conditional CALC. This needs to be done after CALC and before table rendering
That is a quick and dirty patch on a Cairo Release. Be aware that you incure the overhead of the call to handleToc for all topics, even if they don't have one with this patch.
You will also need the following addition to the
WebPreferences:
* To use the title of the toc as the title of the page use:
* Set TOCTITLE = %TOPIC% < %WEB% < %WIKITOOLNAME%
* Set TOPICTITLE = %TOCTITLE%
And a change in the twiki.*.tmpl that you are using:
<title>%TMPL:P{"titleaction"}% %TOPICTITLE% </title>
I have updated the link above to point to a current test-page.
--
ChristopherOezbek - 03 Jan 2005
We have moved our productive version to use the change and the titles are produced just fine. Have a look at
http://projects.mi.fu-berlin.de/w/bin/view/SE/FOSSHome
--
ChristopherOezbek - 27 Jan 2005
I just created
YouAreHereUsingMetaName because i had overseen this interesting topic. Basically i was asking vor changeing what is being displayed in
You are here. Could this be integrated here?
--
WolfgangAlper - 15 Mar 2005
I found a
twiki site
that work similar to what i mean.
--
WolfgangAlper - 16 Mar 2005
That is a long overdue non-updated site of mine! In fact that was the start of
PatternSkin (hence the name). But the topic names in the breadcrumb (I suppose you mean the trail at the top, see also the
pattern about this
) are created with
UnderscoreWikiWords. So not really with page title variables - I think that is a better approach.
--
ArthurClemens - 16 Mar 2005
Yes i noticed that it is using
UnderscoreWikiWords and i would also prefer to use topicvars or metadata instead. However the result (breadcrumb) is exactly what i am looking for

I think If any topic could have an alias, then the creating of informative breadcumbs and pagetitles would be easily achieved.
--
WolfgangAlper - 17 Mar 2005
Christopher, why are you using the name
TOCTITLE? It seems this is meant to be the title of the page as seen in the browser window, thus the HTMLPAGETITLE or something? TOC sounds like Table of Contents...
Wolfgang, I think this can be done with
TopicVarsPlugin. In a recent project I have used this plugin with an extra form field
Pagetitle (and a variable
CLIENTNAME set in the WebPreferences) . The homeward path was created like this:
<div class="twikiHomePath">
You are here: [[%WEB%.WebHome][%WebPreferences.CLIENTNAME%]] %META{"parent" formfield="Pagetitle" nowebhome="on" format=" <span class='twikiSeparator'>></span> [[$web.$topic][$formfield]]"}% <span class='twikiSeparator'>></span><strong> %FORMFIELD{"Pagetitle" topic="%TOPIC%" format="<nop>$value" alttext="<nop>%TOPIC%"}% </strong>
</div>
This results in (example):
You are here:
Mercedes > Mercedes C-klasse
--
ArthurClemens - 17 Mar 2005
Arthur, thanks for the snippet. I'll try the suggested way, preferable using
MacrosPlugin instead of
TopicVarsPlugin if this is possible.
I also suggest/agree to use a different name than
TOCTITLE as it can be a bit confusing. At least it was for me
--
WolfgangAlper - 18 Mar 2005
Following the links of my contributions to twiki pages, I came across something I wrote a few months ago:
HowToShowParentTopics. It has a patch to let
META{"parent"} use
$formfield, and another patch to let it use
$format.
So the code snippet above will only work with the patches from
HowToShowParentTopics (now in
AddFormfieldParamToMetaParent and
AddFormatParamToMetaParent).
--
ArthurClemens - 26 Mar 2005
Hi Arthur!
here is the procedure I use:
- The TOC is scanned and updates the variable TOCTITLE
- The TOCTITLE can then be used to set the
TOPICTITLE variable which I use in the template. This could be renamed into HTMLPAGETITLE for clarity, indeed.
Here an example:
* Set TOCTITLE = !%TOPIC% - Has No TOC
* Set TOPICTITLE = !%TOCTITLE% - !%WEB%
This will display the topic name and "Has No TOC" and the web for all topics that don't have a single heading. If there is a TOCTITLE it will overwrite the previous value (PageTitleVariable - Has No TOC) and can thus be used in the variable TOPICTITLE.
--
ChristopherOezbek - 28 Jun 2005
Hello TWiki-Team, I would like to ask what do I have to do to get this feature added into Dakar release or is it already too late?
I have been using the above patch in a TWiki Alpha release and the only problem it still has is that it does not strip exclamation marks that are used as nop.
If somebody gives me a hint what needs to be done, I would be willing to polish the patch accordingly.
--
ChristopherOezbek - 31 Aug 2005
Tell me the spec of what you want to do, and I can advise. I can't reverse engineer it from this topic, I'm afraid.
--
CrawfordCurrie - 31 Aug 2005
Hi Crawford,
there are two things:
- Introduce
!%HTMLPAGETITLE% as a variable that is set in the WebPreferences to %TOPIC% < %WEB% < %WIKITOOLNAME% and change the view.tmpls accordingly.
This change allows the page title to be set from each topic and for each web.
- Add the following function to
Prefs.pm.
--- Prefs.pm.old 2004-05-29 08:51:35.000000000 +0200
+++ Prefs.pm 2005-01-03 15:56:10.000000000 +0100
@@ -834,6 +834,24 @@
# =========================
+
+=pod
+
+---+++ sub setPreferenceValue( $theKey, $theValue )
+
+Will set the given preference value.
+
+=cut
+
+sub setPreferenceValue( $theKey, $theValue )
+{
+ my ( $theKey, $theValue ) = @_;
+ $requestPrefs->_insertPreference($theKey, $theValue);
+}
+
+# =========================
+
+
1;
- Patch handleToc and the place where it is called.
I guess the concerns against this change are the following:
- Will need some work in the templates and preferences.
- The second point might be a security problem. If this is too severe, then I can supply another solution which works directly in TWiki.pm (this the big patch given above in my post from 3th January).
- What the third point is doing is basically parsing the TOC and saving the value as a new preference variable. I could not figure out how to do this as a plugin (see second post from Octobre 21st.
I appreciate the help! Send me a mail for faster commuication
twiki@oeziPLEASENOSPAM.de, if you prefer.
--
ChristopherOezbek - 01 Sep 2005
What would be the prefered way for me to contribute this to TWiki? Should I write a big patch against a current
SVN snapshot?
I still think it would be great to have automatically set topic titles like
Introduce a Page Title Variable < Codev < TWiki
instead of
PageTitleVariable < Codev < TWiki.
--
ChristopherOezbek - 06 Dec 2005
Yes, please bring this to Dakar or at least prepare it for the journey to Edinburgh.
--
FranzJosefSilli - 06 Dec 2005
Hi Franz,
I had a look into a current develop (7837) release and tried to port the patch, but it seems like there were changes in the way the topics get rendered. For the above patch to work it is important that the topic text is expanded before it is inserted into the view.tmpl at the position %TEXT%. Is it possible that this aspect changed?
In other words:
Is it possible to modify a preference value from a plugin such that a variable is expanded later-on with the value that the plugin set?
--
ChristopherOezbek - 15 Dec 2005
Whats the solution in
DakarRelease now to override the
HTML title (with top most heading)?
--
TobiasRoeser - 09 Feb 2006
This has not been developed into Dakar.
In the
WikiMatrix I noticed that
TikiWiki has a markup syntax for the window title:
-= Titlebar =-=
In TWiki markup this would be logical:
---= overriding window title
---+ header 1
---++ header 2
--
ArthurClemens - 09 Feb 2006
Related,
DokuWiki offers
[[Page]] links that render as
Page in case the page does not have a heading, and renders as
First Heading in case there is one. This is very intuitive and easy to use.
How about these new preferences settings:
- Set NICELINKLABEL = on
- Set NICELINKLABEL = Any label
- Set NICEWINDOWTITLE = on
- Set NICEWINDOWTITLE = Any title
Either one can be set to
on (to take the value from the first heading), or it can be set to the actual text. The NICELINKLABEL does it the
DokuWiki way; the NICEWINDOWTITLE does it the
TikiWiki way. Since these are preferences settings, it can be set flexibly site-wide or per topic.
--
PeterThoeny - 09 Feb 2006
I updated above proposal accordingly.
See also related
AutomaticLinkLabelBasedOnHeading.
--
PeterThoeny - 09 Feb 2006
Got a
PAGETITLE variable in the
NatSkin that is inserted into a condition
<title>
%IFDEFINEDTHEN{"%PAGETITLE%" action="view|preview|save|edit"}%
%PAGETITLE%
%ELSIFDEFINED{"%FORMFIELD{"Headline"}%" action="view|preview|save|edit"}%
%FORMFIELD{"Headline"}%
%ELSIFDEFINED{"%FORMFIELD{"TopicDescription"}%" action="view|preview|save|edit"}%
%TOPIC% - %FORMFIELD{"TopicDescription"}%
%ELSEDEFINED%
%TOPIC%
%FIDEFINED%
</title>
In other words
If the current action is view, preview, save or edit
- If
PAGETITLE is defined use it
- or if a formfield
Headline is defined use that
- or if a formfield
TopicDescription is defined use that
Or fallback to the TOPIC name. This matches nicely the
BlogPlugin to give you
the "right" title automatically.
--
MichaelDaum - 10 Feb 2006
Has anybody developed a solution/patch against Dakar to change/set a topic variable, as the upper patch to Prefs.pm don't work anymore?
--
TobiasRoeser - 22 Feb 2006
About a more general solution: see proposal in
TopicDisplayName.
--
ArthurClemens - 22 Feb 2006
This proposal is now replaced by
VarTOPICTITLE and
TopicDisplayName.
--
PeterThoeny - 2012-05-11