meta tag dinamici con PHP

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.
Rispondi
netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

meta tag dinamici con PHP

Messaggio da netmaster »

Salve a tutti. Vorrei sottoporre alla Vostra attenzione il mio problema:

Sto utilizzando il template PHP (un semplice sito) pubblicato in questo sito al quale vorrei applicare alcuni meta tag dinamici a seconda delle pagine caricate. A tale scopo ho creato un file config.php richiamato sopra l'header del template.

Le URL del sito sono riscritte con mod_rewrite in htaccess, pertanto per il caso in oggetto

sagre.php?pagina=notizie-delle-sagre-2015&sezione=sagra-delle-cozze

viene riscritta così

/sagre/notizie-delle-sagre-2015/sagra-delle-cozze/

per rendere dinamici i meta tag ho utilizzato uno switch che funziona benissimo per l'URL /sagre/notizie-delle-sagre-2015/ ed un altro switch per l'URL /sagre/notizie-delle-sagre-2015/sagra-delle-cozze/ che non funziona in quanto non sono riconosciute più le variabili $titlebrowser, $description e $keywords e di conseguenza viene visualizzato questo errore:

<title><br />
<b>Notice</b>: Undefined variable: titlebrowser in <b>c:\programmi\easyphp1-8\www\notizie\include\template\header.php</b> on line <b>7</b><br />
</title>
<meta name="description" content="<br />
<b>Notice</b>: Undefined variable: description in <b>c:\programmi\easyphp1-8\www\notizie\include\template\header.php</b> on line <b>11</b><br />
" />
<meta name="keywords" content="<br />
<b>Notice</b>: Undefined variable: keywords in <b>c:\programmi\easyphp1-8\www\notizie\include\template\header.php</b> on line <b>12</b><br />
" />

Inoltre il tag <h2><?php echo ucfirst($pagina) ?></h2> nella pagina richiamata di default (notizie-brevi-sagre) visualizza correttamente il titolo come "notizie delle sagre 2015" mentre quando viene richiamata la pagina "sagra delle cozze", il titolo visualizzato diventa "notizie delle sagre 2015/sagra delle cozze"

Non riesco a capire come risolvere questi problemi :?: . Se qualcuno mi potesse aiutare, ne sarei molto grato.

Posto il codice in uso:

config.php

Codice: Seleziona tutto

<?php
$pagina = isset($_GET["pagina"]) ? $pagina=$_GET["pagina"] : $pagina="home";

switch ($pagina) {

	case ($pagina == "home"):
		$titlebrowser = "sagre 2015";
		$description  = "notizie, informazioni, aggiornamenti sulle sagre 2015.";
		$keywords  = "";
	break;

	case ($pagina == "notizie-delle-sagre-2015"):
		$titlebrowser = "notizie delle sagre 2015";
		$description  = "notizie, informazioni, aggiornamenti sulle sagre 2015.";
		$keywords  = "";
	break;

}// fine switch

$subpagina = isset($_GET["sezione"]) ? $sezione=$_GET["sezione"] : $sezione="notizie-brevi-sagre";

if($pagina == "notizie-delle-sagre-2015") {

switch ($subpagina) {

	case ($subpagina == "sagra-delle-cozze"):
		$titlebrowser = "sagra delle cozze";
		$description  = "notizie, informazioni, aggiornamenti sulla sagra sagra delle cozze.";
		$keywords  = "";
	break;

}// fine switch

}// fine IF



Ho provato anche in questo modo ... 

switch ($subpagina) {

	case 'sagra-delle-cozze':
		require_once __DIR__ . '/pagine/sagre/notizie-delle-sagre-2015/sagra-delle-cozze.php';
		$titlebrowser = "sagra delle cozze";
		$description  = "notizie, informazioni, aggiornamenti sulla sagra sagra delle cozze.";
		$keywords  = "";
		break;

}// fine switch

... e in questo modo:

$subpagina = isset($_GET["sezione"]) ? $sezione=$_GET["sezione"] : $sezione="notizie-brevi-sagre";

if($pagina == "notizie-delle-sagre-2015" && $sezione == "sagra-delle-cozze") {

		$titlebrowser = "sagra delle cozze";
		$description  = "notizie, informazioni, aggiornamenti sulla sagra sagra delle cozze.";
		$keywords  = "";

}

ma niente di fatto.
?>
sagre.php

Codice: Seleziona tutto

<?php
$server = "http://localhost/demo-wikislacky";
?>
<!DOCTYPE html>
<html lang="it">
<head>
  <title><?php echo $titlebrowser; ?></title>
  <meta name="description" content="<?php echo $description; ?>" />
  <meta name="keywords" content="<?php echo $keywords; ?>" />
