2013-02-17 49 views
9

Đây có phải là cách hiệu quả nhất để sử dụng smarty với nhiều trang ?:Cách tốt nhất để sử dụng nhiều trang trên 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); 

gì nếu tôi có "đăng nhập" và "khu vực người dùng" và tất cả mọi thứ? Làm thế nào tôi có thể làm cho họ từng làm các chức năng riêng của họ một cách sạch sẽ?

+1

Smarty chỉ là một cỗ máy template, nó không quan tâm 'cách' hoặc 'tại sao' trang web được tải. Những gì bạn đang làm là tạo một bộ điều khiển giao diện người dùng. Thông thường những gì mọi người sẽ làm là định tuyến một yêu cầu (uri) đến một phương thức controller-> cụ thể hơn là tải trực tiếp các mẫu như bạn hiện đang làm. Điều đó đang được nói, không có gì sai với cách bạn đang làm nó. – Supericy

+0

Tốt, giữ nó như thế này. – sofl

Trả lời

3

Vâng,

Có lẽ bạn có thể cập nhật các biến $ page như sau:

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

Nhưng cách bạn đang thay đổi trang với một frontcontroller là cách tốt. Bạn có thể thực hiện một số nâng cấp ... Luồng công việc của tôi;

  1. Hiển thị tệp index.html và tải trong bảng điều khiển phía trước các tệp TPL/HTML khác trong tệp index.htm đó.

Cái gì như:

$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

Đây là index.php chính của tôi sử dụng Smarty Templating. Trong trang này tôi bao gồm một widget đăng nhập JQuery khi được kích hoạt trong bảng quản trị. $ sel là trang $ của bạn.

Nó đi qua một chuyển đổi trong trường hợp tôi thêm nhiều lượt xem hơn cho trang chỉ mục, ví dụ như chế độ xem công khai cho những người đến đó mặc dù quảng cáo trên google. Vì vậy, công khai có thể liên kết đến? Sel = googlead1 và tôi có thể hiển thị một trang dựa trên đó.

tôi gọi lớp xác thực của tôi và tải người sử dụng (phương pháp gọi là làm mới sự hiện diện của mình trên trang web để nó không vô dụng)

Sau đó, tôi tải trang lựa chọn thông qua một lời gọi hàm. Sau đó tôi thoát khỏi thực thi mã.

Trong hàm, tôi gọi một tiện ích được chia sẻ cho một số trang cho phép người dùng đăng nhập thông qua bảng điều khiển JQuery. Điều đó nhận được trang.

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

Trong index_page.tpl thực tế tôi tải widget như vậy:

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

Hope this helps hiển thị một cách khác để tổ chức mã của bạn với Smarty (đó là thực sự tuyệt vời trong quan điểm của tôi)

Chỉnh sửa: Đây là hàm getAuthWidget được chia sẻ - thông báo nó sử dụng tìm nạp thay vì hiển thị.

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

lựa chọn tốt nhất của tôi:

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

Sử dụng mảng đa chiều có nội dung có ý nghĩa khác nhau ... Điều này đặt ra một lớp được đánh máy mạnh mẽ. ('Template',' TemplateInfo', v.v.) – EthanB

Các vấn đề liên quan