|
|
|
ขอแนวทางการศึกษา หรือ E book เกี่ยวกับ Smarty Template Engine ด้วยครับ |
|
|
|
|
|
|
|
doc http://www.smarty.net/documentation
App http://www.smarty.net/sampleapp1
เทมเพลตก็ออกแบบปกติเหมือนตอนออกแบบหน้า html หรือจะใช้แท็กของ smarty หมดก็ได้ หรือจะใช้แท็ก html เดิมก็ได้ แล้วเซพเป็น .tpl
หรือหาก มีการ include ก็เขียน {include file="header.tpl"} เป็นต้น
การติดต่อฐานข้อมูลใช้ pdo เขียนคลาสเพิ่มเติมเพื่อให้ใช้ง่ายเช่น หรือจะใช้ pdo เลยก็ได้
index.php
define('WEB_BASE', str_replace('\\','/',str_replace('//','/',dirname(__FILE__))."/"));
define('THEME', "http://".$_SERVER['SERVER_NAME']."/templates");
define('THEME_DIR', WEB_BASE."/templates");
class MyDB extends Smarty{
var $dbtype = 'mysql';
// PDO database name
var $dbname = 'test';
// PDO database host
var $dbhost = 'localhost';
// PDO database username
var $dbuser = 'root';
// PDO database password
var $dbpass = '12345';
// PDO database charset
var $charset = 'utf8';
function __construct() {
parent::__construct();
$this->template_dir = WEB_BASE . 'templates';
$this->compile_dir = WEB_BASE . 'templates_c';
$this->config_dir = WEB_BASE . 'configs';
$this->cache_dir = WEB_BASE . 'cache';
}
public function openConnect(){
// instantiate the pdo object
try {
$dsn = "{$this->dbtype}:host={$this->dbhost};dbname={$this->dbname};charset={$this->charset}";
$this->pdo = new PDO($dsn,$this->dbuser,$this->dbpass);
$this->pdo->query("SET NAMES '{$this->charset}'");
$this->pdo->query("SET character_set_results={$this->charset}");
$this->pdo->query("SET character_set_client={$this->charset}");
$this->pdo->query("SET character_set_connection={$this->charset}");
return $this->pdo;
} catch (PDOException $e) {
print "Error!: " . $e->getMessage();
die();
}
}
public function closeConnect($conn=""){
$conn=null;
$this->pdo=null;
}
//Add edit delete
public function queryData(){
try {
$rs=$this->pdo->exec($this->sql);
if($rs>0){return true;}else{return false;}
$rs=null;
}catch (PDOException $e) {return $e->getMessage();}
}
//List
public function executeData(){
try {
$rs = $this->pdo->prepare($this->sql);
$rs->execute();
$rs->setFetchMode(PDO::FETCH_ASSOC);
return $rs;
}catch (PDOException $e) {return $e->getMessage();}
}
public function numrowData($select_table){
try {
$rs = $this->pdo->prepare("select count(*) as total from $select_table");
$rs->execute();
$rs->setFetchMode(PDO::FETCH_ASSOC);
foreach($rs as $key=>$rec){$total_rs=$rec["total"];}
return (int)$total_rs;
$rs=null;$select_table=null;$key=null;$rec=null;$total_rs=null;
}catch (PDOException $e) {echo $e->getMessage();}
}
}
//Ex
$app=new MyDB;
$app->openConnect();
$mId=1;
//Add
//$app->sql="insert into member() values()";
if($app->queryData()==true){
// add success
// app->assign("addSuccess",true);
}else{
//add failed
// app->assign("addSuccess",false);
}
//list member
$app->sql="select * from member where mem_id=".$mId;
$objRs=$app->executeData();
app->assign("objRs",$objRs);
// เขียนเงื่อนไขเพิ่มเติมเอาเพื่อที่จะให้แสดงหน้าไหน เช่น รับค่าจาก url เป็น page=list-member ก็ให้แสดง $app->display("list-member.tpl");
// หรือ รับค่า เป็น page=list-admin ก็ให้แสดง $app->display("list-admin.tpl"); เป็นต้น
$app->display("list-member.tpl");
หน้า list-member.tpl
<table width="100%" border="0" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td align="center" bgcolor="#ebebeb">No.</td>
<td align="center" bgcolor="#ebebeb">Username</td>
<td align="center" bgcolor="#ebebeb">Password</td>
<td align="center" bgcolor="#ebebeb">Name</td>
<td align="center" bgcolor="#ebebeb">Email</td>
<td align="center" bgcolor="#ebebeb">Phone</td>
<td align="center" bgcolor="#ebebeb">Last online</td>
<td align="center" bgcolor="#ebebeb">Edit</td>
<td align="center" bgcolor="#ebebeb">Delete</td>
</tr>
</thead>
<tbody>
{foreach $objRs as $rs}
<tr class="tableline">
<td align="center" class="intableline">{$rs@index+$no+1}</td>
<td align="center" class="intableline">{$rs.username}</td>
<td align="center" class="intableline">***</td>
<td align="center" class="intableline">{$rs.name}</td>
<td align="center" class="intableline">{$rs.email}</td>
<td align="center" class="intableline">{$rs.tel}</td>
<td align="center" class="intableline">{$rs.banner_update}</td>
<td align="center" class="intableline"><img src="{$theme}/admin/icon/icon-edit.gif" width="49" height="19" alt="Edit" /></td>
<td align="center" class="intableline"><img src="{$theme}/admin/icon/icon-delete.gif" width="49" height="19" alt="Delete" /></td>
</tr>
{foreachelse}
<tr class="tableline">
<td align="center" class="intableline" colspan="9">no results</td>
</tr>
{/foreach}
</tbody>
</table>
ตัวอย่างก็น่าจะพอได้ ลองไปอ่าน doc เล่นๆไปเดี๋ยวก็ได้ (smarty v.2)
|
|
|
|
|
Date :
2011-10-02 17:04:03 |
By :
chineji |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ
|
|
|
|
|
Date :
2011-10-04 21:26:11 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
มัน error ช่วงนี้ครับ Code (PHP)
$app->sql="select * from member where mem_id=".$mId;
$objRs=$app->executeData();
app->assign("objRs",$objRs);
Parse error: syntax error, unexpected T_OBJECT_OPERATOR in D:\AppServ\www\1\t.php on line 92
|
|
|
|
|
Date :
2011-10-04 21:39:22 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อยากทราบว่า ถ้าเขา เปลื่ยน .tpl เป็น html จะมีผลเสียอะไรไหมครับ
โหลด e book มา อ่านแล้วยังใช้มันได้ 100% เลยครับ อิอิ มันเป็น อิง หมด
|
|
|
|
|
Date :
2011-10-23 03:20:59 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนั้น ยังใช้ $smarty->display('employee.tpl'); tpl อยู่เลยครับ
ถ้า เปลื่ยน $smarty->display('employee.html') html อ่าครับ มีผลเสียไหมครับ
ผมลองเปลื่ยนดูแล้วได้ แต่กลัวมันจะมีปัญหาที่หลังครับ
รบกวนด้วยนะครับ
ขอบคุณครับ
|
|
|
|
|
Date :
2011-10-23 12:58:13 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ลืมไปเลยพิมพ์ผิดไปนิดตัวอย่าง เป็น smarty 3 ใช้ pdo แต่ smarty 2 จะใช้ adodb
ที่ใช้ เป็น .html แทน .tpl ผมก็ไม่เคยลองเหมือนกัน
ตอนนี้น่าจะใช้ smarty ได้แก่งแล้วล่ะมั้ง หรือเปล่า ถ้าตัวอย่างที่เคยให้ไว้ ยังไม่เคลียร์พอไว้เดี๋ยวกลับห้องจะ เอา demo มาให้ดูสักระบบ ลองเอาไปศึกษาดู หรือถ้าเป็นอยู่แล้วก็คงไม่ต้อง ตัวอย่างก็ไม่ได้มีอะไรมาก ผมออกแบบไว้ให้มันรองรับเว็บหลายภาษา แล้วก็เปลี่ยนเทมเพลตได้
ตัวระบบแยกเป็นโมดูลๆ แต่โค๊ดที่ผมเขียนก็ยังคงคอนเซพไม่ค่อยคงที่เท่าไรผมเองก็ยังใช้มาได้ไม่นาน คอนเซพในการเขียนยังอยู่ระหว่างการปรับปรุงอยู่ แต่โดยรวมแล้วมันก็ทำงานได้ดี เพียงแต่ว่าอยากให้มันดูดีกว่านี้
ไงถ้าอยากจะดูก็ เม้นตอบมาบอกแล้วกันนะ
|
|
|
|
|
Date :
2011-11-24 10:36:06 |
By :
chineji |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้เป็นเว็บที่เขียนไว้ครับ แต่ยังไม่เสร็จ พึ่งเขียนไปได้ไม่นาน
http://122.155.18.22/~zp6790/
อยากๆดูครับ ขอบคุณครับ ^^
|
|
|
|
|
Date :
2012-10-21 15:34:20 |
By :
icman |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|