Pagina 1 di 1

meta tag dinamici con PHP

Inviato: gio 4 giu 2015, 18:22
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");
?>

Re: meta tag dinamici con PHP

Inviato: gio 11 giu 2015, 17:10
da netmaster
Nessuno cha sappia aiutarmi come fare? :-k

Re: meta tag dinamici con PHP

Inviato: gio 11 giu 2015, 17:46
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... :)

Re: meta tag dinamici con PHP

Inviato: gio 11 giu 2015, 19:40
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.

Re: meta tag dinamici con PHP

Inviato: gio 11 giu 2015, 21:10
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

Re: meta tag dinamici con PHP

Inviato: ven 12 giu 2015, 16:47
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>

Re: meta tag dinamici con PHP

Inviato: dom 14 giu 2015, 12:13
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... :)

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 7:05
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.

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 8:00
da aschenaz
Una curiosità: c'è un particolare motivo perchè usi la forma case($pagina=="nomepagina"): e non semplicemente case "nomepagina":?

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 8:35
da netmaster
No, nessun motivo particolare. Si può fare in entrambi i modi, il risultato è lo stesso.

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 9:33
da aschenaz
Ah, è che io sono un fanatico della leggerezza del codice o, come si dice in ambito ciclistico, un "grammomaniaco". :D

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 13:48
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 :)

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 13:59
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...

Re: meta tag dinamici con PHP

Inviato: lun 15 giu 2015, 19:17
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.