Richiamare pagine.php in modo dinamico

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Buongiorno,
sto realizzando un sito in cui vi sono delle parti fisse (header, footer ) e delle parti che variano e che ho inserito in tabelle nel database come il menù e il contenuto centrale della pagina che varia a seconda della voce di menù cliccata. Per quanto riguarda il menù sono riuscita ad estrarlo dal database e a visualizzare le voci sul sito, mentre il dubbio che ho è sul contenuto, cioè le pagine.php : devo inserirle nel database? e se si come? (come testo?) e poi come far si che per es. al click del "menu home" mi compaia la pagina "home.php?"

Spero di essere stata chiara
Grazie
 
Inserire le pagine in un database può essere utile se poi hai intenzione di creare un pannello attraverso cui amministrare tali pagine. In quel caso le salvi come formato testo (ti suggerisco di usare Markdown) e successivamente le recuperi tramite l'ID o lo slug (il nome SEO-friendly).
 
Ciao, io di solito faccio cosi:

Creo un file di nome tema.php dove inserisco le parti del tema che non cambiano mai nel sito, esempio:

PHP:
<?php
	function menu() {
?>
	<div id="menu">
		<ul>
			<li><a href="#">link1</a></li>
			<li><a href="#">link2</a></li>
			<li><a href="#">link3</a></li>
		</ul>
	</div>
<?php
}
?>
<?php 
<?php
	function footer() {
?>
  <div id="footer">
      CONTENUTO FOOTER 
  </div>
<?php
}
?>

Una volta preparato il file tema.php, ti basta solo richiamare la funzione nella pagina che ti serve esempio:

PHP:
<?php include_once("include/tema.php"); ?>
<html>
<head>
</head>
<body>
<div id="header">
<?php menu() ?>
</div>
<div id="wrapper">
	<!-- CONTENUTO PAGINA -->
</div>
<?php footer() ?>
</body>
</html>
Cosi, se devi modificare un link del menu ti basta aprire il file tema.php e fare la modifica, cosi tutti i cambiamenti saranno validi per tutte le pagine del sito.
 
Ultima modifica:
Per inserire i contenuti direttamente nel database puoi seguire questo nostro tutorial, se non ti interessa la parte dei commenti puoi non inserirla.
 
Ciao, io di solito faccio cosi:

Creo un file di nome tema.php dove inserisco le parti del tema che non cambiano mai nel sito, esempio:

PHP:
<?php
	function menu() {
?>
	<div id="menu">
		<ul>
			<li><a href="#">link1</a></li>
			<li><a href="#">link2</a></li>
			<li><a href="#">link3</a></li>
		</ul>
	</div>
<?php
}
?>
<?php 
<?php
	function footer() {
?>
  <div id="footer">
      CONTENUTO FOOTER 
  </div>
<?php
}
?>

Una volta preparato il file tema.php, ti basta solo richiamare la funzione nella pagina che ti serve esempio:

PHP:
<?php include_once("include/tema.php"); ?>
<html>
<head>
</head>
<body>
<div id="header">
<?php menu() ?>
</div>
<div id="wrapper">
	<!-- CONTENUTO PAGINA -->
</div>
<?php footer() ?>
</body>
</html>
Cosi, se devi modificare un link del menu ti basta aprire il file tema.php e fare la modifica, cosi tutti i cambiamenti saranno validi per tutte le pagine del sito.

Grazie Bivio,
però anche il menù lo gestisco da database ed inoltre voglio caricare le pagine sulla stessa index.php modificando solo la parte centrale per questo non posso fare come dici tu. A meno che è propio il discorso di voler gestire tutto su una pagina caricando le altre pagine che è sbagliato...
 
Inserire le pagine in un database può essere utile se poi hai intenzione di creare un pannello attraverso cui amministrare tali pagine. In quel caso le salvi come formato testo (ti suggerisco di usare Markdown) e successivamente le recuperi tramite l'ID o lo slug (il nome SEO-friendly).

Ma se la inserisco come testo nel database qual è la query che mi consente di richiamarla in modo dinamico in base all'id? va fatto un include?
 
Supponiamo che memorizzi le pagine nella tabella pagine. Crei una pagina pagina.php (scusa i giochi di parole :D) e scrivi qualcosa simile a questo:
PHP:
<?php
mysql_connect('localhost', 'root', 'pass') or die(mysql_error());
mysql_select_db('database') or die(mysql_error());

$id = isset($_GET['id']) ? (int)$_GET['id'] : 0;

$sql   = sprintf('SELECT * FROM pagine WHERE id = %d', $id);
$query = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($query) == 0) {
    header('HTTP/1.0 404 Not Found');
    die('Pagina non trovata!');
}

