首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 綜合知識

Smarty 實戰項目教程(三):新聞站點完整實現(原生 MySQL 函數版)

     編輯:PHP 綜合知識

項目概覽

構建簡易新聞站點:首頁顯示三類新聞(國內/國際/娛樂)標題列表,點擊進入詳情頁。使用 Smarty + 原生 mysql_* 函數 + MySQL 數據庫。

數據庫設計

CREATE DATABASE News;
USE News;

CREATE TABLE tb_news_ch (  -- 國內新聞
    iNewsID INT(11) PRIMARY KEY AUTO_INCREMENT,
    vcNewsTitle VARCHAR(50) NOT NULL,
    ltNewsContent LONGTEXT NOT NULL
);
CREATE TABLE tb_news_in (  -- 國際新聞
    iNewsID INT(11) PRIMARY KEY AUTO_INCREMENT,
    vcNewsTitle VARCHAR(50) NOT NULL,
    ltNewsContent LONGTEXT NOT NULL
);
CREATE TABLE tb_news_mu (  -- 娛樂新聞
    iNewsID INT(11) PRIMARY KEY AUTO_INCREMENT,
    vcNewsTitle VARCHAR(50) NOT NULL,
    ltNewsContent LONGTEXT NOT NULL
);

設計決策解析

  • 分表而非合表:預判數據增長與未來拆分(子域名/獨立站點),避免單表瓶頸
  • 匈牙利命名法:字段前綴標識類型(i_int、vc_varchar、lt_longtext),閱讀即知類型

目錄結構

+Web (站點根目錄)
|-- +comm (Smarty 庫文件)
|   |-- Smarty.class.php, Smarty_Compiler.class.php, Config_File.class.php
|   |-- +plugins (插件目錄)
|-- +cache (緩存目錄,需寫權限)
|-- +templates (模板目錄)
|   |-- header.tpl, index.tpl, foot.tpl, news.tpl
|-- +templates_c (編譯目錄,需寫權限)
|-- +css, +image, +media
|-- index.php, news.php
|-- indexbak.htm, newsbak.htm (效果參考圖)
|-- 數據庫建立文件.txt, 例程說明.txt

核心代碼邏輯

index.php(首頁)

<?php
include_once("./comm/Smarty.class.php");
$smarty = new Smarty();
$smarty->template_dir = "./templates";
$smarty->compile_dir  = "./templates_c";
$smarty->cache_dir    = "./cache";
$smarty->cache_lifetime = 3600;
$smarty->caching = true;
$smarty->left_delimiter  = "<{";
$smarty->right_delimiter = "}>";

// 連接數據庫
$link = mysql_connect("localhost", "root", "") or die("DB連接失敗");
mysql_select_db("News", $link);
mysql_query("SET NAMES GBK");

// 查詢三類新聞各 5 條
$categories = array('ch'=>'國內新聞', 'in'=>'國際新聞', 'mu'=>'娛樂新聞');
foreach ($categories as $key => $title) {
    $sql = "SELECT iNewsID, vcNewsTitle FROM tb_news_$key ORDER BY iNewsID DESC LIMIT 5";
    $res = mysql_query($sql, $link);
    $list = array();
    while ($row = mysql_fetch_assoc($res)) $list[] = $row;
    $smarty->assign("news_$key", $list);
    $smarty->assign("title_$key", $title);
}

$smarty->display("index.tpl");
?>

news.php(詳情頁)

<?php
// 類似初始化...
$id = intval($_GET['id']);
$type = $_GET['type'];  // ch/in/mu
$sql = "SELECT * FROM tb_news_$type WHERE iNewsID=$id";
$row = mysql_fetch_assoc(mysql_query($sql, $link));
$smarty->assign("news", $row);
$smarty->display("news.tpl");
?>

index.tpl 關鍵片段

{section name=i loop=$news_ch}
    <a href="news.php?type=ch&id={$news_ch[i].iNewsID}">{$news_ch[i].vcNewsTitle}</a><br>
{/section}
{* 同理循環 news_in, news_mu *}

遷移建議

生產環境請使用 PDO 或 MySQLi,mysql_* 函數已棄用(PHP 7.0+ 移除)。本教程為教學演示,實戰請升級數據庫層。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved