2013-02-17 11 views
9

Jest to najbardziej skuteczny sposób na wykorzystanie smarty z wielu stron ?:Najlepszy sposób na wykorzystanie wielu stron na 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); 

Co jeśli mam „Zaloguj” i „obszar użytkownika” i wszystko? Jak mogę sprawić, by każdy z nich wykonywał swoje własne funkcje w czysty sposób?

+1

Smarty jest tylko silnik szablonów, to nie obchodzi „jak” i „dlaczego” strona jest ładowana. To, co robisz, to tworzenie kontrolera frontowego. Zwykle to, co ludzie robią, polega na kierowaniu żądania (uri) do konkretnej kontrolki-> metody, a nie bezpośrednio ładują szablony takie jak obecnie. Biorąc to pod uwagę, nie ma nic złego w sposobie, w jaki to robisz. – Supericy

+0

To dobrze, zachowaj to w ten sposób. – sofl

Odpowiedz

3

Tak,

Może zaktualizować zmienną $ stronę do następujących:

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

Ale sposób, w jaki zmieniają stron o FrontController jest dobrym sposobem. Możesz dokonać aktualizacji ... Mój przepływ pracy;

  1. Wyświetl plik index.html i wczytaj do kontrolera frontowego inne pliki TPL/HTML w tym pliku index.htm.

Coś jak:

$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

To jest mój główny index.php użyciu szablonów Smarty. Na tej stronie umieszczam widżet logowania JQuery po uaktywnieniu w panelu administracyjnym. $ sel to twoja strona $.

Przechodzi przez Switch incase Dodaję więcej widoków do strony indeksu, na przykład widok reklamy dla tych, którzy dostają się tam przez reklamę google. Więc reklama może prowadzić do? Sel = googlead1 i mogę wyświetlić na tej podstawie stronę.

nazywam moją klasę uwierzytelniania i załadować użytkownika (metoda zwana odświeża swoją obecność na miejscu, tak więc jej nie bezużyteczne)

Potem załadować wybraną stronę poprzez wywołanie funkcji. Następnie kończę wykonywanie kodu.

W funkcji wywołuję udostępniony widget dla kilku stron, który pozwala użytkownikowi zalogować się za pośrednictwem panelu JQuery. To dostaje stronę.

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; 
} 

W rzeczywistej index_page.tpl załadować widżet tak:

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

Hope this helps pokazują inny sposób organizowania kodu z Smarty (co jest naprawdę niesamowite moim zdaniem)

Edytuj: Oto udostępniona funkcja getAuthWidget - zauważ, że używa pobierania zamiast wyświetlania.

/** 
* 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

Moja najlepsza opcja:

<?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

Używanie tablic wielowymiarowych, których zawartość ma różne znaczenia ... To prosi klasy o silnym typie. ('Szablon',' SzablonInfo' itp.) – EthanB

Powiązane problemy