$row = mysql_fetch_assoc($query);

echo $row['contents'];
?>
 
Mi da questo errore:
Warning: Cannot modify header information - headers already sent by (output started at /Applications/XAMPP/xamppfiles/htdocs/vimer 2/index.php:1) in /Applications/XAMPP/xamppfiles/htdocs/vimer 2/index.php on line 101
Pagina non trovata!

e comunque non riesco a capire il nesso tra il contenuto inserito nella tabella e la pagina da includere nel contenitore..
Ma se pensassi ad un include dinamico pensi sia possibile?
cmq ti metto il codice magari puoi consigliarmi meglio :D

PHP:
<?php
	if (!isset($_GET["menuid"]))
	{
		$IdMenu = "";
		$Nome_Menu = "Homepage";
	}
	else
	{
		$IdMenu = $_GET["menuid"];	
	}
<?php include('include/Connetti.php'); ?>
<body>
 <img class="bg" src="immagini/image1.jpg" width="1680" height="1050" />
 
 <div id="contenitore_sito">

<?php include('include/header.php'); ?>

	<div id="corpo_centrale">
		<div id="col_sin">
    
	<?php
                $Risultato=mysql_query("select * from tblmenu order by Posizione", $conn);
                if (!$Risultato)
                {
                    die("La tabella selezionata non esiste " . mysql_error());
                }
                
                while ($riga=mysql_fetch_array($Risultato))
                {
            	   if ($IdMenu <> $riga[ID])
				   {
				   echo "<ul id='menu'><li><a href='index.php?menuid=" . $riga[ID]. "'>" . $riga[Nome_menu] . "</li></a></ul>";
				   }
				   else
				   {
				   $Nome_Menu = $riga[Nome_menu];
				   echo "<ul id='menu'><li>" . $riga[Nome_menu] . "</li></ul>";
				   }
			    }
            ?> 
          
 
        
       <?php include('include/info.php'); ?> 
   </div> 
    <div id="centro">
     <?php
                $Query = "SELECT * FROM tblcontenuti ";
				$Query .= "WHERE ID_MENU = " . $IdMenu;
				$Risultato=mysql_query($Query, $conn);
                if (!$Risultato)
                {
                   die("La pagina selezionata non contiene alcun valore e/o testo ");
                }
                
                while ($riga=mysql_fetch_array($Risultato))
                {
				   echo "<p>" . $riga[Contenuto] . "</p>";// questa è il contenuto della tabella ma me lo aggiunge come testo non come pagina.php...come fare?
			    }
            ?> 
	   
	  

    </div>

               
 </div>


<?php include('include/footer.php'); ?>


</div>
</div>
<?php include('include/Chiudi.php'); ?>

</body>
</html>
?>
 
Allora spaero di essere piu' chiara.
Quello che voglio e' che al posto della riga commentata ( guarda sopra) anziche il testo mi compaia (dinamicamente in base alla voce di menu cliccata) la pagina corrispondente. Es: se clicco Home mi compare Home.php e non come ora il testo home
Per quello chiedevo se e' possibile fare un include dinamico
Se non hai capito dimmelo pure... Cerchero' di spiegarmi meglio :D
 
Da quello che ho capito io tu vuoi inserire le tue pagine in un database e poi, tramite l'URL, visualizzarle. Giusto?
Con il sistema attuale, digitando http://www.example.com/index.php?menuid=1, visualizzi la pagina con ID 1.
Tu invece cosa vuoi fare?

Esatto esatto :D
adesso digitando come dici tu http://www.example.com/index.php?menuid=1 visualizzo la pagina index con il menu ma senza contenuto. Il menuid è usato per estrarre il menu e non le pagine io vorrei anche utilizzare un parametro che mi faccia visualizzare anche le pagine
Praticamente menuid=1 mi estrae la voce menu Finestre
menuid=2 mi estrae la voce menu Serramentisti
menuid=3 mi estrae la voce menu Notizie
menuid=3 mi estrae la voce menu Contatti

adesso vorrei che pero'al click della voce mi inserisca nel contenitore centrale le pagine e non so come fare mannaggia....:(
Ho provato ad inserire un altro valore da passare tramite il get ( tipo pagina) ma non riesco
 
Allora hai sbagliato a chiamare la tabella contenente i menù tblcontenuti. Piuttosto, chiama main_menu quella contenente il menù di navigazione principale, e page_menu quella contenente i menù di navigazione delle singole pagine. Adesso, crea una nuova tabella pages che conterrà i contenuti delle pagine. Per identificarle puoi usare lo stesso ID che usi in page_menu, così non hai bisogno di inserire un altro parametro GET nell'URL.
 
