Giáo trình Hướng dẫn thiết kế web PHP và MySQL (Phần 2)
HIỂN THỊ CHI TIẾT MỘT TIN
I. Phần 1: Tạo trang hiển thị chi tiết tin:
1. Định nghĩa hàm lấy chi tiết 1 tin
function ChiTietTin($idTin)
settype($idTin, "int");
{
$sql="SELECT idTin, TieuDe, TomTat, Ngay, urlHinh, Content, SoLanXem,
TinNoiBat, tin.AnHien, tin.idLT, Ten, tin.idTL, TenTL
FROM tin, loaitin, theloai
WHERE tin.idLT=loaitin.idLT AND loaitin.idTL=theloai.idTL AND
idTin=$idTin";
$kq = mysql_query($sql) or die(mysql_error());
return $kq; }
182. Tạo file chitiettin.php
<?php require_once "classTin.php"; if (isset($t)==false) $t = new tin;
$idTin = $_GET['idTin']; settype($idTin,"int");
$tin = $t->ChiTietTin($idTin);
$row_tin=mysql_fetch_assoc($tin);?>
<div id=path>Trang chủ/<?=$row_tin['TenTL'];?>/<?=$row_tin['Ten'];?></div>
<div id="chitiettin">
<div id="chitiettin_left">
<p id="tin_tieude"> <?=$row_tin['TieuDe'];?> </p>
<p id="tin_tomtat">
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
149
<img src="<?=$row_tin['urlHinh'];?>" width=70 height=70 align=left>
<?=$row_tin['TomTat'];?>
</p>
<div id="tin_noidung"> <?=$row_tin['Content'];?> </div>
</div>
<div id="chitiettin_right"> </div>
</div>
183. Định dạng
#path{ background-color:#999900; color:#003366; font-weight:bold;
padding-top:5px; padding-bottom:5px; }
#chitiettin_left{ float:left; width:535px;; background-color:#FF9933}
#chitiettin_right{ float:left; width:250px; background-color:#CCCCCC; }
#chitiettin #tin_tieude{ font-weight:bold; color:#003366; }
#chitiettin #tin_tomtat{
color:#009999; text-align:justify; border-bottom:#CC3300 1px solid;
padding-bottom:5px; padding-right:5px; font-size:16px}
#chitiettin #tin_noidung{ text-align:justify}
#chitiettin .ngay{ color:#036; font-style:italic; text-align:right}
184. Cập nhật số lần xem tin
-
Định nghĩa hàm
function CapNhatSolanXemTin($idTin){
settype($idTin,"int");
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
150
$sql = "UPDATE tin SET SolanXem = SoLanXem+1 WHERE idTin = $idTin";
mysql_query($sql) or die(mysql_error());
}
-
Gọi hàm
$t->CapNhatSolanXemTin($idTin);
LVII. Phần 2: Nhúng vào trang chủ
1. Mở trang home
-
Ở đầu trang tiếp nhận tham số view trên thanh địa chỉ
$view=$_GET['view'];
-
Trong div content4, sửa code đang có để có kết quả sau:
<?phpif ($view=="news") include "chitiettin.php";
else include "tinmoi.php";?>
185. Chỉnh địa chỉ cho tiêu đề các tin
-
Mở file tinxemnhieu.php, chỉnh giá trị của thuộc tính href cho phù hợp ꢀ
( href="home.php?view=<?php echo $row['idTin'];?>" )
-
-
Mở file tinnoibat.php, chỉnh giá trị của thuộc tính href cho phù hợp (2 chỗ)
Mở file tinmoi.php, chỉnh giá trị của thuộc tính href cho phù hợp (2 chỗ)
LVIII. Phần 3: Hiện số lần xem, ngày đăng, bản in , tin cũ hơn, mới hơn
1. Mở chitiettin.php, trong chitiettin_right:
186. Số lần xem, bản in
<div id="util">
<a href="#" id="banin"> Bản in </a>
Xem: <?=$row_tin['SoLanXem'];?>.
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
151
Đăng: <?=date('d/m/Y',strtotime($row_tin['Ngay']));?>
</div>
Định dạng div util :
187. Tin cũ hơn , tin mới hơn
-
Định nghĩa hàm
function TinCuCungLoai($idTin, $lang ='vi', $sotin = 5){
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem FROM tin
WHERE AnHien = 1 AND idTin<$idTin AND ( lang ='$lang' or '$lang'='' )
AND idLT = (SELECT idLT FROM tin WHERE idTin = $idTin)
ORDER BY idTin DESC LIMIT 0, $sotin";
$kq = mysql_query($sql) or die(mysql_error());
return $kq; }
function TinMoiCungLoai($idTin, $lang ='vi', $sotin = 5){
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem FROM tin
WHERE AnHien = 1 AND idTin>$idTin AND ( lang ='$lang' or '$lang'='' )
AND idLT = (SELECT idLT FROM tin WHERE idTin = $idTin)
ORDER BY idTin DESC LIMIT 0, $sotin";
$kq = mysql_query($sql) or die(mysql_error());
return $kq; }
-
Gọi hàm và hiển thị:
<div id="tinmoihon">
<span class="caption"> Tin mới hơn</span>
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
152
<?php $kq = $t->TinMoiCungLoai($idTin,$lang,10);?>
<?php while ($row_kq = mysql_fetch_assoc($kq)) {?>
<a href="#"> <?=$row_kq['TieuDe'];?> </a>
<?php } ?>
</div>
<div id="tincuhon">
<span class="caption"> Tin tiếp theo</span>
<?php $kq = $t->TinCuCungLoai($idTin,$lang,10);?>
<?php while ($row_kq = mysql_fetch_assoc($kq)) {?>
<a href="#"> <?=$row_kq['TieuDe'];?> </a>
<?php } ?>
</div>
Định dạng: tuỳ ý bạn
188. Code jquery cho link Bản in
$("#banin").click(function(){
$("#header").hide();
$("#content1").hide();
$("#info").hide();
$("#thanhmenu").hide();
$("#content2").hide();
$("#content3").hide();
$("#util").hide();
$("#footer").hide();
$("#chitiettin_right").hide();
$("#chitiettin").css("width","990px");
$("#chitiettin_left").css("width","990px");
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
153
$("#path").css("width","990px");
return false; });
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
154
THANH MENU
I. Chép folder
Chép folder apycom.com-deep-sky-blue vào site và xem thử index.html trong folder mới chép
LIX. Tạo file menu.php
<?php require_once "classTin.php"; if (isset($t)==false) $t = new tin;
$lang='vi'; $theloai = $t ->TheLoai($lang);
?>
<div id="menu">
<ul class="menu">
<? while ($row_theloai = mysql_fetch_assoc($theloai) ) {?>
<li><a class=parent href=#><span> <?=$row_theloai['TenTL'];?> </span></a></
li>
<? } ?>
</ul>
</div>
LX. Lấy các loại tin trong từng thể loại và hiển thị (sau tag a)
<? $loaitin = $t->LoaiTinTrongTheLoai($row_theloai['idTL']); ?>
<ul><? while ($row_loaitin = mysql_fetch_assoc($loaitin)) {?>
<li><a href=#><span> <?=$row_loaitin['Ten'];?> </span></a></li>
<? }?>
</ul>
LXI. Chèn menu.js, menu.css
LXII. Thêm div copyright ở sau cùng
<div id="copyright"><a href="http://apycom.com/"></a></div>
LXIII. Đưa vào trang chủ:
Mở file home.php, trong div thanhmenu, include file menu.php
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
155
LAB HIỂN THỊ CÁC TIN TRONG 1 LOẠI
I. Định nghĩa hàm
function TinTrongLoai($idLT){
$sql="SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem
FROM tin WHERE AnHien = 1 AND idLT=$idLT
ORDER BY idTin DESC";
$kq = mysql_query($sql) or die(mysql_error());
return $kq;
}
function ChiTietLoaiTin($idLT) {
settype($idLT, "int");
$sql="SELECT idLT, Ten, loaitin.idTL, TenTL FROM loaitin, theloai
WHERE loaitin.idTL = theloai.idTL AND idLT = $idLT";
$kq = mysql_query($sql) or die(mysql_error());
return $kq;
}
LXIV. Tạo file tintrongloai.php
a. Code
<?php
$idLT=$_GET['idLT']; settype($idLT, "int");
$tin = $t->TinTrongLoai($idLT);
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
156
$loaitin = $t->ChiTietLoaiTin($idLT);
$row_loaitin = mysql_fetch_assoc($loaitin);
?>
<div id="tintrongloai">
<div id="path"> TRANG CHỦ > <?=$row_loaitin['TenTL'];?> > <?=$row_loaitin['Ten'];?>
</div>
<?php while ($row_tin=mysql_fetch_assoc($tin)) {?>
<div class="row_tin">
<p class="tieude"> <?=$row_tin['TieuDe'];?> </p>
<p class="ngay">
<img src="<?=$row_tin['urlHinh'];?>" width="70" height="70" align="left">
Ngày đăng: <?=date('d/m/Y',strtotime($row_tin['Ngay']));?>.
Số lần xem: <?=$row_tin['SoLanXem'];?> </p>
<p class="tomtat"> <?=$row_tin['TomTat'];?> </p>
<div class="xemtiep"> <a href="#">Xem chi tiết</a> </div>
</div>
<?php } ?>
</div> <!--div tintrongloai -->
b. Định dạng CSS
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
157
LXV. Đưa vào trang chủ
-
-
-
Nhúng trang tintrongloai.php vào content4 khi giá trị biến view là cat
Chỉnh link cho các tên loại tin trong thanh menu
Sửa giá trị href trong link xem tiếp để người xem nhắp xem tin
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
158
LAB XỬ LÝ TÌM KIẾM
I. Chỉnh file formtim.php và chỉnh các tham số
•
•
Action= ketquatimkiem.php
Method: get
LXVI. Định nghĩa hàm TimKiem
function TimKiem($tukhoa, &$totalRows, $pageNum=1, $pageSize=5){
$startRow = ($pageNum-1)*$pageSize;
$tukhoa = trim(strip_tags($tukhoa));
if (get_magic_quotes_gpc()==false) {
$tukhoa = mysql_real_escape_string($tukhoa);
}
$sql = "SELECT idTin, TieuDe, TomTat, urlHinh, Ngay, SoLanXem, Ten, TenTL
FROM tin, loaitin, theloai
WHERE tin.AnHien = 1 AND tin.idLT = loaitin.idLT AND tin.idTL =
theloai.idTL
AND (TieuDe RegExp '$tukhoa' or TomTat RegExp '$tukhoa')
ORDER BY idTin DESC LIMIT $startRow , $pageSize ";
$kq = mysql_query($sql) or die (mysql_error());
$sql = "SELECT count(*)
FROM tin, loaitin, theloai
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
159
WHERE tin.AnHien = 1 AND tin.idLT = loaitin.idLT AND tin.idTL =
theloai.idTL
AND (TieuDe RegExp '$tukhoa' or TomTat RegExp '$tukhoa') ";
$rs = mysql_query($sql) or die (mysql_error());
$row_rs = mysql_fetch_row($rs);
$totalRows = $row_rs[0];
return $kq;
}
LXVII. Tạo file ketquatimkiem.php
1. Tiếp nhận tham số
$tukhoa = $_GET['tukhoa'];
189. Khai báo các biến dùng để phân trang
$pageSize = 10;
$pageNum = $_GET['pageNum']; settype($pageNum, "int");
if ($pageNum<=0) $pageNum=1;
190. Lấy dữ liệu
$kq = $t->TimKiem($tukhoa,$totalRows, $pageNum, $pageSize);
191. Hiển thị dữ liệu
<div id="ketquatimkiem">
<p class="caption">KẾT QUẢ TÌM KIẾM</p>
<?php while ($row_tin = mysql_fetch_assoc($kq) ) {?>
<?php ob_start(); ?>
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
160
<div class="row_tin">
<p><a href="#">{TieuDe}</a><span>({TenTL} / {Ten})</span></p>
<p><img src="{urlHinh}" width="70" height="70" align="left">
<span class=ngay>Ngày đăng: {Ngay}.</span>
<span class=solanxem>Số lần xem: {SoLanXem} </span>
</p>
<p class="tomtat"> {TomTat}</p>
</div>
<?php $str = ob_get_clean();
$str = str_replace("{idTin}" , $row_tin['idTin'] , $str);
$str = str_replace("{TieuDe}" , $row_tin['TieuDe'] , $str);
$str = str_replace("{TomTat}" , $row_tin['TomTat'], $str);
$str = str_replace("{urlHinh}" , $row_tin['urlHinh'], $str);
$str=str_replace("{Ngay}",date("d/m/Y",strtotime($row_tin['Ngay'])
),$str);
$str = str_replace("{SoLanXem}" , $row_tin['SoLanXem'], $str);
$str = str_replace("{Ten}" , $row_tin['Ten'], $str);
$str = str_replace("{TenTL}" , $row_tin['TenTL'], $str);
echo $str;
?>
<?php } ?>
</div> <!-- div ketquatimkiem -->
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
161
192. Hiện số tin tìm được phía trên vòng lặp
<p>Tìm được <?php echo $totalRows?> tin</p>
193. Hiện thanh phân trang
194. Định dạng CSS
195. Test: Chạy file formtim để test
196. Đưa code xử lý vào trang home
-
-
-
Xóa thuộc tính action của form tìm kiếm
Thêm vào form tìm kiếm 1 hidden field tên là view, giá trị là search
Trong trang chủ, nếu giá trị biến view là seach thì nhúng trang kết quả tìm kiếm vào
content4
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
162
TẠO TIÊU ĐỀ CHO CÁC TRANG
I. Mở file classTin.php và định nghĩa hàm sau:
function getTitle($view=''){
if ($view=='') return "Tin tức online";
elseif ($view=='search') return "Tím kiếm thông tin";
elseif ($view=='register') return "Đăng ký thành viên";
elseif ($view=="news"){
$id = $_GET['idTin']; settype($id,"int");
$kq = mysql_query("select TieuDe from tin where idTin=$id") or die(mysql_error()
);
if (mysql_num_rows($kq)<=0) return "Tin tức online";
$row_kq = mysql_fetch_row($kq);
return $row_kq[0];
}
elseif ($view=="cat"){
$id = $_GET['idLT']; settype($id,"int");
$kq = mysql_query("select Ten from loaitin where idLT=$id") or die(mysql_error()
);
if (mysql_num_rows($kq)<=0) return "Tin tức online";
$row_kq = mysql_fetch_row($kq);
return $row_kq[0];
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
163
}
} //function getTitle
II. Mở file home.php
Code trong tag title
<?=$t->getTitle($view); ?>
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
164
.HTACCESS
I. Chuẩn bị
1. Bật mod rewrite của apache
-
-
-
Mở file httpd.conf trong c:/appserv/Apache2.2/conf
Bỏ dấu # ở đầu dòng 196
Lưu file và restart Apache
197. Test lệnh RewriteRule
RewriteRule ^news/songdep/$ home.php?view=cat&idLT=12 [L]
RewriteRule ^news/thohay/$ home.php?view=cat&idLT=28 [L]
198. File home.php, trong tag head, thêm lệnh sau:
<base href="http://<?=$_SERVER['SERVER_NAME'];?>/tintuc/" />
LXVIII. Giả địa chỉ của 1 tin
1. File .htaccess
RewriteEngine on
RewriteRule ^news/(.*).html$ home.php?view=news&TieuDe_KhongDau=$1
199. Tiếp nhận tiêu đề không dấu:
Trong file chitiettin.php, bỏ lệnh tiếp nhận idTin, và thay bằng đoạn code sau:
$TieuDe_KhongDau = $_GET['TieuDe_KhongDau'];
if (get_magic_quotes_gpc()==false)
$TieuDe_KhongDau = mysql_real_escape_string($TieuDe_KhongDau);
$idTin = $t->LayidTin($TieuDe_KhongDau);
200. Định nghĩa hàm LayidTin
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
165
function LayidTin($TieuDe_KhongDau){
$sql = "SELECT idTin FROM tin
WHERE TieuDe_KhongDau='$TieuDe_KhongDau'";
$kq = mysql_query($sql) or die(mysql_errno());
$row_kq = mysql_fetch_assoc($kq);
return $row_kq['idTin'];
}
201. Tạo liên kết xem tin với địa chỉ giả
-
Mở các file tinxemnhieu.php, tinnoibat.php, tinmoi.php, tintrongloai.php, chitiettin.php,
ketquatimkiem.php rồi chỉnh địa chỉ các liên kết sang cấu trúc mới
-
Mở classTin, bổ sung thêm cột TieuDe_KhongDau cho các hàm lấy tin
LXIX. Giả địa chỉ của loại tin
1. File .htaccess
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1 [L]
2. Tiếp nhận tham số Ten_KhongDau
File file tintrongloai.php, bỏ lệnh tiếp nhận tham số idLT, thay bằng code sau:
$Ten_KhongDau = $_GET['Ten_KhongDau'];
if (get_magic_quotes_gpc()==false)
$Ten_KhongDau=mysql_real_escape_string($Ten_KhongDau);
$idLT = $t->LayidLT($Ten_KhongDau);
202. Định nghĩa hàm LayidLT
function LayidLT($Ten_KhongDau){
$sql="select idLT from loaitin where Ten_KhongDau='$Ten_KhongDau'";
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
166
$kq = mysql_query($sql) or die (mysql_error());
$row_kq = mysql_fetch_assoc($kq);
$idLT= $row_kq['idLT'];
return $idLT;
}
203. Tạo liên kết để xem tin trong loại với địa chỉ giả
-
file menu.php: chỉnh địa chỉ cho liên kết của tên các loại tin như sau:
cat/<?php echo $row_loaitin['Ten_KhongDau']?>/
-
classDB.php: thêm field Ten_KhongDau vào hàm LoaiTinTrongTheLoai
204. Chỉnh thanh phân trang
-
File .htaccess: xóa lệnh
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1 [L]
và gõ hai lệnh sau:
RewriteRule ^cat/(.*)/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=$2
{L]
RewriteRule ^cat/(.*)/$ home.php?view=cat&Ten_KhongDau=$1&pageNum=1 [L]
-
-
File tintrongloai.php, sửa lời gọi hàm phân trang pageList như sau:
<?=$t->pagesList1("cat/$Ten_KhongDau",$totalRows,$pageNum,$pageSize,5)?>
Định nghĩa hàm pagesList1
function pagesList1($baseURL,$totalRows,$pageNum=1,$pageSize=5,$offset=3){
if ($totalRows<=0) return "";
$totalPages = ceil($totalRows/$pageSize);
if ($totalPages<=1) return "";
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
167
$from = $pageNum - $offset;
if ($from <=0) { $from = 1;
$to = $pageNum + $offset;
$to = $offset*2; }
if ($to > $totalPages) { $to = $totalPages; }
$links = "";
for($j = $from; $j <= $to; $j++) {
$links= $links . "<a href = '$baseURL/$j/'>$j</a>";
} //for
return $links;
}
LXX. Giả địa chỉ cho tìm kiếm
1. File formtim.php
2. Chỉnh method thành post
3. Trong tag form, thêm lệnh để được như sau:
<form onsubmit="this.action='/tintuc/search/' +
document.formtim.tukhoa.value+'/'" action="" method="post" id="formtim">
4. File htaccess, thêm lệnh
RewriteRule ^search/(.*)/$ home.php?view=search&tukhoa=$1 [L]
LXXI. Các chỉ thị hữu ích khác trong file htaccess
1. Đổi tên mở rộng php
RewriteRule ^(.*)\.tco$ $1.php
Mở file home, tìm và sửa các request đến các file .php thành .tco (formbinhchon.tco,
ketquabinhchon.tco, tinxemnhieu.tco, tinnoibat.tco, formtim.tco, formtimnangcao.tco)
NHÂ
́
̣
– NƠI DUY NHÂ
́
́
̣
̀
̣
C ĐA
̉
̉
̀
̃
́
̣
THÊ
̉
168
Tải về để xem bản đầy đủ
Bạn đang xem 20 trang mẫu của tài liệu "Giáo trình Hướng dẫn thiết kế web PHP và MySQL (Phần 2)", để tải tài liệu gốc về máy hãy click vào nút Download ở trên
File đính kèm:
- giao_trinh_huong_dan_thiet_ke_web_php_va_mysql_phan_2.pdf