While converting an old project over to drupal i ran into the issue that i needed dynamic page titles. Since drupal has no support for dynamic page titles and you can’t leave the title blank and use a outside drupal page title I had to search inside drupal files until i noticed the following line in themes/[THEMENAME]/page.tmpl.php:

<?php if ($title) { ?><h1 class="pageTitle"><?php print $title ?></h1><?php } ?>

where I easily was able to add an extra check:

 <?php if ($title&&($title!='&lt;none&gt;')) { ?><h1 class="pageTitle"><?php print $title ?></h1><?php } ?>

Now i can enter <none> as title and drupal won’t display anything. The only problem left is that drupal doesn’t seem to differ in between node and page titles. Thus the browser will show <none> as page title. To work around this I used a slightly changed variant:

 <?php if ($title&&(substr($title,0,1)!=' ')) { ?><h1 class="pageTitle"><?php print $title ?></h1><?php } ?>

Now all you need to do to hide a node title is to add a space sign as first character to the title. The node won’t display it but the page title is all right now. Check drupal_set_title() function api docs for informations about how to set it dynamically from a module that you embedded into a node.

This solution is a bit dirty since it leaves the space sign in the browser title bar but that should rarely be an issue. The other objection would be that this hack ain’t too intuitive. Both things can be easily fixed by using a tag instead of the space char, then filter that term from both page title as well as node title before output but after processing, for the node that would be something along

 <?php if ($title&&(substr($title,0,strlen("&lt;none&gt;"))!='&lt;none&gt;')) { ?><h1 class="pageTitle"><?php print str_replace("&lt;none&gt;","",$title) ?></h1><?php } ?>