ma perche' devo creare 3 tabelle. io ho due tabelle TblMenu per le voci menu con campi Id, Menu e Posizione e la tabella TblContenuti ( che posso correggere in TblPagine) con 3 campi: Id, ID_Menu, e Pagine. ID_Menu collega le due tabelle e nel campo Pagine e' inserito il campo testo della pagina che voglio visualizzare.. fin qui dici che va bene il ragionamento?
 
ciao
scusate se mi intrometto.
una curiosità, potresti postare un esempio del contenuto di

$riga['Contenuto']

p.s.
le chiavi dellgli array andrebbero scritti con gli apici
 
ciao
scusate se mi intrometto.
una curiosità, potresti postare un esempio del contenuto di

$riga['Contenuto']

p.s.
le chiavi dellgli array andrebbero scritti con gli apici

Ciao,
figurati...anzi ...ogni input è benvenuto :D
adesso è diventata $riga['Pagine']

Un esempio del contenuto $riga['Pagine'] é contatti.php

P.s. ma si possono passare due parametri contemporaneamente ad una pagina? es: menuid e pagina con il get ?
e se si come?
 
Adesso il codice è questo:

PHP:
<?php
                $Risultato=mysql_query("select * from tblmenu order by Posizione", $conn);
                if (!$Risultato)
                {
                    die("La tabella selezionata non esiste " . mysql_error());
                }
                
                while ($riga=mysql_fetch_array($Risultato))
                {
            	   if ($IdMenu <> $riga[ID])
				   {
				   echo "<ul id='menu'><li><a href='index.php?menuid=" . $riga[ID]. "'>" . $riga['Nome_menu'] . "</a></li></ul>";//qui mi estrae il menù ed è ok
				   }
				   else
				   {
				   $Nome_Menu = $riga[Nome_menu];
				   echo "<ul id='menu'><li>" . $riga['Nome_menu'] . "</li></ul>";
				   }
			    }
            ?> 
          
 
        
       <?php include('include/info.php'); ?> 
   </div> 
    <div id="centro">
     <?php
                $Query = "SELECT * FROM TblPagine ";
				$Query .= "WHERE ID_MENU = " . $IdMenu;
				$Risultato=mysql_query($Query, $conn);
                if (!$Risultato)
                {
                   die("La pagina selezionata non contiene alcun valore e/o testo ");
                }
                
                while ($riga=mysql_fetch_array($Risultato))
				 if ($IdPagina <> $riga['ID_Menu'])
                {
				    
					 
					  echo "<a href='index.php?pagina=" . $riga['ID_Menu']. "'>" . $riga['Pagine'].  "</a>";// qui dovrebbe estrarmi la pagina.php ma mi estrae il link e non mi trova la pagina.... QUESTA RIGA è IL MIO GRANDE PROBLEMA
			    }
				 else
				   {
				  
				   include ('home.php');
				   }
			    
            ?>
 
Credo che questo sia semi-funzionante:
PHP:
<?php
$pagina = isset($_GET['pagina']) ? (int)$_GET['pagina'] : 1;

require_once __DIR__ . '/include/Connetti.php';

echo <<<EOF
<body> 
    <img class="bg" src="immagini/image1.jpg" width="1680" height="1050" /> 
    <div id="contenitore_sito"> 
EOF;

require_once __DIR__ . '/include/header.php';

echo <<<EOF
        <div id="corpo_centrale"> 
            <div id="col_sin">
EOF;

$sql = 'SELECT * FROM tblmenu ORDER BY posizione';
$query = mysql_query($sql) or die(mysql_error());

echo <<<EOF
                <ul id="menu">
EOF;
                
while ($row = mysql_fetch_assoc($query)) {
    if ($pagina != $row['id']) {
        echo "<li><a href=\"{$_SERVER['PHP_SELF']}?pagina={$row['id']}\">{$row['nome_menu']}</a></li>";
    } else {
        echo "<li>{$row['nome_menu']}</li>";
    }
}

require_once __DIR__ 'include/info.php';

echo <<<EOF
            </div>
            
            <div id="centro">
EOF;

$sql = sprintf('SELECT * FROM tblpagine WHERE id = %d', (int)$pagina);
$query = mysql_query($sql) or die(mysql_error());

if (mysql_num_rows($query) == 0) {
    require_once 'home.php';
} else {
    $row = mysql_fetch_assoc($query);
    require_once __DIR__ . "/{$row['pagine']}.php";
}
?>
Il tuo problema comunque è l'intera struttura del database... Perché hai due tabelle separate per le pagine ed i menù?
 

Discussioni simili