2016-03-09 3 views
0

J'utilise le moteur de template Smarty pour mon site web. Ce que j'essaie de faire est d'inclure mon navbar.tpl dans mon homepage.tpl. chaque fichier tpl a un fichier php qui remplit leurs variables avec:inclure le modèle en utilisant smarty

$smarty->assign('{the var name}', "{the value}"); 

il ne fonctionne pas si j'ouvre seulement ma page d'accueil, mais quand j'inclure ma barre de navigation en utilisant:

{include 'NavBar.tpl'} 

il comprend mon menu mais les vars qui doivent être remplis de mon dossier NavBar.php ici ne se rempli pas mon fichier navbar.php:

<?php 
include_once '../Models/DAO/Database.php'; 
include_once '../Models/category.php'; 
require_once '../smarty-3.1.29/libs/Smarty.class.php'; 


$smarty = new Smarty(); 

$smarty->template_dir = '../Views'; 
$smarty->compile_dir = '../tmp'; 

$categories = array(); 

$db = Database::getInstance(); 
$mysqli = $db->getConnection(); 
$sql_query = "select * from categories"; 
$result = $mysqli->query($sql_query); 

while ($row = $result->fetch_object('category')){ 
    array_push($categories, $row); 
} 


//assign vars 
$smarty->assign('categories', $categories); 

$smarty->display('NavBar.tpl'); 
?> 

et voici mon fichier navbar.tpl:

<nav class="navbar navbar-default"> 
    <div class="container-fluid"> 
    <div class="navbar-header"> 
     <a class="navbar-brand" href="Home.php"><img class="logo" alt="Logo" src="../views/images/logo.png"></a> 
    </div> 
    <ul class="nav navbar-nav"> 
     <li class="active"><a href="Home.php">Home</a></li> 
     <li class="dropdown"> 
     <a class="dropdown-toggle" data-toggle="dropdown" href="#">Producten 
     <span class="caret"></span></a> 
     <ul class="dropdown-menu"> 

     {foreach from=$categories item=categorie} 
     <li><a href="product_list.php?categorie={$categorie->name}">{$categorie->name}</a></li> 
     {/foreach} 
     </ul> 
     </li> 
     <li><a href="About.php">About</a></li> 
    </ul> 
    </div> 
</nav> 

et l'appel réel à homepage.tpl:

<div id="wrap"> 
     {include '../views/NavBar.tpl'} 
    </div> 

le fichier homepage.php:

<?php 
include_once '../Models/DAO/Database.php'; 
include_once '../Models/product.php'; 
require_once '../smarty-3.1.29/libs/Smarty.class.php'; 


$smarty = new Smarty(); 

$smarty->template_dir = '../Views'; 
$smarty->compile_dir = '../tmp'; 

//declare vars 
$categorieName = ""; 
$products = array(); 

//load vars 
if (isset($_GET['categorie'])){ 
    $categorieName = $_GET['categorie']; 
    $db = Database::getInstance(); 
    $mysqli = $db->getConnection(); 
    $sql_query = "select * from products where categories_category_id = (Select category_id from categories where `name` =".'"'.$categorieName.'")'; 
    $result = $mysqli->query($sql_query); 

    while ($row = $result->fetch_object('product')){ 
     array_push($products, $row); 
    } 
} 
//assign vars 
$smarty->assign('categorie', $categorieName); 
$smarty->assign('products', $products); 

$smarty->display('homepage.tpl'); 


?> 

personne ne sait comment forcer le navbar.php à remplir les vars dans navbar.tpl, on dirait que navbar.tpl ne connaît pas le fichier php mais quand j'inclus le fichier php il affiche le fichier en texte brut.

+0

Pouvez-vous afficher le code de votre fichier homepage.php? – newman

+0

@newman a ajouté le fichier homepage.php;) btw: la requête et les résultats fonctionnent sur la page d'accueil – Ferryzijl

Répondre

1

Je pense que vous ne comprenez pas comment fonctionne le modèle Smarty. Les modèles n'appellent pas les fichiers PHP. Pour exemple, vous vous pouvez modifier à navbar.php suivant:

$categories = array(); 

$db = Database::getInstance(); 
$mysqli = $db->getConnection(); 
$sql_query = "select * from categories"; 
$result = $mysqli->query($sql_query); 

while ($row = $result->fetch_object('category')){ 
    array_push($categories, $row); 
} 
//assign vars 
$smarty->assign('categories', $categories); 

Dans ce fichier, vous remplissez simplement tableau pour la barre de navigation et d'assigner vars pour le modèle.

Ensuite, modifiez homepage.php. Juste inclure navbar.php, par exemple, avant //declare vars dans ce fichier. Dans homepage.php vous incluez tous les fichiers nécessaires, puis init Smarty, puis incluez navbar.php avec l'initialisation des catégories et ensuite la tâche principale de ce script.

Vous devez inclure navbar.php dans tous les fichiers php où vous souhaitez utiliser le modèle navbar.tpl.

Lorsque vous appelez $smarty->display('homepage.tpl'); alors Smarty show template homepage.tpl andd inclure le modèle avec navbar. mais des variables pour les templates que vous devriez assigner à PHP.

+0

qui a fonctionné! thnx! – Ferryzijl