織夢(mèng)二次開(kāi)發(fā)如何自定義搜索和分頁(yè)

步驟:
1.使用DEDE自帶的一個(gè)工具,生成一個(gè)表單,通過(guò)該表單,可以提交你按照什么條件來(lái)檢索內容.
2.后臺->核心->內容模板管理->自定義搜索 , 這里你可以選擇自己需要的條件,然后就可以創(chuàng )建一個(gè)表單了, 該表單提交后,會(huì )把結果通過(guò) 自定義搜索結果頁(yè)模板 顯示內容,默認的模板文件叫 advancedsearch.htm
3. 先測試下,把dede自帶的模板文件advancedsearch.htm拷貝到 templets/default / 下即可.
4.使用即可
課后練習題:
需求: 把檢索結果頁(yè)面,換成a67 提供的檢索結果頁(yè)面. 通用列表頁(yè).html, 并完成分頁(yè)效果.
步驟:
1. 把通用列表頁(yè).html 的內容復制拷貝到 advancesearch.htm
2. 修改 advancesearch.htm 的相關(guān)設置,網(wǎng)頁(yè)編碼,引入資源,圖片的路徑. 可以參考index.htm 模板內容
1.把默認的模板文件和檢索的響應文件,做成自己.
把默認提交的 頁(yè)面 advancedsearch.php 換成 mysearch.php ,先在 plus/ 創(chuàng )建 mysearch.php
把默認的檢索的模板文件advancesearch.htm,換成 mysearch.htm
現在我們編寫(xiě)自己的 mysearch.php ,了解一下 dede 是怎樣把結果給你查詢(xún)并顯示.
mysearch.php 核心代碼:


1.可以再{dede:datalist} 中嵌入某些{dede}標簽
2.{dede:global.autoindex/} 無(wú)效
需求做出我們自己的分頁(yè)導航
這里,我們需要使用另外一個(gè)標簽,該標簽專(zhuān)門(mén)用于分頁(yè)導航 {dede:pagelist/}
在 mysearch.htm 加入該標簽
在適當的位置加入該標簽,在實(shí)際開(kāi)發(fā)中,我們往往需要對分頁(yè)導航條,進(jìn)行自定義。

