Pagina 1 di 2

Header PHP in due versioni

Inviato: ven ago 23, 2013 22:49
da samiel
Nuovo problemino PHP.
In un sito vorrei che la home avesse lo header di un certo tipo:
titolo su più righe, e sotto il consueto menu orizzontale.
Nelle altre pagine invece vorrei che lo header fosso assai più ristretto:
titolino su una riga e sotto ancora il menu.
Avevo pensato a una cosa del tipo

Codice: Seleziona tutto

<?php>
$pages = array ("index");
if {in_array($_GET["pagina"], $pages)} {
    echo '<header1">'
    } else {
echo '<header2">'
}
?>

avendo poi uno header1 e uno header2.
Ma poiché tutto l'ambaradan dei menu è lo stesso,
e ciò che varia è solo la formattazione del titolo,
mi sembra di sparare ai passeri col cannone
perché tutto lo header è per il resto identico
sia in header1 sia in header2.
Che soluzione più adeguatamente economica posso adottare?

Grazie
m

Re: Header PHP in due versioni

Inviato: sab ago 24, 2013 0:10
da ZeroUno
i css.
Su una pagina applichi uno stile grosso e su una pagina uno stile piccolo

Re: Header PHP in due versioni

Inviato: sab ago 24, 2013 0:25
da samiel
Il problema è come far sì che PHP lo applichi,
visto che lo header è generato "automaticamente"
e una volta sola in index.php

m

Re: Header PHP in due versioni

Inviato: sab ago 24, 2013 0:49
da ZeroUno
quello che vari è lo stylesheet (css)

<head>
<?php
se index {
echo
<style>
.titoli { formattazione per grandi }
</style>
}else{
echo
<style>
.titoli { formattazione per piccoli }
</style>
}
?>
</head>
<span class="titoli">intestazioni</span>

(oppure div, o simile)

se gli stili sono grossi puoi mettere file esterni, sempre dentro <head></head>

if(index){echo <link href="grande.css" rel="stylesheet" type="text/css">}
else{echo <link href="piccolo.css" rel="stylesheet" type="text/css">}

Re: Header PHP in due versioni

Inviato: dom ago 25, 2013 15:20
da samiel
Vero! Ancora più semplice:

Codice: Seleziona tutto

<?php
  echo ($pagina != "home") ?
  '<h2>Titolo ridotto/h2>' :
   <h1>Titolone</h1>
   <h2>Sottotitolo</h2>';
?>


grazie
m

Re: Header PHP in due versioni

Inviato: dom set 15, 2013 14:12
da marcomg
Beh, così non è molto "pulito".

Re: Header PHP in due versioni

Inviato: dom set 15, 2013 20:37
da Paoletta
marcomg ha scritto:Beh, così non è molto "pulito".


concordo, direi meglio cosi' (come diceva ZeroUno):

Codice: Seleziona tutto

if(index){echo <link href="grande.css" rel="stylesheet" type="text/css">}
else{echo <link href="piccolo.css" rel="stylesheet" type="text/css">}

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 1:31
da samiel
Scusate, ho perso di vista la discussione travolto da eventi tutt'altro che informatici.
Adesso mi si ripropone il problema. Ho provato alcine soluzioni.

Soluzione 1.

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$stylesheet = ($pagina != 'home') ? 'stylesheets/layout2.css' :
'stylesheets/layout3.css';
?>

Risultato: non mi trova nemmeno un css

Soluzione 2.

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$stylesheet = ($pagina != 'home') ? 'stylesheets/layout2.css' :
'stylesheets/layout3.css';
?>

Risultato: mi applica solo il css2 e non applica il css3 alla home.
RIcevo infatti il messaggio:

Codice: Seleziona tutto

Notice: Undefined index: pagina in /home/samiel/public_html/fornero3/index.php on line 766


Correzioni precise al codice? Grazie mille!!!!!!!!!!!!!!

m

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 8:38
da aschenaz
samiel ha scritto:...travolto da eventi tutt'altro che informatici.

Ciao Mauro, problemi?

Soluzione 1.

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$stylesheet = ($pagina != 'home') ? 'stylesheets/layout2.css' :
'stylesheets/layout3.css';
?>

Risultato: non mi trova nemmeno un css

Soluzione 2.

Codice: Seleziona tutto

<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$stylesheet = ($pagina != 'home') ? 'stylesheets/layout2.css' :
'stylesheets/layout3.css';
?>

Risultato: mi applica solo il css2 e non applica il css3 alla home.
RIcevo infatti il messaggio:

Codice: Seleziona tutto

Notice: Undefined index: pagina in /home/samiel/public_html/fornero3/index.php on line 766

...

Qual è la differenza tra i due codici? Non la vedo...
Comunque, l'if in questo formato non sono sicuro che sia corretto (di sicuro funziona con echo, ma con l'assegnazione della variabile non l'ho mai provato.
Io la scriverei così:

Codice: Seleziona tutto

isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$pagina != 'home' ? $stylesheet='stylesheets/layout2.css' : $stylesheet='stylesheets/layout3.css';


Oppure, visto che io sono fissato con la sintesi:

Codice: Seleziona tutto

isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$pagina != 'home' ? $stylenr='2' : $stylenr='3';

...e poi...

Codice: Seleziona tutto

<link rel="stylesheet" type="text/css" href="stylesheets/layout<?php echo $stylenr ?>.css" />


Comunque, quell'avviso sembrerebbe riferirsi a qualche altro problema. Cosa c'è in quella riga (766)?
Possibile, poi, che tu abbia una index di 766 righe e oltre?

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 14:13
da aschenaz
Copia-incolla quella porzione del codice nel sorgente della pagina.
Ma il percorso è corretto?

In ogni caso, la seconda soluzione è anche valida, ma sporca: infatti, non fa altro che caricare il primo css e poi annullare le varie chiamate a favore del secondo. Fai fare al server un lavoro inutile...

EDIT: non vedo più il tuo messaggio.

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 14:17
da samiel
La seconda soluzione carica sempre il CSS 2
la prima nemmeno uno.
si, certo che il percorso è corretto
anche se ho l'impressione
che mi sfugga qualcosa di enormemente banale....

m

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 14:26
da samiel
Invece il codice

Codice: Seleziona tutto

<link rel="stylesheet" type="text/css" href="stylesheets/layout2.css" />
<?php
$pages = array ("home");
if (in_array($_GET["pagina"], $pages)){
echo '<link rel="stylesheet" type="text/css" href="stylesheets/layout3.css">';
}
?>

mi carica sempre il CSS2 e nella home mi dice:

Codice: Seleziona tutto

 Notice: Undefined index: pagina in /home/samiel/public_html/fornero3/index.php on line 765

dove la riga in questione è

Codice: Seleziona tutto

if (in_array($_GET["pagina"], $pages)){



m

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 14:35
da aschenaz
Prova la soluzione che ti ho prospettato, poi richiama il sorgente della pagina e posta le righe di codice interessate.

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 14:51
da samiel
Se uso la riscrittura che hai fatto del mio codice,
non viene applicato nessun CSS. Il srogente:

Codice: Seleziona tutto

<!--inizializzo le variabili-->

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="it">
<head>
<title>Giovanni Fornero - Filosofia e bioetica</title>

<meta name="generator" content="Quanta Plus" />
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />

<meta name="descriptions" content="Materiali, documenti e recensioni sulle opere del filosofo
      italiano Giovanni Fornero
"
/>

<meta name="keywords" content="giovanni fornero, fornero, giovanni fornero sito ufficiale,
      giovanni fornero recensioni, giovanni fornero libri, giovanni fornero
      opere, bioetica, bioetica cattolica, bioetica laica, laicita, laicita
      forte, laicita debole, etica, etica laica, etica cattolica,
      disponibilita della vita, indisponibilita della vita, qualita della
      vita, sacralita della vita, stato laico, stato pluralista, etsi deus
      non daretur, storia della    filosofia, storiografia filosofica,
      dizionario di filosofia, filosofia del novecento, filosofie del
      novecento, manuali per i licei
"
/>

<meta name="robots" content="index,follow" />

<body>
<div id="header">

Del CSS non c'è traccia...

m

Re: Header PHP in due versioni

Inviato: mer ott 02, 2013 15:42
da miklos
rispondo per dei possibili errori che ho visto io
samiel ha scritto:Soluzione 2.

Codice: Seleziona tutto
<?php
isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";
$stylesheet = ($pagina != 'home') ? 'stylesheets/layout2.css' :
'stylesheets/layout3.css';
?>


Risultato: mi applica solo il css2 e non applica il css3 alla home.
prova ad utilizzare il controllo tra stringhe in questo modo

Codice: Seleziona tutto

$stylesheet = ($pagina !== 'home') ? 'stylesheets/layout2.css' :
    'stylesheets/layout3.css';
nota il !== nella condizione.
I vari notice sono 'normali' e dovrebbe essere buona regola controllare sempre se una variabile esiste con isset ed eventualmente utilizzare un valore di default.
samiel ha scritto:Invece il codice

Codice: Seleziona tutto
<link rel="stylesheet" type="text/css" href="stylesheets/layout2.css" />
<?php
$pages = array ("home");
if (in_array($_GET["pagina"], $pages)){
echo '<link rel="stylesheet" type="text/css" href="stylesheets/layout3.css">';
}
?>


mi carica sempre il CSS2 e nella home mi dice:
questo invece puo' avere problemi perchè la funziona in_array quando viene utilizzata con delle stringhe (il contenuto $_GET['pagina'] nel tuo caso) applica una ricerca case sensitive, quindi se per caso come parametro della url hai scritto

Codice: Seleziona tutto

index.php?pagina=Home
non funziona.. ti conviene, secondo me fare un uppercase(o lowercase) dei parametri per evitare questo tipo di problemi.

ciau