</head>
<body>
<h1>Sagre paesane</h1>
<hr />
<ul><?php
$vocimenu=array("home","notizie-delle-sagre-2015","notizie-delle-sagre-2014","notizie-delle-sagre-2013");
foreach($vocimenu as $voce) {
  echo "
  <li>";
  if($pagina!=$voce) 
  echo '<a href="'.$server.'/sagre/'.$voce.'/">';
  echo $voce;
  if($pagina!=$voce) echo "</a>";
  echo "</li>";
}
echo "\n";
?>
</ul>
<hr />
<h2><?php echo ucfirst($pagina) ?></h2>
<?php include("pagine/sagre/$pagina.php") ?>
</body>
</html>
notizie-delle-sagre-2015.php

Codice: Seleziona tutto

<?php
include("notizie-delle-sagre-2015/$sezione.php");
?>

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

Nessuno cha sappia aiutarmi come fare? :-k

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

Re: meta tag dinamici con PHP

Messaggio da aschenaz »

Guarda, io non ho mai usato il mod_rewrite, tanto per non crearmi complicazioni inutili, quanto perché gli url classici (index.php?p=pippo&s=topolino) mi piacciono (che posso farci? :lol: ). Credo, però, che dovresti dare un'occhiata alle RewriteRule, che dovrebbero servire proprio a questo scopo. Prova a fare una ricerca... :)

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

aschenaz ha scritto:Guarda, io non ho mai usato il mod_rewrite, tanto per non crearmi complicazioni inutili, quanto perché gli url classici (index.php?p=pippo&s=topolino) mi piacciono (che posso farci? :lol: ). Credo, però, che dovresti dare un'occhiata alle RewriteRule, che dovrebbero servire proprio a questo scopo. Prova a fare una ricerca... :)
Intanto grazie per la risposta.

Anch'io prima usavo l'url classica e per il mio caso i meta tag visualizzavano gli stessi contenuti sia nella pagina "madre" che nella pagina "figlia". Ovvero sia nella pagina sagre.php?pagina=notizie-delle-sagre-2015 che nella pagina sagre.php?pagina=notizie-delle-sagre-2015&sezione=sagra-delle-cozze veniva mostrato lo stesso contenuto dei meta tag. I problemi si sono manifeatati con la riscrittura dell'url. Tuttavia segnalo che i link funzionano correttamente ma non vengono più riconosciute le variabili definite nel file config.php.

Ho fatto una mega ricerca su tanti Forum, sia in italiano che in inglese, ma non ho trovato un solo Post che descriva un problema simile al mio.

Eppure un modo ci deve essere per risolverre il problema.

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

Re: meta tag dinamici con PHP

Messaggio da aschenaz »

Ragionando "terra-terra", il problema secondo me sorge perché, di fatto, col mod_rewrite non viene passata la variabile nella query string; lo script, quindi, dove dovrebbe pescarla?
Io ho trovato questo mini-topic su giorgiotave che potrebbe esserti utile: http://www.giorgiotave.it/forum/mod-rew ... i-get.html

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

aschenaz ha scritto:Ragionando "terra-terra", il problema secondo me sorge perché, di fatto, col mod_rewrite non viene passata la variabile nella query string; lo script, quindi, dove dovrebbe pescarla?
Io ho trovato questo mini-topic su giorgiotave che potrebbe esserti utile: http://www.giorgiotave.it/forum/mod-rew ... i-get.html
Ho letto il Topic da te indicato, ma non mi è stato utile. Li si tratta di come impostare una url particolare.

Il mio problema non consiste nel richiamare le pagine con GET, queste vengono caricate tutte correttamente. Tuttavia credo che il problema possa risiedere sempre nel url_rewrite ma per il fatto che i nomi dei file vengono riconosciuti come directory e come se il file config.php non avesse più il controllo nella parte dell'url /sagre/notizie-delle-sagre-2015/sagra-delle-cozze/ mentre invece le variabili $titlebrowser, $description e $keywords sono riconosciute correttamente nell'url /sagre/notizie-delle-sagre-2015/

Comunque, per completezza posto il codice htaccess

Codice: Seleziona tutto

Options +FollowSymLinks -MultiViews
AddDefaultCharset UTF-8
RewriteEngine On
RewriteBase /demo-wikislacky
#
RewriteCond %{REQUEST_URI} /+[^\.]+$
RewriteRule ^(.+[^/])$ %{REQUEST_URI}/ [R=301,L]
#
RewriteRule ^sagre/$ sagre.php [L]
RewriteRule ^sagre/(.*)/$ sagre.php?pagina=$1 [L]
RewriteRule ^sagre/(.*)/(.*)/$ sagre.php?pagina=$1&sezione=$2 [L]
mentre alcune pagine, per esempio, hanno i link tipo

