2013-02-17 2 views
9

Это наиболее эффективный способ использования Smarty с несколькими страницами ?:Лучший способ использования нескольких страниц на 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); 

Что делать, если у меня есть «вход в систему» ​​и «область пользователя» и все? Как я могу заставить их каждый выполнять свои собственные функции чисто?

+1

Smarty просто шаблонный движок, он не заботится «как» или «почему» страница загружена. Что вы делаете, это сделать контроллер передней панели. Обычно то, что люди будут делать, - это маршрут запроса (uri) к определенному методу controller->, а не напрямую загружать шаблоны, как вы сейчас делаете. Это, как говорится, нет ничего плохого в том, как вы это делаете. – Supericy

+0

Хорошо, держи это так. – sofl

ответ

3

Да,

Может быть, вы могли бы обновить переменную $ страницы на следующее:

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

Но, как вы меняете страницы с FrontController является хорошим способом. Вы можете выполнить некоторую модернизацию ... Мой рабочий процесс;

  1. Показать файл index.html и загрузить в frontcontroller другие файлы TPL/HTML в этом файле index.htm.

Что-то вроде:

$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

Это мой главный Index.php с помощью Smarty шаблонов. На этой странице я включаю виджет входа в JQuery, когда активирован в панели администратора. $ sel - ваша $ страница.

Он проходит через коммутатор. Я добавляю больше просмотров для индексной страницы, например, в виде рекламы для тех, кто попадает туда, хотя есть реклама Google. Таким образом, реклама может ссылаться на? Sel = googlead1, и я могу отобразить страницу на основе этого.

Я называю свой класс и загрузить подлинности пользователя (метод, называемый обновит его присутствие на сайте, чтобы его не бесполезна)

Затем я загрузить выбранную страницу с помощью вызова функции. После этого я выхожу из выполнения кода.

В этой функции я вызываю общий виджет для нескольких страниц, что позволяет пользователю входить в систему через панель JQuery. Это получает страницу.

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

В реальной index_page.tpl я загрузить виджет так:

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

Надежда это помогает показать еще один способ организовать свой код с Smarty (который является действительно удивительным, на мой взгляд)

Редактирование: вот общая функция getAuthWidget - обратите внимание, что вместо отображения отображается выборка.

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

Мой лучший вариант:

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

Использование многомерных массивов, содержимое которых имеет разные значения ... Это вызывает строго типизированный класс. ('Template',' TemplateInfo' и т. Д.) – EthanB

Смежные вопросы