最新xoops模組開發
一、程式
- 流程
case "opShow":
opShow($sn);
break;
二、函數
- opShow($sn)
#單筆顯示
function opShow($sn = "") {
global $xoopsDB,$xoopsTpl,$module_name;
if (!$sn) {
redirect_header(XOOPS_URL, 3, "資料錯誤!!");
}
#---- 過濾讀出的變數值 ----
$myts = MyTextSanitizer::getInstance();
//sn kind kind_gallery title summary content price amount enable date sort
$sql = "select a.*,b.title as kind_title
from " . $xoopsDB->prefix("cnu_show_prod") . " as a
left join " . $xoopsDB->prefix("cnu_show_kind") . " as b on a.kind=b.sn
where a.sn='{$sn}' and a.enable='1'
"; //die($sql);
$result = $xoopsDB->query($sql) or redirect_header(XOOPS_URL, 3, web_error());
$row = $xoopsDB->fetchArray($result);
#-----------------------------------------------------
if (!$row) {
redirect_header(XOOPS_URL, 3, "資料錯誤!!");
}
#計數器+1
InsertCounteAddOne($row['sn'], "cnu_show_prod"); //ugm_tools2/ugmTools.php
#-----------------------------------------------------
//以下會產生這些變數: a.sn,a.kind,a.title,a.url,a.content,b.file_name,b.sub_dir
$row['sn'] = intval($row['sn']);
$row['kind'] = intval($row['kind']);
#一般文字
$row['title'] = $myts->htmlSpecialChars($row['title']);
$row['date'] = intval($row['date']);
#日期
$row['date'] = date("Y-m-d", xoops_getUserTimestamp($row['date'])); //從資料庫撈出
$row['counter'] = intval($row['counter']);
$row['kind_title'] = $myts->htmlSpecialChars($row['kind_title']);
$row['youtube'] = $myts->htmlSpecialChars($row['youtube']);//大類名稱
#大量文字,
$html = 0;
$br = 1;
$row['summary'] = $myts->displayTarea($row['summary'], $html, 1, 0, 1, $br);
#大量文字,編輯器
$html = 1;
$br = 0;
$row['content'] = $myts->displayTarea($row['content'], $html, 1, 0, 1, $br);
#----單檔圖片上傳
$subdir = "prod"; //子目錄(前後不要有 / )
$ugmUpFiles = new ugmUpFiles($module_name, $subdir); //實體化
$col_name = "prod"; //資料表關鍵字
$thumb = false ; //顯示縮圖
$col_sn = $row['sn']; //關鍵字流水號
$row['prod'] = $ugmUpFiles->get_rowPicSingleUrl($col_name,$col_sn,$thumb);
#-----------------------------------------------------
#型錄
#上傳pdf型錄
$multiple = false;
$col_name = "prodPdf";
$ugmUpFiles->set_col($col_name, $row['sn']);
$row['pdf'] = $ugmUpFiles->get_rowFileSingleUrl($col_name, $row['sn']);
#-----------------------------------------------------
$xoopsTpl->assign("row", $row);
#-----------------------------------------------------
}
三、樣板
- templates/cnu_show_index.tpl
<{if $op == "opShow"}>
<style type="text/css">
.prod-head {
padding: 10px;
background-color: #333;
color:#fff;
}
.space-10{
height:10px;
}
.space-20{
height:20px;
}
.space-30{
height:30px;
}
.space-40{
height:40px;
}
.space-50{
height:50px;
}
.space-60{
height:60px;
}
.show{
padding-bottom:50px;
letter-spacing: 1.5px;
font-family: -apple-system,"PingFang SC","Helvetica Neue","Hiragino Sans GB","Microsoft YaHei","Microsoft JhengHei","Source Han Sans SC","Noto Sans CJK SC","Source Han Sans CN","Noto Sans SC","Source Han Sans TC","Noto Sans CJK TC","WenQuanYi Micro Hei",SimSun,sans-serif;
}
.mg-post h1{
font-size:24px;
color:#000;
}
.mg-post .mg-post-title {
margin-bottom: 15px;
}
}
.mg-post .mg-post-title a {
color: #16262e;
}
.mg-post .mg-post-title a:hover {
color: #e7b315;
}
.mg-post .mg-post-meta {
border-bottom: 1px solid #f2f2f2;
margin-bottom: 20px;
color: #96a3a9;
}
.mg-post .mg-post-meta span {
padding-right: 10px;
}
.mg-post .mg-post-meta span:after {
content: '/';
padding-left: 15px;
color: #0f0f0f;
}
#show .mg-post .mg-post-meta span:last-child:after {
content: '';
padding-left: 0;
}
.mg-post .mg-post-meta a {
color: #0f0f0f;
}
.mg-post .mg-post-meta a:hover {
color: #e7b315;
}
.mg-post .mg-read-more {
font-family: "Playfair Display", serif;
font-style: italic;
font-size: 15px;
}
.mg-post-title i {
display: block;
width: 60px;
line-height: 60px;
background-color: #32c5d2;
text-align: center;
font-size: 40px;
color: #000;
border-radius: 50%;
float: left;
-webkit-transition: background-color 0.3s;
transition: background-color 0.3s;
}
.content{
line-height: 1.7;
font-size: 16px;
color: #404040;
font-family: -apple-system,"PingFang SC","Helvetica Neue","Hiragino Sans GB","Microsoft YaHei","Microsoft JhengHei","Source Han Sans SC","Noto Sans CJK SC","Source Han Sans CN","Noto Sans SC","Source Han Sans TC","Noto Sans CJK TC","WenQuanYi Micro Hei",SimSun,sans-serif;
}
.show img{
border: 2px solid #fafafa;
border-radius: 8px;
background-image: -webkit-gradient(linear, center top, center bottom, from(#fcfcfc), to(#bfbfbf), color-stop(3%, #f7f7f7), color-stop(12%, #f2f2f2), color-stop(90%, #d9d9d9));
background-image: -webkit-linear-gradient(top, #fcfcfc, #f7f7f7 3%, #f2f2f2 12%, #d9d9d9 90%, #bfbfbf);
background-image: -moz-linear-gradient(top, #fcfcfc, #f7f7f7 3%, #f2f2f2 12%, #d9d9d9 90%, #bfbfbf);
background-image: -o-linear-gradient(top, #fcfcfc, #f7f7f7 3%, #f2f2f2 12%, #d9d9d9 90%, #bfbfbf);
background-image: -ms-linear-gradient(top, #fcfcfc, #f7f7f7 3%, #f2f2f2 12%, #d9d9d9 90%, #bfbfbf);
background-image: linear-gradient(to bottom, #fcfcfc, #f7f7f7 3%, #f2f2f2 12%, #d9d9d9 90%, #bfbfbf);
-webkit-box-shadow: 0 1px 1px 1px rgba(58,60,61,0.75), inset 0 1px 0 #f5f5f5;
-moz-box-shadow: 0 1px 1px 1px rgba(58,60,61,0.75), inset 0 1px 0 #f5f5f5;
box-shadow: 0 1px 1px 1px rgba(58,60,61,0.75), inset 0 1px 0 #f5f5f5;
}
</style>
<div id="show" class="show">
<!--內容-->
<div class="row">
<div class="col-sm-4">
<a href="#myModal" data-toggle="modal" >
<img src="<{$row.prod}>" class="img-responsive" alt="<{$row.title}>">
</a>
</div>
<div class="col-sm-8 mg-post">
<h1><{$row.title}></h1>
<div class="mg-post-meta">
<span><{$row.date}></span>
<span>
<a href="<{xoAppUrl modules/cnu_show/index.php?op=showKind&kind=}><{$row.kind}>"><{$row.kind_title}></a>
</span>
<span><{$row.counter}></span>
<{if $isAdmin}>
<span>
<a href="<{xoAppUrl modules/cnu_show/admin/main.php?op=opForm&sn=}><{$row.sn}>"><{$smarty.const._EDIT}></a>
</span>
<{/if}>
</div>
<div style="margin:10px 0;" id="link">
<{if $row.pdf}>
<a href="<{$row.pdf}>" title="<{$row.title}>" class="btn btn-info btn-lg" target="_blank" >型錄</a>
<{/if}>
<{if $row.youtube}>
<button type="button" class="btn btn-primary btn-lg" data-toggle="modal" data-target="#Modal-Movie">影片</button>
<{/if}>
</div>
</div>
</div>
<div class="space-20"></div>
<div class="row">
<div class="col-sm-12">
<{$row.content}>
</div>
</div>
</div>
<!-- Modal -->
<div class="modal fade" id="myModal" role="dialog" style="padding-top:50px;">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title text-center" style="color:#000;"><{$row.title}></h4>
</div>
<div class="modal-body">
<img src="<{$row.prod}>" class="img-responsive " alt="<{$row.title}>">
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<{if $row.youtube}>
<!-- Modal -->
<div class="modal fade" id="Modal-Movie" role="dialog" style="padding-top:50px;">
<div class="modal-dialog">
<!-- Modal content-->
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal">×</button>
<h4 class="modal-title text-center" style="color:#000;"><{$row.title}></h4>
</div>
<div class="modal-body">
<div class="video-container">
<iframe width="560" height="315" src="https://www.youtube.com/embed/<{$row.youtube}>" frameborder="0" allowfullscreen></iframe>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-danger" data-dismiss="modal">Close</button>
</div>
</div>
</div>
</div>
<{/if}>
<{/if}>