Header PHP in due versioni

Forum dedicato alla programmazione.

Moderatore: Staff

Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.

La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Header PHP in due versioni

Messaggio 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

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5305
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Header PHP in due versioni

Messaggio da ZeroUno »

i css.
Su una pagina applichi uno stile grosso e su una pagina uno stile piccolo
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

Avatar utente
ZeroUno
Staff
Staff
Messaggi: 5305
Iscritto il: ven 2 giu 2006, 14:52
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current
Località: Roma / Castelli
Contatta:

Re: Header PHP in due versioni

Messaggio 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">}
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg

Codice: Seleziona tutto

1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

marcomg
Linux 0.x
Linux 0.x
Messaggi: 13
Iscritto il: sab 27 lug 2013, 16:01
Desktop: KDE
Distribuzione: Debian Sid

Re: Header PHP in due versioni

Messaggio da marcomg »

Beh, così non è molto "pulito".
Windows is what you open when you want fresh air from outside.

Avatar utente
Paoletta
Staff
Staff
Messaggi: 3974
Iscritto il: lun 25 apr 2005, 0:00
Slackware: 14.2 - 64 bit
Desktop: fluxbox
Località: Varese

Re: Header PHP in due versioni

Messaggio 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">}

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4617
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 4.14.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: Header PHP in due versioni

Messaggio 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?

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4617
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 4.14.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: Header PHP in due versioni

Messaggio 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.

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

Avatar utente
aschenaz
Staff
Staff
Messaggi: 4617
Iscritto il: mer 28 lug 2004, 0:00
Nome Cognome: Nino
Slackware: current
Kernel: 4.14.x
Desktop: KDE
Località: Reggio Calabria
Contatta:

Re: Header PHP in due versioni

Messaggio da aschenaz »

Prova la soluzione che ti ho prospettato, poi richiama il sorgente della pagina e posta le righe di codice interessate.

samiel
Staff
Staff
Messaggi: 5510
Iscritto il: ven 16 gen 2004, 0:00
Nome Cognome: Mauro Sacchetto
Slackware: 13.0
Kernel: 2.26
Desktop: KDE
Distribuzione: anche Debian
Località: Venezia

Re: Header PHP in due versioni

Messaggio 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

miklos
Master
Master
Messaggi: 1540
Iscritto il: lun 16 lug 2007, 17:39
Slackware: 14.1 64bit
Kernel: 3.16.3
Desktop: openbox 3.5.2
Località: Roma

Re: Header PHP in due versioni

Messaggio 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
ho visto cose che voi astemi non potete immaginare
https://github.com/ilmich

Rispondi