notizie-brevi-sagre.php (richiamata di default - anteprima notizie brevi delle sagre) contiene fra i link uno come questo:
<a href="/demo-wikislacky/sagre/notizie-delle-sagre-2015/sagra-delle-cozze/">sagra delle cozze</a>

e sagra-delle-cozze.php (notizie approfondite della sagra delle cozze) contiene il link:
<a href="/demo-wikislacky/sagre/notizie-delle-sagre-2015/">elenco delle sagre</a>

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: meta tag dinamici con PHP

Messaggio da darkstaring »

netmaster ha scritto:sagre.php?pagina=notizie-delle-sagre-2015&sezione=sagra-delle-cozze

viene riscritta così

/sagre/notizie-delle-sagre-2015/sagra-delle-cozze/
Se mandi in get l'url come vuoi e lo includi con include?

usi str_replace per avere il nome corretto della pagina da includere..
un'idea... :)

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

Grazie per la risposta, ma dovrei utilizzare un header apposito, con codice php ad hoc, per questa possibile soluzione. Tanto vale creare una pagina apposita per le notizie: notizie.php?pagina=sagra-delle-cozze alias /notizie/sagra-delle-cozze/ ed utilizzare nel file config.php un unico switch dove aggiungere

Codice: Seleziona tutto

<?php
switch ($pagina) {
       case ($pagina == "sagra-delle-cozze"):
          $titlebrowser = "sagra delle cozze";
          $description  = "notizie, informazioni, aggiornamenti sulla sagra sagra delle cozze.";
          $keywords  = "";
       break;
}
?>
Penso proprio di adottare questa soluzione. Comunque, voglio ringraziare per l'aiuto offertomi.

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

Re: meta tag dinamici con PHP

Messaggio da aschenaz »

Una curiosità: c'è un particolare motivo perchè usi la forma case($pagina=="nomepagina"): e non semplicemente case "nomepagina":?

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

No, nessun motivo particolare. Si può fare in entrambi i modi, il risultato è lo stesso.

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

Re: meta tag dinamici con PHP

Messaggio da aschenaz »

Ah, è che io sono un fanatico della leggerezza del codice o, come si dice in ambito ciclistico, un "grammomaniaco". :D

Avatar utente
darkstaring
Linux 3.x
Linux 3.x
Messaggi: 657
Iscritto il: mer 13 ott 2010, 13:55
Nome Cognome: Francesco Achenza
Desktop: KDE
Distribuzione: Arch Linux
Contatta:

Re: meta tag dinamici con PHP

Messaggio da darkstaring »

Io immaginavo un header.php ed un footer.php che contengono le cose in comune a tutte le pagine (stile, javascript ecc)...
Poi, controllo alla fine di header.php se trovo in $_GET qualche query (sagra.....), se la trovo
controllo se esiste il file da includere e lo includo ed includo footer ed exit().
Dovrebbe essere un modo pulito (credo :) )
nell'index includi header e footer.php..
così ti allegerisci le varie pagine da script in comune e lasci solo il contenuto della pagina.

Solitamente io faccio così :).. bisogna vedere come hai costruito :)

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

Re: meta tag dinamici con PHP

Messaggio da aschenaz »

Credo che più o meno abbia fatto così (anch'io uso un sistema dinamico modulare...). Il problema, se non ho frainteso, è che, con il mod_rewrite, le query string non passano più le variabili GET delle pagine, sezioni etc. I modi per aggirare l'ostacolo dovrebbero esserci... In alternativa, potresti trasformare i link del menu in mini form con metodo post e campi hidden con quelle variabili: è una soluzione spartana, ma funzionerebbe sicuramente; certo, poi devi richiamare le variabili con $_POST o, al limite, con $_REQUEST...

netmaster
Linux 0.x
Linux 0.x
Messaggi: 9
Iscritto il: gio 4 giu 2015, 17:19

Re: meta tag dinamici con PHP

Messaggio da netmaster »

In effetti il sito è struttutato con un sistema modulare. Nelle pagine viene incluso un file config, un header e un footer. Varia solo il contenuto delle singole pagine.

La variante proposta da aschenaz mi sembra complesssa e laboriosa perchè dovrei cambiare le impostazioni per tutte le pagine del sito che funzionano bene col sistema adottato. Invece che creare delle pagine a cascata con $_GET per le notizie, come ho detto sopra, aggiungo una pagina dedicata con richiamo $_GET in primo livello e basta.

Voglio, comunque nuovamente SOTTOLINEARE la mia gratitudine per essere intervenuti in questa discussione dedicandomi parte del vostro tempo. Veramente GRAZIE di tutto cuore.

Rispondi