è che usi due logiche diverse... o fai tutto il sito che cambia in base ad una variabile... o fai tutto con file diversi...
Hai anche ragione

Dunque ci sto continuamente pensando, ma non ne vengo definitivamente a capo!
Allora ho modificato lo scriptino così:

Codice PHP:
<?php
// Barra di navigazione intelligente
//  by Luca Balzerani

// Struttura dati: array con link e descrizioni
$links = array( "index.php" => "Home",
        
"news.php" => "News",
        
"index.php?p=contatti" => "Contatti",
        
"book.php?p=leggi" => "Book" );

$pagina_corrente basename($PHP_SELF);


// Visualizzazione barra di navigazione

echo "<div id=\"navcontainer\">\n";
echo 
"<ul id=\"navlist\">\n";

while (list(
$url,$desc)=each($links)) {
  
  if ( (
$url==$pagina_corrente) && (!isset($_GET['p'])) ) {
    echo 
"<li id=\"active\"><a href=\"$url\" id=\"current\">$desc</a>";
  }
  
  else if ( (
$url==$pagina_corrente) && (isset($_GET['p'])) ) {
    echo 
"<li id=\"active\"><a href=\"$url\" id=\"current\">$desc</a>";
  }
  
  else {
    echo 
"[*]<a href=\"$url\">$desc</a> ";
  }
  
}
echo 
"[/list]\n";
echo 
"</div>\n";
?>
Però nel "else if" mi riconosce sì la pagina dove sono, o meglio sà che nell' URL esiste il parametro "p", ma nella creazione del link $url e $desc non corrispondono (come dovrebbero) al 3° e 4° array...

Potete/sapreste darmi altri spunti?