emlog的模板一般包括如下檔案:
images資料夾:存放模板所需圖片。
echo_log.php:顯示日誌內容。
footer.php:頁面底部。
header.php:頁面頭部。
log_list.php:顯示日誌列表內容。
main.css:模板的css檔案。
module.php:模板公共代碼,包含側邊widgets、評論、引用、編輯等。
page.php:自定義的頁面內容的模板。
preview.jpg:在後台模板選擇界面顯示的模板預覽圖,300X225 jpg格式。
side.php:模板側邊欄檔案,如製作單欄模板則該檔案不是必須的。
t.php:顯示emlog系統自帶的微博(碎語)內容。
emlog模板總綱,header.php,footer.php,log_list.php,echo_log.php,page.php,t.php,side.php,module.php,emlog 模板安裝,emlog結構詳細介紹,header.php篇,log_list.php篇,echo_log.php篇,page.php篇,side.php 篇,footer.php 篇,module.php上篇,module.php中篇,module.php下篇,404.php篇,
emlog模板總綱
emlog的模板一般包括如下檔案:
images資料夾:存放模板所需圖片。
echo_log.php:顯示日誌內容。
footer.php:頁面底部。
header.php:頁面頭部。
log_list.php:顯示日誌列表內容。
main.css:模板的css檔案。
module.php:模板公共代碼,包含側邊widgets、評論、引用、編輯等。
page.php:自定義的頁面內容的模板。
preview.jpg:在後台模板選擇界面顯示的模板預覽圖,300X225 jpg格式。
side.php:模板側邊欄檔案,如製作單欄模板則該檔案不是必須的。
t.php:顯示emlog系統自帶的微博(碎語)內容。
下面我們一個個分析檔案內容:
header.php
開頭注釋內容是模板信息,該信息顯示在模板選擇界面
Template Name:模板名稱
Description:模板介紹描述
Author:模板作者
Author Url:作者或模板發布的URL
Sidebar Amount:標記該模板有幾個側邊欄,一般為1,有些模板有兩個側邊欄則標記2。這樣可以在後台widgets里識別管理(具體可下載體驗官方收錄的模板G7)。
之後是具體代碼部分:
if(!defined('EMLOG_ROOT')) {exit('error!');}
該行代碼同樣存在於其它模板檔案中,為防止該檔案被直接執行。
require_once View::getView('module');
載入模板公共代碼,需要注意的是加粗部分與3.x有變化,模板升級的同學需要注意一下。
$blogtitle:標題
$site_key:關鍵字(4.0的關鍵字可以輸出日誌的標籤了)
$description:輸出部落格設定的摘要
BLOG_URL:部落格首頁的URL,輸出形如http://域名/blog/
TEMPLATE_URL:模板資料夾的URL,用於載入模板內的css、js及其他內容,輸出形如http://域名 /blog/content/templates/simue-tuso/
BLOG_URL.Option::get('topimg'):這句可以無視,因為只默認模板可以自定義banner,其它模板沒這功能(卡片語:很沒營養的設定,嗯。)
<?php echo $curpage == CURPAGE_HOME ? 'current' : 'common';?> 判斷當前是否首頁,是則給導航加current類,用於表現當前位置。
<?php if($istwitter == 'y'):?>.......<?php endif;?> 如後台設定在前台顯示碎語,則輸出.......中的內容。
<?php echo $curpage == CURPAGE_TW ? 'current' : 'common';?> 判斷當前URL是否為碎語並選擇加類名。
<?php foreach ($navibar as $key => $val):?>.......<?php endforeach;?> 輸出自定義頁面的連結
<?php doAction('navbar', '<li class="common">', '</li>'); ?> 導航掛載點加入,第2、3參數分別為包裹導航連結的開始和結束部分,可根據模板自定義。
<?php if(ROLE == 'admin' || ROLE == 'writer'): ?>......<?php endif; ?> 如管理員或作者登錄則顯示.......中的內容。
footer.php
Option::EMLOG_VERSION:獲得版本號。
$icp:獲得後台設定的ICP備案號。
<?php doAction('index_footer'); ?> 頁腳底部掛載點加入。
log_list.php
<?php doAction('index_loglist_top'); ?> 頁腳底部掛載點加入。
$value['logid'] 該變數為當前日誌的id
<?php topflg($value['top']); ?> 顯示置頂標記,該函式位於模板module.php內。
<?php echo $value['log_url']; ?> 輸出日誌URL
<?php echo $value['log_title']; ?> 輸出日誌標題
<?php blog_author($value['author']); ?> 輸出日誌的作者,該函式位於模板module.php內。
<?php echo gmdate('Y-n-j G:i l', $value['date']); ?> 輸出日誌發布時間,參數'Y-n-j G:i l'用於定義日期格式。
<?php blog_sort($value['logid']); ?> 輸出日誌所屬的分類,該函式位於模板module.php內。
<?php editflg($value['logid'],$value['author']); ?> 當管理員或作者登入時顯示“編輯”連結,該函式位於模板module.php內。
<?php echo $value['log_description']; ?> 輸出日誌摘要(沒有摘要則輸出全文)。
<?php blog_att($value['logid']); ?> 如日誌有附屬檔案則輸出附屬檔案,該函式位於模板module.php內。
<?php blog_tag($value['logid']); ?> 輸出日誌的標籤,該函式位於模板module.php內。
<?php echo $value['comnum']; ?> 輸出當前日誌的評論數
<?php echo $value['tbcount']; ?> 輸出當前日誌的引用量
<?php echo $value['views']; ?> 輸出當前日誌的瀏覽量
<?php echo $page_url;?> 顯示當前列表頁的翻頁功能。
<?php
include View::getView('side');
include View::getView('footer');
?> 加入側邊欄及加入頁腳。
echo_log.php
該檔案功能函式與列表頁一致,但參數有區別,注意區分。
$logid 該變數為當前日誌的id
<?php topflg($top); ?> 顯示置頂標記,該函式位於模板module.php內。
<?php echo $log_title; ?> 輸出日誌標題。
<?php blog_author($author); ?> 輸出日誌的作者,該函式位於模板module.php內。
<?php echo gmdate('Y-n-j G:i l', $date); ?> 輸出日誌發布時間,參數'Y-n-j G:i l'用於定義日期格式。
<?php blog_sort($logid); ?> 輸出日誌所屬的分類,該函式位於模板module.php內。
<?php editflg($logid,$author); ?> 當管理員或作者登入時顯示“編輯”連結,該函式位於模板module.php內。
<?php echo $log_content; ?> 輸出日誌全文內容。
<?php blog_att($logid); ?> 如日誌有附屬檔案則輸出附屬檔案,該函式位於模板module.php內。
<?php blog_tag($logid); ?> 輸出日誌的標籤,該函式位於模板module.php內。
<?php echo $comnum; ?> 日誌頁顯示評論數
<?php echo $tbcount; ?> 日誌頁顯示引用數
<?php echo $views; ?> 日誌頁顯示瀏覽量
<?php doAction('log_related', $logData); ?> 相關日誌的掛載點,與3.x版本不同,4.0帶第二參數。
<?php neighbor_log($neighborLog); ?> 輸出鄰近,就是上一篇及下一篇,該函式位於模板module.php內。
<?php blog_trackback($tb, $tb_url, $allow_tb); ?> 輸出該日誌被引用的信息列表,與3.x不同注意區分。
<?php blog_comments($comments); ?> 輸出該日誌評論列表,與3.x不同注意區分。
<?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?> 輸出發表評論框,與3.x不同注意區分。
page.php
該檔案寫法與echo_log.php類似,不再重複。
t.php
與之前相同的內容不再重複。
<?php echo $avatar; ?> 輸出頭像。
<?php echo $author; ?> 輸出作者名。
<?php echo $val['t'];?> 輸出碎語內容。
<?php echo DYNAMIC_BLOGURL; ?> 根據當前url輸出部落格地址,主要用於js,解決跨域問題。
<?php echo $tid;?> 輸出碎語所在資料庫中的id號。
<?php echo $val['date'];?> 發布碎語的時間。
$reply_code :其值為‘n’或‘y’,後台設定是否啟用碎語回復驗證碼。
<?php echo $rcode; ?> 輸出驗證碼。
side.php
側邊欄,主要負責根據後台widgets設定信息輸出側邊欄內容。建議該檔案內代碼保持不變。
doAction('diff_side'); //側邊欄掛載點。
module.php
模板公共代碼,包含側邊widgets、評論、引用、編輯等。
該檔案由若干函式組成,被部落格前台檔案調用,可在內自定義函式實現更多功能。
如在自定義函式內調用emlog快取時,假設讀取user快取信息,則形如:
global $CACHE;
$user_cache = $CACHE->readCache('user');
如需要運算元據庫,則形如:
$DB = MySql::getInstance();
$res = $DB->query($sql);
以上兩點與3.x不同,請注意區分。
最後附:前台模板部分掛載點一覽:
doAction('navbar', '<li class="common">', '</li>'); //頭部導航掛載點
doAction('index_footer'); //頁腳底部掛載點
doAction('index_loglist_top'); //首頁日誌列表頂部掛載點
doAction('log_related', $logData); //相關日誌掛載點
doAction('diff_side'); //側邊欄掛載點
emlog 模板安裝
各個部落格系統安裝更改主題模板的操作方法都是非常簡單的,通常的步驟都是下載模板壓縮檔、解壓出模板目錄、上傳模板檔案到部落格系統相關目錄位置,然後登入部落格後台進入已安裝模板界面,點擊相關選項按鈕進行切換就可以了。下面部落格吧詳細介紹下 Emlog 部落格系統安裝主題模板的操作步驟。
1. 把下載的emlog部落格主題壓縮檔解壓得到主題模板目錄。
2. 把解壓出來的目錄檔案上傳到content/templates/目錄下。
3. 然後部落格後台,點擊右上角的“換模板”選項進入已安裝模板界面。
4. 該頁面會列出剛上傳的主題模板的縮略圖,點擊該縮略圖表示把該主題設定為部落格當前主題。
emlog結構詳細介紹
header.php篇
<?php
/*
Template Name:默認模板
模板名稱
Description:默認模板,簡潔優雅 ……
模板簡介
Version:1.2
模板版本號
Author:emlog
模板作者名稱
Author Url:http://域名
模板作者連結地址
Sidebar Amount:1
邊欄數目(一般是0,1或者2。0代表是沒有邊欄即單欄模板,1代表1個邊欄即二欄模板,2代表2個邊欄即三欄模板)
ForEmlog:5.0.0
emlog程式版本號
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
模板檔案開頭的判斷語句。檢查是否是函式EMLOG_ROOT的絕對地址,否就顯示error。
require_once View::getView('module');
公共模組載入項,載入module,這裡面包含了模板必須要的函式。
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www點w3點org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
聲明檔案,聲明了文檔的根元素是 html,它在公共標識符被定義為 "-//W3C//DTD XHTML 1.0 Strict//EN" 的 DTD 中進行了定義。瀏覽器將明白如何尋找匹配此公共標識符的 DTD。如果找不到,瀏覽器將使用公共標識符後面的 URL 作為尋找 DTD 的位置。
<html xmlns="http:///www點w3點org<cite class="highlight" highlight="true" style="background-image: none; background-position: initial initial; background-repeat: initial initial; "></cite>/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
meta原標記,這裡標記了為UTF-8格式
<title><?php echo $site_title; ?></title>
頁面的title標記,這裡輸出的是部落格名稱。
<meta name="keywords" content="<?php echo $site_key; ?>" />
meta原標記,這裡標記的是關鍵字。輸出部落格後台設定的關鍵字。
<meta name="description" content="<?php echo $site_description; ?>" />
meta原標記,這裡標記的是網站簡介信息。這裡輸出的是部落格後台設定的站點描述。在日誌內容頁面的時候輸出的是日誌的摘要。
<meta name="generator" content="emlog" />
meta原標記,這裡標記的是系統名稱,這裡輸出的是emlog。
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="<?php echo BLOG_URL; ?>xmlrpc.php?rsd" />
<link rel="wlwmanifest" type="application/wlwmanifest+xml" href="<?php echo BLOG_URL; ?>wlwmanifest.xml" />
這兩個元素主要供遠程發布使用,比如你使用Windows Live Write等桌面部落格編輯器來發布文章。
<link rel="alternate" type="application/rss+xml" title="RSS" href="<?php echo BLOG_URL; ?>rss.php" />
這裡是emlog部落格的RSS發布地址。
<link href="<?php echo TEMPLATE_URL; ?>main.css" rel="stylesheet" type="text/css" />
CSS載入連結,這裡載入的是main.css樣式檔案。該檔案存放在模板資料夾的根目錄下。
<script src="<?php echo BLOG_URL; ?>include/lib/js/common_tpl.js" type="text/javascript"></script>
JS檔案載入連結,這裡載入的是common_tpl.js檔案。該檔案存放於程式include/lib/js/目錄下,這個JS檔案主要用於鑲套評論。
<?php doAction('index_head'); ?>
頁面頭部外掛程式掛載鉤子。(主要用於外掛程式掛載一些CSS或者JS檔案)
</head>
heder頭部檔案到此結束,上面部分一般是不用修改。在移植模板或者製作模板的時候,樣式檔案是必須要修改載入的。如果有特效的話,也要在這裡載入一些JS檔案的。當然也可以在底部載入。
<body>
<div id="wrap">
<div id="header">
<h1><a href="<?php echo BLOG_URL; ?>"><?php echo $blogname; ?></a></h1>
站點名稱 站點連結
<h3><?php echo $bloginfo; ?></h3>
輸出部落格描述,輸出的是後台設定的部落格描述信息。
</div>
<div id="banner"><a href="<?php echo BLOG_URL; ?>"><img src="<?php echo BLOG_URL.Option::get('topimg'); ?>" height="134" width="960" /></a></div>
這裡是頁面頭部的banner圖片,這個只有在默認模板才有。不用理會,直接刪除就行。
<div id="nav"><?php blog_navi();?></div>
頁面頭部導航選單加函式。該函式位於module.php檔案,這個是emlog5.0新增加的與以往版本的區別。
log_list.php篇
<?php
/*
* 首頁日誌列表部分
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
注釋檔案頭,表明是日誌列表頁面。
模板檔案開頭的判斷語句。檢查是否是函式EMLOG_ROOT的絕對地址,否就顯示error。
<p id="content">
<p id="contentleft">
<?php doAction('index_loglist_top'); ?>
日誌列表頁的外掛程式鉤子,載入外掛程式所需要的檔案。如:em_ad外掛程式,RSS訂閱外掛程式等。。。
<?php foreach($logs as $value): ?>
日誌列表頁面列表循環開始。大體意思是設定變數$logs為$value。
<h2><?php topflg($value['top']); ?>
置頂日誌輸出函式,該函式位於module.php檔案。主要用於置頂日誌的顯示圖示,或者可以更改module.php檔案顯示【推薦】之類的效果。
<a href="<?php echo $value['log_url']; ?>"><?php echo $value['log_title']; ?></a>
帶超連結的日誌標題。
</h2>
<p class="date">作者:<?php blog_author($value['author']); ?>
作者名稱的輸出函式,該函式位於module.php檔案。
發布於:<?php echo gmdate('Y-n-j G:i l', $value['date']); ?>
日誌日期的輸出函式,該函式位於系統核心。一般不需要改動,如果想顯示不同樣式的日期格式,可以百度下PHP日期代碼。
<?php blog_sort($value['logid']); ?>
日誌分類的輸出函式,該函式位於module.php檔案
<?php editflg($value['logid'],$value['author']); ?>
日誌編輯函式,該函式位於module.php檔案。
</p>
<?php echo $value['log_description']; ?>
日誌摘要輸出變數,該變數位於系統核心。
<p class="tag"><?php blog_tag($value['logid']); ?>
日誌標籤輸出函式,該函式位於module.php檔案
</p>
<p class="count">
<a href="<?php echo $value['log_url']; ?>#comments">評論(<?php echo $value['comnum']; ?>)</a>
帶評論地址超連結的評論數量。點擊該地址可以到該日誌的評論列表。
<a href="<?php echo $value['log_url']; ?>#tb">引用(<?php echo $value['tbcount']; ?>)</a>
帶引用超連結地址的引用數量。點擊該地址可以到引用通告地址顯示頁面。
<a href="<?php echo $value['log_url']; ?>">瀏覽(<?php echo $value['views']; ?>)</a>
帶日誌超連結的瀏覽數量。點擊該地址可以到該日誌頁面。
</p>
<p style="clear:both;"></p>
<?php endforeach; ?>
日誌列表頁面的日誌列表循環結束。
<p id="pagenavi">
<?php echo $page_url;?>
日誌列表分頁函式,該函式位於系統核心。
</p>
</p><!-- end #contentleft-->
<?php
include View::getView('side');
載入side.php檔案,即載入邊欄。(如果是單欄模板不用載入該檔案)
include View::getView('footer');
載入footer.php檔案,即載入頁面底部。(一般顯示的是著作權,統計代碼之類,放在通用底部的代碼。)
?>
echo_log.php篇
<?php
/*
* 閱讀日誌頁面
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
注釋檔案頭,表明是閱讀日誌頁面。
模板檔案開頭的判斷語句。檢查是否是函式EMLOG_ROOT的絕對地址,否就顯示error。
<div id="content">
<div id="contentleft">
<h2><?php topflg($top); ?>
置頂日誌輸出函式,該函式位於module.php檔案。主要用於置頂日誌的顯示圖示,或者可以更改module.php檔案顯示【推薦】之類的效果。(和list_log.php的函式為同一個函式。)
<?php echo $log_title; ?>
日誌標題的輸出變數。該變數位於系統核心。
</h2>
<p class="date">作者:
<?php blog_author($author); ?>
作者名稱的輸出函式,該函式位於module.php檔案。
發布於:<?php echo gmdate('Y-n-j G:i l', $date); ?>
日誌日期的輸出函式,該函式位於系統核心。一般不需要改動,如果想顯示不同樣式的日期格式,可以百度下PHP日期代碼。
<?php blog_sort($logid); ?>
日誌分類的輸出函式,該函式位於module.php檔案
<?php editflg($logid,$author); ?>
日誌編輯函式,該函式位於module.php檔案。
</p>
<?php echo $log_content; ?>
日誌文章內容的輸出變數。該變數位於系統核心。
<p class="tag">
<?php blog_tag($logid); ?>
日誌標籤的輸出函式。該函式位於module.php檔案。
</p>
<?php doAction('log_related', $logData); ?>
日誌閱讀內容頁面的外掛程式鉤子。主要載入外掛程式檔案。如:相關日誌外掛程式,心情頂踩外掛程式,日誌頂踩外掛程式之類。
<div class="nextlog">
<?php neighbor_log($neighborLog); ?>
上一篇 下一篇列表輸出函式,該函式位於module.php檔案。
</div>
<?php blog_trackback($tb, $tb_url, $allow_tb); ?>
引用通告地址顯示函式,該函式位於module.php檔案。(注意:請百度下引用通告的意思。這裡只要顯示引用通告的地址就可以了,不用做超連結的。)
<?php blog_comments($comments); ?>
評論列表輸出函式,該函式位於module.php檔案,後期舞城會詳細介紹。
<?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?>
評論表單輸出函式,該函式位於module.php檔案,後期舞城會詳細介紹。
<div style="clear:both;"></div>
</div><!--end #contentleft-->
<?php
include View::getView('side');
載入side.php檔案,即載入邊欄。(如果是單欄模板不用載入該檔案)
include View::getView('footer');
載入footer.php檔案,即載入頁面底部。(一般顯示的是著作權,統計代碼之類,放在通用底部的代碼。)
?>
page.php篇
<?php
/*
* 自建頁面模板
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
<div id="content">
<div id="contentleft">
<h2><?php echo $log_title; ?>
自建頁面的標題輸出,該變數位於系統核心。
</h2>
<?php echo $log_content; ?>
自建頁面的內容輸出,該變數位於系統核心。
<?php blog_comments($comments); ?>
評論列表
<?php blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark); ?>
評論表單
<div style="clear:both;"></div>
</div><!--end #contentleft-->
<?php
include View::getView('side');
side.php檔案載入。即載入邊欄。
include View::getView('footer');
footer.php檔案載入,即載入通用底部。
?>
side.php 篇
<?php
/*
* 側邊欄
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
<ul id="sidebar">
從這裡開始
<?php
$widgets = !empty(
$options_cache['widgets1']) ? unserialize(
$options_cache['widgets1']) : array();
doAction('diff_side');
邊欄的外掛程式鉤子,主要用於載入外掛程式的檔案。
foreach ($widgets as $val)
{
$widget_title = @unserialize($options_cache['widget_title']);
$custom_widget = @unserialize($options_cache['custom_widget']);
if(strpos($val, 'custom_wg_') === 0)
{
$callback = 'widget_custom_text';
if(function_exists($callback))
{
call_user_func(
$callback, htmlspecialchars(
$custom_widget[$val]['title']),
$custom_widget[$val]['content']);
}
}else{
$callback = 'widget_'.$val;
if(function_exists($callback))
{
preg_match("/^.*\s\((.*)\)/", $widget_title[$val], $matchs);
$wgTitle = isset($matchs[1]) ? $matchs[1] : $widget_title[$val];
call_user_func($callback, htmlspecialchars($wgTitle));
}
}
}
?>
到這裡以上的所有代碼都不用修改,這些主要是用於載入邊欄組件。其函式位於module.php檔案。
<div class="rss">
<a href="<?php echo BLOG_URL; ?>rss.php" title="RSS訂閱"><img src="<?php echo TEMPLATE_URL; ?>images/rss.gif" alt="訂閱Rss"/></a>
含有RSS訂閱連結的圖片超連結。
</div>
</ul><!--end #siderbar-->
side.php檔案基本上是不用動的,如果是單欄模板的話,這個頁面就可以刪除掉。
footer.php 篇
<?php
/*
* 底部信息
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
</div><!--end #content-->
<div style="clear:both;"></div>
<div id="footerbar">
Powered by <a href="http://emlog官網網址" title="emlog <?php echo Option::EMLOG_VERSION;?>">emlog</a>
emlog程式官網超連結,title顯示的是emlog版本號。請支持國產開源的emlog程式,保留他們的著作權。
<a href="http://備案信息網網址" target="_blank"><?php echo $icp; ?></a>
帶有超連結的備案號。備案號是在後台設定的。
<?php echo $footer_info; ?>
頁面底部信息輸出變數,可以在後台設定。可以添加統計代碼等信息。
<?php doAction('index_footer'); ?>
</div><!--end #footerbar-->
</div><!--end #wrap-->
</body>
</html>
module.php上篇
<?php
/*
* 側邊欄組件、頁面模組
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
<?php
//widget:blogger
邊欄blogger組件
function widget_blogger($title){
global $CACHE;
$user_cache = $CACHE->readCache('user');
$name = $user_cache[1]['mail'] != '' ? "<a href=\"mailto:".$user_cache[1]['mail']."\">"
.$user_cache[1]['name']."</a>" : $user_cache[1]['name'];?>
讀取blogger快取。
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="bloggerinfo">
<div id="bloggerinfoimg">
<?php if (!empty($user_cache[1]['photo']['src'])): ?>
如果有用戶圖片,就顯示用戶圖片。
<img src="<?php echo BLOG_URL.$user_cache[1]['photo']['src']; ?>"
width="<?php echo $user_cache[1]['photo']['width']; ?>"
height="<?php echo $user_cache[1]['photo']['height']; ?>" alt="blogger" />
顯示用戶圖片
<?php endif;?>
</div>
<p><b>
<?php echo $name; ?>
輸出用戶名稱
</b>
<?php echo $user_cache[1]['des']; ?>
輸出用戶的個人描述
</p>
</ul>
</li>
<?php }?>
<?php
//widget:日曆
邊欄日曆組件
function widget_calendar($title){ ?>
<li>
<h3><span><?php echo $title; ?></span></h3>
<div id="calendar">
</div>
這個id="calendar"千萬別刪除喔。是日曆的顯示樣式。
<script>sendinfo('<?php echo Calendar::url(); ?>','calendar');</script>
有文章的日曆項鍊接。
</li>
<?php }?>
<?php
//widget:標籤
邊欄標籤組件
function widget_tag($title){
global $CACHE;
$tag_cache = $CACHE->readCache('tags');?>
讀取標籤快取。
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="blogtags">
<?php foreach($tag_cache as $value): ?>
標籤循環開始
<span style="font-size:<?php echo $value['fontsize']; ?>pt; line-height:30px;">
標籤字型大小樣式,根據該標籤文章數量來決定大小。
<a href="<?php echo Url::tag($value['tagurl']); ?>"
title="<?php echo $value['usenum']; ?> 篇日誌"><?php echo $value['tagname']; ?></a>
帶超連結的標籤。
</span>
<?php endforeach; ?>
標籤循環結束
</ul>
</li>
<?php }?>
<?php
//widget:分類
邊欄 分類 組件
function widget_sort($title){
global $CACHE;
$sort_cache = $CACHE->readCache('sort'); ?>
讀取分類快取
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="blogsort">
<?php foreach($sort_cache as $value): ?>
分類循環開始
<li>
<a href="<?php echo Url::sort($value['sid']); ?>">
<?php echo $value['sortname']; ?>(<?php echo $value['lognum'] ?>)
</a>
帶分類超連結的分類名稱+該分類日誌數量
<a href="<?php echo BLOG_URL; ?>rss.php?sort=<?php echo $value['sid']; ?>">
<img src="<?php echo TEMPLATE_URL; ?>images/rss.png" alt="訂閱該分類"/>
</a>
帶分類訂閱連結的RSS圖片(位於該分類的名稱後面)
</li>
<?php endforeach; ?>
分類循環結束
</ul>
</li>
<?php }?>
<?php
//widget:最新碎語
邊欄 最新碎語 組件
function widget_twitter($title){
global $CACHE;
$newtws_cache = $CACHE->readCache('newtw');
$istwitter = Option::get('istwitter');
?>
讀取最新碎語快取
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="twitter">
<?php foreach($newtws_cache as $value): ?>
最新碎語循環開始
<?php $img = empty($value['img']) ? "" :
'<a title="查看圖片" class="t_img" href="'.BLOG_URL.str_replace('thum-', '', $value['img']).'" target="_blank"> </a>';?>
這個是emlog5.0新增加的功能,碎語圖片功能。設定變數$img的圖片地址。
<li><?php echo $value['t']; ?><?php echo $img;?><p><?php echo smartDate($value['date']); ?></p>
輸出碎語(文字+圖片) 發布碎語的時間。
</li>
<?php endforeach; ?>
最新碎語循環結束。
<?php if ($istwitter == 'y') :?>
<p><a href="<?php echo BLOG_URL . 't/'; ?>">更多»</a></p>
<?php endif;?>
判斷是否開啟碎語,開啟的話顯示帶碎語頁面超連結的更多字樣。
</ul>
</li>
<?php }?>
<?php
//widget:最新評論
邊欄 最新評論 組件
function widget_newcomm($title){
global $CACHE;
$com_cache = $CACHE->readCache('comment');
?>
讀取最新評論快取
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="newcomment">
<?php
foreach($com_cache as $value):
最新評論循環開始
$url = Url::comment($value['gid'], $value['page'], $value['cid']);
設定變數$url為評論的連結地址
?>
<li id="comment"><?php echo $value['name']; ?>
輸出評論者的名稱
<br />
<a href="<?php echo $url; ?>"><?php echo $value['content']; ?></a>
帶評論超連結的評論內容
</li>
<?php endforeach; ?>
最新評論循環結束
</ul>
</li>
<?php }?>
<?php
//widget:最新日誌
邊欄 最新日誌 組件
function widget_newlog($title){
global $CACHE;
$newLogs_cache = $CACHE->readCache('newlog');
?>
讀取最新日誌快取。
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="newlog">
<?php foreach($newLogs_cache as $value): ?>
最新日誌循環開始
<li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
帶日誌超連結的日誌標題
</li>
<?php endforeach; ?>
最新日誌循環結束
</ul>
</li>
<?php }?>
<?php
//widget:熱門日誌
邊欄 熱門日誌 組件
function widget_hotlog($title){
$index_hotlognum = Option::get('index_hotlognum');
$Log_Model = new Log_Model();
$randLogs = $Log_Model->getHotLog($index_hotlognum);?>
讀取熱門日誌設定
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="hotlog">
<?php foreach($randLogs as $value): ?>
熱門日誌循環開始
<li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
帶日誌超連結的日誌標題
</li>
<?php endforeach; ?>
熱門日誌循環結束
</ul>
</li>
<?php }?>
<?php
//widget:隨機日誌
邊欄 隨機日誌 組件
function widget_random_log($title){
$index_randlognum = Option::get('index_randlognum');
$Log_Model = new Log_Model();
$randLogs = $Log_Model->getRandLog($index_randlognum);?>
讀取隨機日誌設定
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="randlog">
<?php foreach($randLogs as $value): ?>
隨機日誌循環開始
<li>
<a href="<?php echo Url::log($value['gid']); ?>"><?php echo $value['title']; ?></a>
帶日誌超連結的日誌標題
</li>
<?php endforeach; ?>
隨機日誌循環結束
</ul>
</li>
<?php }?>
<?php
//widget:搜尋
邊欄 搜尋 組件
function widget_search($title){ ?>
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="logserch">
<form name="keyform" method="get" action="<?php echo BLOG_URL; ?>index.php">
<input name="keyword" class="search" type="text" />
</form>
from內的name method和action不要更改,搜尋功能就不會出錯。
</ul>
</li>
<?php } ?>
<?php
//widget:歸檔
邊欄 歸檔 組件
function widget_archive($title){
global $CACHE;
$record_cache = $CACHE->readCache('record');
?>
讀取歸檔快取
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="record">
<?php foreach($record_cache as $value): ?>
歸檔循環開始
<li>
<a href="<?php echo Url::record($value['date']); ?>">
<?php echo $value['record']; ?>(<?php echo $value['lognum']; ?>)
</a>
帶歸檔時間超連結的歸檔時間
</li>
<?php endforeach; ?>
歸檔循環結束
</ul>
</li>
<?php } ?>
<?php
//widget:自定義組件
邊欄 自定義 組件
function widget_custom_text($title, $content){ ?>
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul>
<?php echo $content; ?>
輸出用戶設定的自定義代碼
</ul>
</li>
<?php } ?>
<?php
//widget:連結
邊欄 連結 組件
function widget_link($title){
global $CACHE;
$link_cache = $CACHE->readCache('link');
?>
讀取連結快取
<li>
<h3><span><?php echo $title; ?></span></h3>
<ul id="link">
<?php foreach($link_cache as $value): ?>
連結循環開始
<li>
<a href="<?php echo $value['url']; ?>" title="<?php echo $value['des']; ?>" target="_blank">
<?php echo $value['link']; ?>
</a>
帶連結站點超連結的連結名稱
</li>
<?php endforeach; ?>
連結循環結束
</ul>
</li>
<?php }?>
module.php中篇
<?php
//blog:導航
頁面頂部的導航函式
function blog_navi(){
global $CACHE;
$navi_cache = $CACHE->readCache('navi');
?>
讀取導航快取
<ul>
<?php
foreach($navi_cache as $value):
導航循環開始
if($value['url'] == 'admin' && (ROLE == 'admin' || ROLE == 'writer')):
?>
<li class="common"><a href="<?php echo BLOG_URL; ?>admin/write_log.php">寫日誌</a></li>
<li class="common"><a href="<?php echo BLOG_URL; ?>admin/">管理站點</a></li>
<li class="common"><a href="<?php echo BLOG_URL; ?>admin/?action=logout">退出</a></li>
<?php
continue;
endif;
判斷是否是管理員登入,是就顯示管理員相關功能連結
$newtab = $value['newtab'] == 'y' ? 'target="_blank"' : '';
$value['url'] = $value['isdefault'] == 'y' ? BLOG_URL . $value['url'] : trim($value['url'], '/');
$current_tab = (BLOG_URL . trim(Dispatcher::setPath(), '/') == $value['url']) ? 'current' : 'common';
?>
設定相關變數,不需要改動。$newtab (是否是新視窗打開,後台設定) $value['url'] (導航連結) $current_tab(導航的class類,當前頁面的類為current,非當前頁的類為common)
<li class="<?php echo $current_tab;?>"><a href="<?php echo $value['url']; ?>" <?php echo $newtab;?>><?php echo $value['naviname']; ?></a></li>
輸出帶導航地址超連結的導航名稱。
<?php endforeach; ?>
導航循環結束。
</ul>
<?php }?>
<?php
//blog:置頂
function topflg($istop){
$topflg = $istop == 'y' ? "<img src=\"".TEMPLATE_URL."/images/import.gif\" title=\"置頂日誌\" /> " : '';
echo $topflg;
}
?>
置頂日誌函式,主要用於log_list.php echo_log.php檔案。
<?php
//blog:編輯
function editflg($logid,$author){
$editflg = ROLE == 'admin' || $author == UID ? '<a href="'.BLOG_URL.'admin/write_log.php?action=edit&gid='.$logid.'">編輯</a>' : '';
echo $editflg;
}
?>
日誌編輯函式,主要用於echo_log.php page.php檔案,也可以用在log_list.php檔案。
<?php
//blog:分類
function blog_sort($blogid){
global $CACHE;
$log_cache_sort = $CACHE->readCache('logsort');
?>
<?php if(!empty($log_cache_sort[$blogid])): ?>
分類:<a href="<?php echo Url::sort($log_cache_sort[$blogid]['id']); ?>"><?php echo $log_cache_sort[$blogid]['name'];?></a>
<?php endif;?>
<?php }?>
日誌分類函式,主要用於echo_log.php檔案,也可以用在log_list.php檔案。
<?php
//blog:日誌標籤
function blog_tag($blogid){
global $CACHE;
$log_cache_tags = $CACHE->readCache('logtags');
if (!empty($log_cache_tags[$blogid])){
$tag = '標籤:';
foreach ($log_cache_tags[$blogid] as $value){
$tag .= " <a href=\"".Url::tag($value['tagurl'])."\">".$value['tagname'].'</a>';
}
echo $tag;
}
}
?>
日誌標籤函式,主要用於echo_log.php檔案。
<?php
//blog:日誌作者
function blog_author($uid){
global $CACHE;
$user_cache = $CACHE->readCache('user');
$author = $user_cache[$uid]['name'];
$mail = $user_cache[$uid]['mail'];
$des = $user_cache[$uid]['des'];
$title = !empty($mail) || !empty($des) ? "title=\"$des $mail\"" : '';
echo '<a href="'.Url::author($uid)."\" $title>$author</a>";
}
?>
日誌作者函式,主要用於echo_log.php檔案。
<?php
//blog:相鄰日誌
function neighbor_log($neighborLog){
extract($neighborLog);?>
<?php if($prevLog):?>
« <a href="<?php echo Url::log($prevLog['gid']) ?>"><?php echo $prevLog['title'];?></a>
<?php endif;?>
<?php if($nextLog && $prevLog):?>
|
<?php endif;?>
<?php if($nextLog):?>
<a href="<?php echo Url::log($nextLog['gid']) ?>"><?php echo $nextLog['title'];?></a>»
<?php endif;?>
<?php }?>
相鄰日誌函式(即上一篇 下一篇),主要用於echo_log.php檔案。
<?php
//blog:引用通告
function blog_trackback($tb, $tb_url, $allow_tb){
if($allow_tb == 'y' && Option::get('istrackback') == 'y'):?>
<div id="trackback_address">
<p>引用地址: <input type="text" style="width:350px" class="input" value="<?php echo $tb_url; ?>">
<a name="tb"></a></p>
</div>
<?php endif; ?>
<?php foreach($tb as $key=>$value):?>
<ul id="trackback">
<li><a href="<?php echo $value['url'];?>" target="_blank"><?php echo $value['title'];?></a></li>
<li>BLOG: <?php echo $value['blog_name'];?></li><li><?php echo $value['date'];?></li>
</ul>
<?php endforeach; ?>
<?php }?>
module.php下篇
<?php
//blog:評論列表
function blog_comments($comments){
extract($comments);
if($commentStacks): ?>
<a name="comments"></a>
<p class="comment-header"><b>評論:</b></p>
<?php endif; ?>
<?php
$isGravatar = Option::get('isgravatar');
foreach($commentStacks as $cid):
評論列表循環開始(注意!)
$comment = $comments[$cid];
$comment['poster'] = $comment['url'] ? '<a href="'.$comment['url'].'" target="_blank">'.$comment['poster'].'</a>' :$comment['poster'];
?>
以上為Gravatar頭像,地址,內容的相關變數設定,一般無需更改,除了紅色字型部分。
<div class="comment" id="comment-<?php echo $comment['cid']; ?>">
該ID為評論列表的編號ID
<a name="<?php echo $comment['cid']; ?>"></a>
name為評論列表的編號
<?php if($isGravatar == 'y'): ?><div class="avatar"><img src="<?php echo getGravatar($comment['mail']); ?>" /></div><?php endif; ?>
判斷Gravatar頭像是否開啟,開啟就顯示Gravatar頭像。
<div class="comment-info">
<b>
<?php echo $comment['poster']; ?>
評論人名稱
</b><br /><span class="comment-time">
<?php echo $comment['date']; ?>
評論時間
</span>
<div class="comment-content">
<?php echo $comment['content']; ?>
評論內容
</div>
<div class="comment-reply">
<a href="#comment-<?php echo $comment['cid']; ?>" onclick="commentReply(<?phpecho $comment['cid']; ?>,this)">回復</a>
回復該評論的連結
</div>
</div>
<?php blog_comments_children($comments, $comment['children']); ?>
子評論列表函式。
</div>
<?php endforeach; ?>
評論列表循環結束(注意)
<div id="pagenavi">
<?php echo $commentPageUrl;?>
評論分頁輸出變數
</div>
<?php }?>
<?php
//blog:子評論列表
function blog_comments_children($comments, $children){
$isGravatar = Option::get('isgravatar');
foreach($children as $child):
子評論列表循環開始
$comment = $comments[$child];
$comment['poster'] = $comment['url'] ? '<a href="'.$comment['url'].'" target="_blank">'.$comment['poster'].'</a>' :$comment['poster'];
?>
以上為Gravatar頭像,地址,內容的相關變數設定,一般無需更改
<div class="comment comment-children" id="comment-<?php echo $comment['cid']; ?>">
該ID為評論列表的編號ID
<a name="<?php echo $comment['cid']; ?>"></a>
name為評論列表的編號
<?php if($isGravatar == 'y'): ?><div class="avatar"><img src="<?php echo getGravatar($comment['mail']); ?>" /></div><?php endif; ?>
判斷Gravatar頭像是否開啟,開啟就顯示Gravatar頭像。
<div class="comment-info">
<b>
<?php echo $comment['poster']; ?>
評論人名稱
</b><br /><span class="comment-time">
<?php echo $comment['date']; ?>
評論時間
</span>
<div class="comment-content">
<?php echo $comment['content']; ?>
評論內容
</div>
<?php if($comment['level'] < 4): ?>
鑲套級數,這裡為4級鑲套。
<div class="comment-reply">
<a href="#comment-<?php echo $comment['cid'];?>" onclick="commentReply(<?php echo $comment['cid']; ?>,this)">回復</a>
回復該評論的連結
</div><?php endif; ?>
鑲套級數判斷結束
</div>
<?php blog_comments_children($comments, $comment['children']);?>
子評論列表函式。
</div>
<?php endforeach; ?>
子評論列表循環結束。
<?php }?>
<?php
//blog:發表評論表單
function blog_comments_post($logid,$ckname,$ckmail,$ckurl,$verifyCode,$allow_remark){
if($allow_remark == 'y'): ?>
<div id="comment-place">
<div class="comment-post" id="comment-post">
<div class="cancel-reply" id="cancel-reply" style="display:none"><a href="javascript:void(0);" onclick="cancelReply()">取消回復</a></div>
<p class="comment-header"><b>發表評論:</b><a name="respond"></a></p>
<form method="post" name="commentform" action="<?php echo BLOG_URL; ?>index.php?action=addcom" id="commentform">
<input type="hidden" name="gid" value="<?php echo $logid; ?>" />
<?php if(ROLE == 'visitor'): ?>
<p>
<input type="text" name="comname" maxlength="49" value="<?php echo $ckname; ?>" size="22" tabindex="1">
<label for="author"><small>暱稱</small></label>
</p>
<p>
<input type="text" name="commail" maxlength="128" value="<?php echo $ckmail; ?>" size="22" tabindex="2">
<label for="email"><small>郵件地址 (選填)</small></label>
</p>
<p>
<input type="text" name="comurl" maxlength="128" value="<?php echo $ckurl; ?>" size="22" tabindex="3">
<label for="url"><small>個人主頁 (選填)</small></label>
</p>
<?php endif; ?>
<p><textarea name="comment" id="comment" rows="10" tabindex="4"></textarea></p>
<p><?php echo $verifyCode; ?> <input type="submit" id="comment_submit" value="發表評論" tabindex="6" /></p>
<input type="hidden" name="pid" id="comment-pid" value="0" size="22" tabindex="1"/>
</form>
</div>
</div>
<?php endif; ?>
<?php }?>
評論表單裡面其實沒什麼好介紹,主要是紅色標出的name id之類的別弄錯,基本上是沒問題的。還有就是鑲套評論所使用到的ID,要保留。如果非要更改也要在common_tpl.js檔案更改。
404.php篇
404錯誤頁面,這個是emlog5.0新增加的頁面。可能是因為官方論壇有網友提到無法自定義404錯誤,或者更有說emlog根本就沒有404頁面。所以emlog官方索性把404錯誤頁面放到模板中來,讓用戶自己定義。
這個其實是很簡單的頁面,主要是由CSS樣式與html語言組成。
<?php
/*
* 自定義404頁面
*/
if(!defined('EMLOG_ROOT')) {exit('error!');}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http:///www點w3點org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http:///www點w3點org<cite class="highlight" highlight="true" style="background-image: none; background-position: initial initial; background-repeat: initial initial; "></cite>/1999/xhtml" lang="zh-CN">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>錯誤提示-頁面未找到</title>
錯誤頁面標題
<style type="text/css">
<!--
body {
background-color:#F7F7F7;
font-family: Arial;
font-size: 12px;
line-height:150%;
}
.main {
background-color:#FFFFFF;
font-size: 12px;
color: #666666;
width:650px;
margin:60px auto 0px;
border-radius: 10px;
padding:30px 10px;
list-style:none;
border:#DFDFDF 1px solid;
}
.main p {
line-height: 18px;
margin: 5px 20px;
}
-->
</style>
CSS樣式
</head>
<body>
<div class="main">
<p>抱歉,你所請求的頁面不存在!</p>
<p><a href="javascript:history.back(-1);">«點擊返回</a></p>
404錯誤頁面提示信息
</div>
</body>
</html>