步驟:
1.顯示提示信息的文字.
2.對導航的樣式進(jìn)行二次修改.
我們?yōu)榱瞬蝗バ薷?DataListCp源碼, 可以使用面向對象的繼承,然后重寫(xiě)一個(gè)方法.
在mysearch.php
class MyDataListCP extends DataListCP{
function GetPageList(){

}
這里有一個(gè)知識點(diǎn)補充
有時(shí)候,你們會(huì )看到類(lèi)似這樣的用法,就直接把一個(gè)變量來(lái)使用,而沒(méi)有 $_GET[‘名字’];
extract();該函數可以把數組數據導出到當前符號表,這樣就可以直接通過(guò) $索引名 來(lái)訪(fǎng)問(wèn)

如何在檢索頁(yè)面 mysearch.htm 中顯示我們的欄目列表
思路:傳統的方法,就是引入 head.htm 文件.
{dede:include } 不好使用.
正確思路
因為 mysearch.html 是在 mysearch.php 引入 , 則我們可以在 mysearch.php文件中獲取到欄目信息 dede_arctype 獲取信息.
在mysearch.php 中加入了代碼:

在mysearch.hml 中代碼如何取出

這里有話(huà)說(shuō): <?php echo GetOneTypeUrlA($type);?> 可以得到列表頁(yè)的url地址,但是要求$type是該欄目dede_arctype 表中取出的完整信息.
另外一種寫(xiě)法:

需求: 在搜索時(shí),帶上 typeid,area , year 這三個(gè)參數值

思路:
localhost/dedecms/plus/mysearch.php?typeid=2&area=大陸&year=2010
我們對mysearch.php 進(jìn)行開(kāi)發(fā).
增加如下代碼:
1.


思考,如何把 year 和 area 加入,在mysearch.php 增加如下代碼:

繼續思考: 分頁(yè)操作會(huì )出現什么? 在分頁(yè)時(shí)候,我們會(huì )丟失查詢(xún)條件.
這里處理,要使用 $dlist 有一個(gè)函數,該函數可以保存上次提交的信息.
具體的代碼如下改進(jìn):

顯示自己網(wǎng)站的所有分類(lèi)檢索
步驟,先找到位置. 添加如下代碼:

完成點(diǎn)擊列表頁(yè)的某個(gè)連接,跳轉到對應的檢索頁(yè)面


需求: 完成列表頁(yè)小星星的評分功能
思考:
1.把評分值,傳遞給一個(gè)函數,讓該函數根據 分值,返回一個(gè)image的字符串,并顯示.
步驟:
前臺模板文件:


需求: 當我們點(diǎn)擊檢索結果的某個(gè)電影超鏈接時(shí),如何跳轉到對應的內容頁(yè)

思路: 是否能夠使用{dede:field.arcurl/}
步驟: 對 datalistcp.class.php 做了二次改造

<a href="http://zqbgds.blog.163.com/blog/{dede:field.arcurl/}" target="_blank"><img src="http://zqbgds.blog.163.com/blog/{dede:field.litpic/}" /></a>
知識點(diǎn): dede提供了一堆幫助類(lèi). 這些工具類(lèi)的函數可以直接使用.
現在,我先給大家說(shuō)說(shuō) GetOneArchive(); 的用處.
需求:完成列表頁(yè)昨天更新功能

這里,我們的代碼是

需求: 對列表頁(yè)評分高低排序顯示


并且對arclist標簽源碼,修改
else if($orderby == 'pfz') $ordersql = " order by addf.pfz $orderWay";
需求: 如何從外站來(lái)采集自己需要的數據
我們從 www.67.com 采集數據
知識點(diǎn):
1. 了解php 是如何通過(guò)Http協(xié)議發(fā)送請求,抓取數據.(我們先使用工具,再用程序)
2. 正則表達式
使用工具:
步驟:
1.首先找到要抓取的對象(頁(yè)面 【列表頁(yè)和內容頁(yè)】)
列表頁(yè)地址 http://www.a67.com/list/1/p.2
內容頁(yè): http://www.a67.com/movie/232439
2.在dede后臺創(chuàng )建采集點(diǎn)
后臺->采集->采集節點(diǎn)管理->創(chuàng )建采集點(diǎn)
在 dede/manage/templets/co_add_step0.htm 做修改
$dsql->SetQuery("Select id,typename From `dede_channeltype` where id in(1,2,18) order by id asc ");
3.然后我們創(chuàng )建采集點(diǎn),先配置基本信息

并設置內容獲取規則!

真的采集
到采集點(diǎn)管理,點(diǎn)擊采集即可
然后倒入到數據庫中即可
看看如何采集標題
如何自定義PHP程序來(lái)完成數據采集
知識點(diǎn): 1. HTTP協(xié)議 2. 如何同PHP代碼來(lái)發(fā)送HTTP請求和接收HTTP響應(HTML文本) 3. 如何對返回的HTML文本做正則處理 4. 如何保存數據.
補充HTTP流程(時(shí)序圖)

最后的代碼是:
Mycatch.php
<?php
set_time_limit (100);
//1. 連接到 www.a67.com
$fp=fsockopen("www.a67.com",80,$errno,$errstr,30);
if(!$fp){
die("連接失敗 $errno - $errstr ");
}
//2.構建HTTP協(xié)議串發(fā)送給www.a67.com, 去抓取 http://www.a67.com/movie/229813的
//內容
$http_str="GET /list/1/p.2 HTTP/1.1\r\n";
$http_str.="HOST: www.a67.com\r\n";
$http_str.="Connection: close\r\n\r\n";
//發(fā)送HTTP請求信息
fwrite($fp,$http_str,strlen($http_str));
$res_str='';
while(!feof($fp)){
$res_str.=fread($fp,1024);
}
fclose($fp);
//file_put_contents("d:/my.log",$res_str);
//從$res_str取出圖片地址,然后再從新抓取圖片
$reg='/<img alt="[^"]*" title="[^"]*" src="http://zqbgds.blog.163.com/blog/([^"]*)"/';
preg_match_all($reg,$res_str,$arr);
/* echo "<pre>";
var_dump($arr[1]);
echo "</pre>";*/
//遍歷$arr[1]
foreach($arr[1] as $val){
$fp=fsockopen('img.a67.com',80);
//去掉 前面的 http://img.a67.com
$part_path=str_replace('http://img.a67.com/','',$val);
$fileinfo=pathinfo($part_path);
$http_str="GET $part_path HTTP/1.1\r\n";
$http_str.="HOST: img.a67.com\r\n";
$http_str.="Connection: close\r\n\r\n";
fwrite($fp,$http_str,strlen($http_str));
$res_str='';
while(!feof($fp)){
$res_str.=fread($fp,1024);
}
fclose($fp);
// header("content-type: image/jpeg");
$str_pos=strpos($res_str,"\r\n\r\n");
$img_str=substr($res_str,$str_pos+12);
//保存到文件中
$filename=$fileinfo['basename'];
file_put_contents("./myimages/$filename",$img_str);
// echo $img_str;
// die();
//echo $part_path."<br/>";
}
die("ok");
// echo "<pre>";
// var_dump($arr);
// echo "</pre>";
?>
思路:
1.要設計新的表.
2.我們需要使用dede支持的開(kāi)發(fā)自定義模塊功能. 言外之意,dede 自己就給我們提供非常強大的預定義的模塊.(會(huì )員管理、會(huì )員中心…),如果你想看看還有哪些.

提示: 在工作,盡量找一個(gè)成型的功能模塊,看看別人如何開(kāi)發(fā). 我們這里準 參考問(wèn)答模塊來(lái),開(kāi)發(fā)我們自己的影評模塊
熟悉一下dede的自帶的輕量級的MVC框架.[聽(tīng)點(diǎn) : dede MVC ,MVC本身.]
MVC核心思想( 把數據的輸入,數據處理和數據的顯示分離,,減少程序的耦合性.)
原理示意圖:

學(xué)習一下DEDE的 mvc 框架,參考 ask 模塊的代碼和結構.
我們來(lái)開(kāi)發(fā)一個(gè)非常簡(jiǎn)單的 雇員管理系統(完成 crud 操作)
步驟:
1.在 dedecms的主目錄下創(chuàng )建了一個(gè) empmange的模塊

2.寫(xiě)代碼
在empmanage 目錄創(chuàng )建 index.php 文件, 該文件就是入口文件.
整個(gè)代碼現在完成,參考的代碼是 empmange文件夾所有內容.

正式開(kāi)發(fā)我們的影評自定義模塊
先設計數據表(設計表的依據[1.根據需求文檔, 2. 參考界面])
評論表 comments
create table a67_comments (
id int unsigned primary key auto_increment, /*主鍵*/
userid mediumint(8) unsigned not null default 0, /*因為userid 和 dede_member 表 mid是外鍵關(guān)系*/
title varchar(128) not null default '', /*標題*/
content longtext not null default '',
addtime int unsigned not null default 0,
movieid mediumint(8) unsigned not null default 0 /*這字段是評論的電影id,和dede_archives 構成關(guān)系*/
)type=MyISAM default charset=utf8
步驟1. 先把模板文件拷貝到 templates/default目錄下.
完成任務(wù)是 當我在 瀏覽器 http://localhost/dedecms/pinglun/index.php?c=pinglun&a=listpl&aid=13
步驟2: 開(kāi)發(fā)控制器 control/pinglun.php
步驟3: 開(kāi)發(fā) model/mpinglun.php
步驟4:處理 templates/default/list_pl.html
步驟5: 首先我們在list_pl.html 的詳細信息獲取,并顯示

用戶(hù)可以針對某個(gè)電影發(fā)表評論.
首先在list_pl.htm 對表單進(jìn)行修改
在DEDE系統中,因為自帶了強大的會(huì )員系統,因此,對于每個(gè)模塊,入口的文件index.php,可以通過(guò)創(chuàng )建一個(gè)用戶(hù)即可.
require_once(DEDEINC."/memberlogin.class.php");
$cfg_ml =new MemberLogin(); //如果用戶(hù)登錄過(guò),dede會(huì )把該用戶(hù)的信息放入到session中.
New MemberLogin()對象就把登錄用戶(hù)信息保存
Dede給我們提供了一個(gè) 函數 ShowMsg(); //在 common.fun.php
/**
* 短消息函數,可以在某個(gè)動(dòng)作處理后友好的提示信息
*
* @param string $msg 消息提示信息
* @param string $gourl 跳轉地址
* @param int $onlymsg 僅顯示信息
* @param int $limittime 限制時(shí)間,安裝毫秒
* @return void
*/
function ShowMsg($msg, $gourl, $onlymsg=0, $limittime=0)
這個(gè)函數的主要應用兩種情況.
1.顯示信息然后返回原來(lái)的頁(yè)面
2.顯示信息到另一個(gè)頁(yè)面(如果是外網(wǎng) http://xxx 如果就是本網(wǎng)站的頁(yè)面,則使用相對路徑. )
如果 $gourl, 是 -1 則表示上一個(gè)頁(yè)面.
如果 $onlymsg =0表示跳轉, 如果是 1 或者其它值. 表示不跳轉
$limittime=0 表示停留的時(shí)間.
步驟7: 完成點(diǎn)擊內容頁(yè)的 發(fā)布新評論,就跳轉到對應的發(fā)布評論頁(yè)面


步驟8 : 將會(huì )員管理系統和a67網(wǎng)站整合到以前

<div class="logn">當前位置:<?php echo $ainfos->Fields['position']; ?> <?php echo $ainfos->Fields['title']; ?> > 評論</div>
2.如果用戶(hù)登錄過(guò),則提示可以進(jìn)入到會(huì )員中,否則,提示他登錄.
Dede 的ask 模塊都有 header.htm, 用于導航.
具體代碼:
<div class="txt">
<ul>
<li>
<?php if($cfg_ml->M_ID){?>
<b><?php echo $cfg_ml->M_LoginID;?></b>,您好 歡迎來(lái)到問(wèn)答中心 [<a href="http://zqbgds.blog.163.com/blog/../member" title="會(huì )員中心">會(huì )員中心</a>] <a href="http://zqbgds.blog.163.com/blog/../member/index_do.php?fmdo=login&dopost=exit">退出</a>
<?php }else{ ?>
您好,請您先 <a href="http://zqbgds.blog.163.com/blog/<?php echo $cfg_ask_basehost;?>/member/login.php?gourl=<?php echo $cfg_ask_curl;?>">登陸</a> 或者 <a href="http://zqbgds.blog.163.com/blog/../member/reg_new.php">注冊</a>
<?php }?>
</li>
</ul>
</div>
這樣處理后,可以登錄,頁(yè)可以進(jìn)入到會(huì )員中心.
步驟 9: 最后一個(gè)需求,就是如何對所有的評論,分頁(yè)顯示
思路: 前面我們學(xué)習過(guò)檢索內容,所以思路大致一樣.
在 pinglun.php 這個(gè)控制中去,使用 DataListCP這個(gè)類(lèi),帶檢索并可以分頁(yè).
步驟10: 使用ajax無(wú)刷新的取最新的 5條評論

? 如何在一個(gè)很多文件中,迅速的定位某個(gè)函數.
1. source insight
2. php->zend studio /netbean / easyeclipse [ide] [mis]
在zend studio 下創(chuàng )建一個(gè)空的PHP 工程,然后把dede 的項目源碼拷貝到空項目即可使用. 然后可以通過(guò) 工具,來(lái)選中一個(gè)函數,查看該函數的聲明.
? 使用phpmyadmin來(lái)查看
http://localhost/ phpmyadmin
? 當我們使用dede 或者是以后工作是,可以先使用 httpwatch/firebug 找到請求的PHP 文件,然后,通過(guò) die(“ 輸出”),或者使用 file_put_contents()來(lái)測試
? isset和 empty的區別是什么
empty 判斷一個(gè)變量是否為“空”,isset 判斷一個(gè)變量是否已經(jīng)設置。
$name=0;
$name='';
$name=null;
$name="0";
$name;
if(empty($name)){
echo "ok"; //上面五種寫(xiě)法empty($name)都是 true
}
isset 函數是用于檢測這個(gè)變量是否設置過(guò),在下面兩種情況下會(huì )認為
isset 為假
①$id; 沒(méi)有給任何值
②或者就是根本沒(méi)有定義.
因此我們建議在 判斷某個(gè)表單是否提交有數據(可能是0 '' ),使用
isset來(lái)判斷
if(isset($_GET/$_POST['變量']){
echo $_GET['變量']
}else{ echo '沒(méi)有傳遞數據'}
相關(guān)文章:
-
那些排名在首位的網(wǎng)站,大部分都是相當穩定的,很多人都在質(zhì)疑,網(wǎng)站排名和文章有什么關(guān)系嗎?這其實(shí)是顯而易見(jiàn)的。 對于搜索引擎的算法,都是根據當初的網(wǎng)站的持有者站長(cháng)所操...
-
西安哪有制作自己的網(wǎng)站,西安做網(wǎng)站推薦閱讀 西安網(wǎng)站建設:如何選擇適合自己的網(wǎng)站 網(wǎng)站建設的目的就是為了獲利,但是有的人就是一心想要賺錢(qián),而忽略了細節的問(wèn)題,新手最容...
-
競價(jià)本身就是一個(gè)花錢(qián)的地方,如果操作管理的不好,那么就會(huì )出現高成本、低詢(xún)盤(pán)的現狀,對于中小型企業(yè)的長(cháng)遠發(fā)展是不利的,要學(xué)會(huì )控制成本、消費沒(méi)有效果的消費,當競價(jià)賬戶(hù)...
-
西安醫療網(wǎng)站制作,西安做網(wǎng)站推薦閱讀 西安網(wǎng)站建設:網(wǎng)站建設重要的三步你知道嗎 企業(yè)網(wǎng)站建設過(guò)程中不能不知的4點(diǎn) 1、明確目的,精心策劃 設計主頁(yè)未必很艱難。但這一工作與編...
-
在信息泛濫的時(shí)代,如何讓人們來(lái)主動(dòng)發(fā)現你,是一門(mén)高深的學(xué)問(wèn)。下面西安網(wǎng)站推廣專(zhuān)家為大家介紹企業(yè)網(wǎng)站推廣的技巧及方法有哪些? 一、注冊各種搜索引擎 搜索引擎是網(wǎng)民搜索...
-
在做網(wǎng)站定位的時(shí)候我們需要做的是,尋找或打造企業(yè)網(wǎng)站與競爭對手的核心差異點(diǎn),這要求網(wǎng)站進(jìn)行定位時(shí)要站在整個(gè)行業(yè)、整個(gè)市場(chǎng)的高度上,而不是僅僅地站在自我的角度上。...
-
百度競價(jià)賬戶(hù)結構分析,可以從3個(gè)方面進(jìn)行: 西安競價(jià)托管 1、賬戶(hù)內推廣計劃的數量不少于2個(gè); 大體上來(lái)說(shuō),較多的推廣計劃和推廣單元意味著(zhù)關(guān)鍵詞的細分更透徹,能夠以更精準...
-
高質(zhì)量的網(wǎng)站建設包含哪些要素,及如何建設高質(zhì)量的網(wǎng)站。 西安網(wǎng)站建設 高質(zhì)量的網(wǎng)站包含兩個(gè)方面, 第一、面向用戶(hù)體驗方面; 第二、面向網(wǎng)站優(yōu)化方面, 第一條是解決用戶(hù)需求...
-
網(wǎng)站建設中容易忽視的細節問(wèn)題,有很多的站長(cháng)在做網(wǎng)站優(yōu)化的時(shí)候心里只記著(zhù):內容為王,外鏈為皇的傳統理論,還有些經(jīng)驗老道一點(diǎn)的站長(cháng)還會(huì )關(guān)注一下內鏈的建設,但我們做網(wǎng)站...
-
廣泛匹配是百度搜索引擎營(yíng)銷(xiāo)的三種匹配模式(精確、短語(yǔ)、廣泛)之一。廣泛匹配的使用就是當網(wǎng)民搜索詞與購買(mǎi)關(guān)鍵詞高度相關(guān)時(shí),即使并未提交這些關(guān)鍵詞,但推廣結果也可能獲...