2013-02-17 13 views
9

E 'questo il modo più efficace per utilizzare Smarty con più pagine ?:modo migliore per utilizzare più pagine su Smarty

if(empty($_GET[page])) { 
$template="home.tpl"; 
$smarty->assign('pagename', ' - Home'); 
}else { 
$page = $_GET["page"]; 
switch ($page) { 
     case "home": 
      $template="home.tpl"; 
      $smarty->assign('pagename', ' - Home'); 
      break; 
     case "contact": 
      $template="contact.tpl"; 
      $smarty->assign('pagename', ' - Contact us'); 
      break; 
     case "verify": 
      $template="verify.tpl"; 
      $smarty->assign('pagename', ' - Verify your account'); 
      break; 
     default: 
      $template="404.tpl"; 
      break; 
    } 

} 

$smarty->assign('sitename', $sitename); 
$smarty->display($template); 

Che cosa succede se ho "log-in" e "area utenti" e tutto ciò? Come posso far sì che ognuno faccia le proprie funzioni in modo pulito?

+1

Smarty è solo un motore di template, ma non si preoccupa 'come' o 'perché' la pagina viene caricata. Quello che stai facendo è un controller di front end. Di solito ciò che le persone faranno è instradare una richiesta (uri) a uno specifico controller-> metodo piuttosto che caricare direttamente i template come si sta facendo attualmente. Detto questo, non c'è niente di sbagliato nel modo in cui lo stai facendo. – Supericy

+0

È buono, mantienilo così. – sofl

risposta

3

Sì,

Forse è possibile aggiornare la variabile $ page al seguente:

<?php $page =(isset($_GET['page'])) ? $_GET['page']: ''; ?>

Ma il modo in cui si sta modificando le pagine con un frontcontroller è la buona strada. Puoi fare un po 'di aggiornamento ... Il mio flusso di lavoro;

  1. Visualizzare il file index.html e caricare nel frontcontroller altri file TPL/HTML in tale file index.htm.

Qualcosa di simile:

$content = ""; 
$page =(isset($_GET['page'])) ? $_GET['page']: ''; 

// FRONTCONTROLLER 
    switch ($page) { 
     case 'stack': 
      require_once('includes/stack.php'); 
      $content = getContent(); 
      break; 

     case 'overflow': 
         require_once('includes/overflow.php'); 
      $content = "overflow...."; 
      break; 

     case default: 
         $content = "blalala"; 
         break; 




$smarty->assign('page',$page); 
$smarty->assign('content',$content); 
$smarty->display('index.htm'); 
0

Questa è la mia principale Index.php usando Smarty Templating. In questa pagina includo un widget di login JQuery quando attivato nel pannello di amministrazione. $ sel è la tua pagina $.

Passa attraverso un interruttore in caso aggiungo più visualizzazioni per la pagina di indice, ad esempio una visualizzazione di pubblicità per coloro che ottengono lì attraverso un annuncio google. Quindi la pubblicità può collegarsi a? Sel = googlead1 e posso visualizzare una pagina basata su questo.

io chiamo la mia classe di autentificazione e caricare l'utente (metodo chiamato rinfresca la sua presenza in loco, quindi la sua non inutile)

Poi ho caricare la pagina selezionata attraverso una chiamata di funzione. Successivamente, esco dall'esecuzione del codice.

Nella funzione, chiamo un widget condiviso per più pagine che consente all'utente di accedere tramite un pannello JQuery. Questo ottiene la pagina.

include "./include/includes.php"; 

$sel=null; 
if(isset($_POST["sel"]) or isset($_GET["sel"])) 
{ 
    $sel =isset($_POST["sel"])?$_POST["sel"]:$_GET["sel"]; 
} 

$auth = new authentification($dbconn, "", "",""); 
$user = $auth->checkuser(); 

switch($sel){ 
    default: IndexPage(); 
} 
exit; 

function IndexPage(){ 
    global $smarty, $lang, $config; 

    //load the text for the login 
    $smarty->assign("text", $lang["basiclogin"]); 

    if($config["auth_widget"] == "true") 
    { 
     $smarty->assign("auth_widget",getAuthWidget()); 
    } 
    //display the whole index page 
    $smarty->display($config["index_theme_path"]."/index_page.tpl"); 
    exit; 
} 

Nel index_page.tpl effettivo passo per caricare il widget in questo modo:

{if isset($auth_widget)} 
<div id="auth_widget" style="float:right;"> 
    {$auth_widget} 
</div> 
{/if} 

Spero che questo aiuti mostrare un altro modo per organizzare il codice con Smarty (che è davvero impressionante a mio parere)

Modifica: questa è la funzione getAuthWidget condivisa: si noti che utilizza il recupero anziché la visualizzazione.

/** 
* Allows various pages to get the authentification widget if desired 
* @global Object $smarty 
* @global Array $lang 
* @global Array $config 
* @global Array $user 
* @return Page returns the fetched template widget 
*/ 
function getAuthWidget($err = ""){ 
    global $smarty, $lang, $config, $user; 

    $smarty->assign("text", $lang["basiclogin"]); 
    //check if user is loaded, if not, throw error 
    if(isset($user) && $user["id"] >= -1) 
    { 
     $smarty->assign("user", $user); 
    } 
    else 
    { 
     echo "user not set"; 
     exit; 
    } 

    return $smarty->fetch($config["index_theme_path"]."/auth_widget.tpl"); 
} 
0

La mia migliore opzione:

<?php 
    $pages = array(
     "home" => array("home.tpl", " - Home"), 
     "contact" => array("contact.tpl", " - Contact us"), 
     "verify" => array("verity.tpl"), " - Verify your account"), 
     "e404" => array("404.tpl", " - Page not fount") 
    ); 

    $pag_selected = $pages["e404"]; 
    if(isset($_GET["page"]) && isset($pages[$_GET["page"]])): 
     $pag_selected = $pages[$_GET["page"]]; 
    endif; 
    $smarty->assign('pagename', $pag_selected[1]); 
    $smarty->display($pag_selected[0]); 
?> 
+0

Uso di matrici multidimensionali il cui contenuto ha significati diversi ... Si tratta di una classe fortemente tipizzata. ('Template',' TemplateInfo', ecc.) – EthanB