織夢(mèng)二次開發(fā)如何自定義搜索和分頁
步驟:
1.使用DEDE自帶的一個(gè)工具,生成一個(gè)表單,通過該表單,可以提交你按照什么條件來檢索內(nèi)容.
2.后臺(tái)->核心->內(nèi)容模板管理->自定義搜索 , 這里你可以選擇自己需要的條件,然后就可以創(chuàng)建一個(gè)表單了, 該表單提交后,會(huì)把結(jié)果通過 自定義搜索結(jié)果頁模板 顯示內(nèi)容,默認(rèn)的模板文件叫 advancedsearch.htm
3. 先測(cè)試下,把dede自帶的模板文件advancedsearch.htm拷貝到 templets/default / 下即可.
4.使用即可
課后練習(xí)題:
需求: 把檢索結(jié)果頁面,換成a67 提供的檢索結(jié)果頁面. 通用列表頁.html, 并完成分頁效果.
步驟:
1. 把通用列表頁.html 的內(nèi)容復(fù)制拷貝到 advancesearch.htm
2. 修改 advancesearch.htm 的相關(guān)設(shè)置,網(wǎng)頁編碼,引入資源,圖片的路徑. 可以參考index.htm 模板內(nèi)容
1.把默認(rèn)的模板文件和檢索的響應(yīng)文件,做成自己.
把默認(rèn)提交的 頁面 advancedsearch.php 換成 mysearch.php ,先在 plus/ 創(chuàng)建 mysearch.php
把默認(rèn)的檢索的模板文件advancesearch.htm,換成 mysearch.htm
現(xiàn)在我們編寫自己的 mysearch.php ,了解一下 dede 是怎樣把結(jié)果給你查詢并顯示.
mysearch.php 核心代碼:
1.可以再{dede:datalist} 中嵌入某些{dede}標(biāo)簽
2.{dede:global.autoindex/} 無效
需求做出我們自己的分頁導(dǎo)航
這里,我們需要使用另外一個(gè)標(biāo)簽,該標(biāo)簽專門用于分頁導(dǎo)航 {dede:pagelist/}
在 mysearch.htm 加入該標(biāo)簽
在適當(dāng)?shù)奈恢眉尤朐摌?biāo)簽,在實(shí)際開發(fā)中,我們往往需要對(duì)分頁導(dǎo)航條,進(jìn)行自定義。
步驟:
1.顯示提示信息的文字.
2.對(duì)導(dǎo)航的樣式進(jìn)行二次修改.
我們?yōu)榱瞬蝗バ薷?DataListCp源碼, 可以使用面向?qū)ο蟮睦^承,然后重寫一個(gè)方法.
在mysearch.php
class MyDataListCP extends DataListCP{
function GetPageList(){
}
這里有一個(gè)知識(shí)點(diǎn)補(bǔ)充
有時(shí)候,你們會(huì)看到類似這樣的用法,就直接把一個(gè)變量來使用,而沒有 $_GET[‘名字’];
extract();該函數(shù)可以把數(shù)組數(shù)據(jù)導(dǎo)出到當(dāng)前符號(hào)表,這樣就可以直接通過 $索引名 來訪問
如何在檢索頁面 mysearch.htm 中顯示我們的欄目列表
思路:傳統(tǒng)的方法,就是引入 head.htm 文件.
{dede:include } 不好使用.
正確思路
因?yàn)?mysearch.html 是在 mysearch.php 引入 , 則我們可以在 mysearch.php文件中獲取到欄目信息 dede_arctype 獲取信息.
在mysearch.php 中加入了代碼:
在mysearch.hml 中代碼如何取出
這里有話說: <?php echo GetOneTypeUrlA($type);?> 可以得到列表頁的url地址,但是要求$type是該欄目dede_arctype 表中取出的完整信息.
另外一種寫法:
需求: 在搜索時(shí),帶上 typeid,area , year 這三個(gè)參數(shù)值
思路:
localhost/dedecms/plus/mysearch.php?typeid=2&area=大陸&year=2010
我們對(duì)mysearch.php 進(jìn)行開發(fā).
增加如下代碼:
1.
思考,如何把 year 和 area 加入,在mysearch.php 增加如下代碼:
繼續(xù)思考: 分頁操作會(huì)出現(xiàn)什么? 在分頁時(shí)候,我們會(huì)丟失查詢條件.
這里處理,要使用 $dlist 有一個(gè)函數(shù),該函數(shù)可以保存上次提交的信息.
具體的代碼如下改進(jìn):
顯示自己網(wǎng)站的所有分類檢索
步驟,先找到位置. 添加如下代碼:
完成點(diǎn)擊列表頁的某個(gè)連接,跳轉(zhuǎn)到對(duì)應(yīng)的檢索頁面
需求: 完成列表頁小星星的評(píng)分功能
思考:
1.把評(píng)分值,傳遞給一個(gè)函數(shù),讓該函數(shù)根據(jù) 分值,返回一個(gè)image的字符串,并顯示.
步驟:
前臺(tái)模板文件:
需求: 當(dāng)我們點(diǎn)擊檢索結(jié)果的某個(gè)電影超鏈接時(shí),如何跳轉(zhuǎn)到對(duì)應(yīng)的內(nèi)容頁
思路: 是否能夠使用{dede:field.arcurl/}
步驟: 對(duì) 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>
知識(shí)點(diǎn): dede提供了一堆幫助類. 這些工具類的函數(shù)可以直接使用.
現(xiàn)在,我先給大家說說 GetOneArchive(); 的用處.
需求:完成列表頁昨天更新功能
這里,我們的代碼是
需求: 對(duì)列表頁評(píng)分高低排序顯示
并且對(duì)arclist標(biāo)簽源碼,修改
else if($orderby == 'pfz') $ordersql = " order by addf.pfz $orderWay";
需求: 如何從外站來采集自己需要的數(shù)據(jù)
我們從 www.67.com 采集數(shù)據(jù)
知識(shí)點(diǎn):
1. 了解php 是如何通過Http協(xié)議發(fā)送請(qǐng)求,抓取數(shù)據(jù).(我們先使用工具,再用程序)
2. 正則表達(dá)式
使用工具:
步驟:
1.首先找到要抓取的對(duì)象(頁面 【列表頁和內(nèi)容頁】)
列表頁地址 http://www.a67.com/list/1/p.2
內(nèi)容頁: http://www.a67.com/movie/232439
2.在dede后臺(tái)創(chuàng)建采集點(diǎn)
后臺(tái)->采集->采集節(jié)點(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),先配置基本信息
并設(shè)置內(nèi)容獲取規(guī)則!
真的采集
到采集點(diǎn)管理,點(diǎn)擊采集即可
然后倒入到數(shù)據(jù)庫中即可
看看如何采集標(biāo)題
如何自定義PHP程序來完成數(shù)據(jù)采集
知識(shí)點(diǎn): 1. HTTP協(xié)議 2. 如何同PHP代碼來發(fā)送HTTP請(qǐng)求和接收HTTP響應(yīng)(HTML文本) 3. 如何對(duì)返回的HTML文本做正則處理 4. 如何保存數(shù)據(jù).
補(bǔ)充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.構(gòu)建HTTP協(xié)議串發(fā)送給www.a67.com, 去抓取 http://www.a67.com/movie/229813的
//內(nèi)容
$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請(qǐng)求信息
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.要設(shè)計(jì)新的表.
2.我們需要使用dede支持的開發(fā)自定義模塊功能. 言外之意,dede 自己就給我們提供非常強(qiáng)大的預(yù)定義的模塊.(會(huì)員管理、會(huì)員中心…),如果你想看看還有哪些.
提示: 在工作,盡量找一個(gè)成型的功能模塊,看看別人如何開發(fā). 我們這里準(zhǔn) 參考問答模塊來,開發(fā)我們自己的影評(píng)模塊
熟悉一下dede的自帶的輕量級(jí)的MVC框架.[聽點(diǎn) : dede MVC ,MVC本身.]
MVC核心思想( 把數(shù)據(jù)的輸入,數(shù)據(jù)處理和數(shù)據(jù)的顯示分離,,減少程序的耦合性.)
原理示意圖:
學(xué)習(xí)一下DEDE的 mvc 框架,參考 ask 模塊的代碼和結(jié)構(gòu).
我們來開發(fā)一個(gè)非常簡單的 雇員管理系統(tǒng)(完成 crud 操作)
步驟:
1.在 dedecms的主目錄下創(chuàng)建了一個(gè) empmange的模塊
2.寫代碼
在empmanage 目錄創(chuàng)建 index.php 文件, 該文件就是入口文件.
整個(gè)代碼現(xiàn)在完成,參考的代碼是 empmange文件夾所有內(nèi)容.
正式開發(fā)我們的影評(píng)自定義模塊
先設(shè)計(jì)數(shù)據(jù)表(設(shè)計(jì)表的依據(jù)[1.根據(jù)需求文檔, 2. 參考界面])
評(píng)論表 comments
create table a67_comments (
id int unsigned primary key auto_increment, /*主鍵*/
userid mediumint(8) unsigned not null default 0, /*因?yàn)閡serid 和 dede_member 表 mid是外鍵關(guān)系*/
title varchar(128) not null default '', /*標(biāo)題*/
content longtext not null default '',
addtime int unsigned not null default 0,
movieid mediumint(8) unsigned not null default 0 /*這字段是評(píng)論的電影id,和dede_archives 構(gòu)成關(guān)系*/
)type=MyISAM default charset=utf8
步驟1. 先把模板文件拷貝到 templates/default目錄下.
完成任務(wù)是 當(dāng)我在 瀏覽器 http://localhost/dedecms/pinglun/index.php?c=pinglun&a=listpl&aid=13
步驟2: 開發(fā)控制器 control/pinglun.php
步驟3: 開發(fā) model/mpinglun.php
步驟4:處理 templates/default/list_pl.html
步驟5: 首先我們?cè)趌ist_pl.html 的詳細(xì)信息獲取,并顯示
用戶可以針對(duì)某個(gè)電影發(fā)表評(píng)論.
首先在list_pl.htm 對(duì)表單進(jìn)行修改
在DEDE系統(tǒng)中,因?yàn)樽詭Я藦?qiáng)大的會(huì)員系統(tǒng),因此,對(duì)于每個(gè)模塊,入口的文件index.php,可以通過創(chuàng)建一個(gè)用戶即可.
require_once(DEDEINC."/memberlogin.class.php");
$cfg_ml =new MemberLogin(); //如果用戶登錄過,dede會(huì)把該用戶的信息放入到session中.
New MemberLogin()對(duì)象就把登錄用戶信息保存
Dede給我們提供了一個(gè) 函數(shù) ShowMsg(); //在 common.fun.php
/**
* 短消息函數(shù),可以在某個(gè)動(dòng)作處理后友好的提示信息
*
* @param string $msg 消息提示信息
* @param string $gourl 跳轉(zhuǎn)地址
* @param int $onlymsg 僅顯示信息
* @param int $limittime 限制時(shí)間,安裝毫秒
* @return void
*/
function ShowMsg($msg, $gourl, $onlymsg=0, $limittime=0)
這個(gè)函數(shù)的主要應(yīng)用兩種情況.
1.顯示信息然后返回原來的頁面
2.顯示信息到另一個(gè)頁面(如果是外網(wǎng) http://xxx 如果就是本網(wǎng)站的頁面,則使用相對(duì)路徑. )
如果 $gourl, 是 -1 則表示上一個(gè)頁面.
如果 $onlymsg =0表示跳轉(zhuǎn), 如果是 1 或者其它值. 表示不跳轉(zhuǎn)
$limittime=0 表示停留的時(shí)間.
步驟7: 完成點(diǎn)擊內(nèi)容頁的 發(fā)布新評(píng)論,就跳轉(zhuǎn)到對(duì)應(yīng)的發(fā)布評(píng)論頁面
步驟8 : 將會(huì)員管理系統(tǒng)和a67網(wǎng)站整合到以前
<div class="logn">當(dāng)前位置:<?php echo $ainfos->Fields['position']; ?> <?php echo $ainfos->Fields['title']; ?> > 評(píng)論</div>
2.如果用戶登錄過,則提示可以進(jìn)入到會(huì)員中,否則,提示他登錄.
Dede 的ask 模塊都有 header.htm, 用于導(dǎo)航.
具體代碼:
<div class="txt">
<ul>
<li>
<?php if($cfg_ml->M_ID){?>
<b><?php echo $cfg_ml->M_LoginID;?></b>,您好 歡迎來到問答中心 [<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{ ?>
您好,請(qǐng)您先 <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">注冊(cè)</a>
<?php }?>
</li>
</ul>
</div>
這樣處理后,可以登錄,頁可以進(jìn)入到會(huì)員中心.
步驟 9: 最后一個(gè)需求,就是如何對(duì)所有的評(píng)論,分頁顯示
思路: 前面我們學(xué)習(xí)過檢索內(nèi)容,所以思路大致一樣.
在 pinglun.php 這個(gè)控制中去,使用 DataListCP這個(gè)類,帶檢索并可以分頁.
步驟10: 使用ajax無刷新的取最新的 5條評(píng)論
? 如何在一個(gè)很多文件中,迅速的定位某個(gè)函數(shù).
1. source insight
2. php->zend studio /netbean / easyeclipse [ide] [mis]
在zend studio 下創(chuàng)建一個(gè)空的PHP 工程,然后把dede 的項(xiàng)目源碼拷貝到空項(xiàng)目即可使用. 然后可以通過 工具,來選中一個(gè)函數(shù),查看該函數(shù)的聲明.
? 使用phpmyadmin來查看
http://localhost/ phpmyadmin
? 當(dāng)我們使用dede 或者是以后工作是,可以先使用 httpwatch/firebug 找到請(qǐng)求的PHP 文件,然后,通過 die(“ 輸出”),或者使用 file_put_contents()來測(cè)試
? isset和 empty的區(qū)別是什么
empty 判斷一個(gè)變量是否為“空”,isset 判斷一個(gè)變量是否已經(jīng)設(shè)置。
$name=0;
$name='';
$name=null;
$name="0";
$name;
if(empty($name)){
echo "ok"; //上面五種寫法empty($name)都是 true
}
isset 函數(shù)是用于檢測(cè)這個(gè)變量是否設(shè)置過,在下面兩種情況下會(huì)認(rèn)為
isset 為假
①$id; 沒有給任何值
②或者就是根本沒有定義.
因此我們建議在 判斷某個(gè)表單是否提交有數(shù)據(jù)(可能是0 '' ),使用
isset來判斷
if(isset($_GET/$_POST['變量']){
echo $_GET['變量']
}else{ echo '沒有傳遞數(shù)據(jù)'}
相關(guān)文章:
-
那些排名在首位的網(wǎng)站,大部分都是相當(dāng)穩(wěn)定的,很多人都在質(zhì)疑,網(wǎng)站排名和文章有什么關(guān)系嗎?這其實(shí)是顯而易見的。 對(duì)于搜索引擎的算法,都是根據(jù)當(dāng)初的網(wǎng)站的持有者站長所操...
-
西安哪有制作自己的網(wǎng)站,西安做網(wǎng)站推薦閱讀 西安網(wǎng)站建設(shè):如何選擇適合自己的網(wǎng)站 網(wǎng)站建設(shè)的目的就是為了獲利,但是有的人就是一心想要賺錢,而忽略了細(xì)節(jié)的問題,新手最容...
-
競價(jià)本身就是一個(gè)花錢的地方,如果操作管理的不好,那么就會(huì)出現(xiàn)高成本、低詢盤的現(xiàn)狀,對(duì)于中小型企業(yè)的長遠(yuǎn)發(fā)展是不利的,要學(xué)會(huì)控制成本、消費(fèi)沒有效果的消費(fèi),當(dāng)競價(jià)賬戶...
-
西安醫(yī)療網(wǎng)站制作,西安做網(wǎng)站推薦閱讀 西安網(wǎng)站建設(shè):網(wǎng)站建設(shè)重要的三步你知道嗎 企業(yè)網(wǎng)站建設(shè)過程中不能不知的4點(diǎn) 1、明確目的,精心策劃 設(shè)計(jì)主頁未必很艱難。但這一工作與編...
-
在信息泛濫的時(shí)代,如何讓人們來主動(dòng)發(fā)現(xiàn)你,是一門高深的學(xué)問。下面西安網(wǎng)站推廣專家為大家介紹企業(yè)網(wǎng)站推廣的技巧及方法有哪些? 一、注冊(cè)各種搜索引擎 搜索引擎是網(wǎng)民搜索...
-
在做網(wǎng)站定位的時(shí)候我們需要做的是,尋找或打造企業(yè)網(wǎng)站與競爭對(duì)手的核心差異點(diǎn),這要求網(wǎng)站進(jìn)行定位時(shí)要站在整個(gè)行業(yè)、整個(gè)市場的高度上,而不是僅僅地站在自我的角度上。...
-
百度競價(jià)賬戶結(jié)構(gòu)分析,可以從3個(gè)方面進(jìn)行: 西安競價(jià)托管 1、賬戶內(nèi)推廣計(jì)劃的數(shù)量不少于2個(gè); 大體上來說,較多的推廣計(jì)劃和推廣單元意味著關(guān)鍵詞的細(xì)分更透徹,能夠以更精準(zhǔn)...
-
高質(zhì)量的網(wǎng)站建設(shè)包含哪些要素,及如何建設(shè)高質(zhì)量的網(wǎng)站。 西安網(wǎng)站建設(shè) 高質(zhì)量的網(wǎng)站包含兩個(gè)方面, 第一、面向用戶體驗(yàn)方面; 第二、面向網(wǎng)站優(yōu)化方面, 第一條是解決用戶需求...
-
網(wǎng)站建設(shè)中容易忽視的細(xì)節(jié)問題,有很多的站長在做網(wǎng)站優(yōu)化的時(shí)候心里只記著:內(nèi)容為王,外鏈為皇的傳統(tǒng)理論,還有些經(jīng)驗(yàn)老道一點(diǎn)的站長還會(huì)關(guān)注一下內(nèi)鏈的建設(shè),但我們做網(wǎng)站...
-
廣泛匹配是百度搜索引擎營銷的三種匹配模式(精確、短語、廣泛)之一。廣泛匹配的使用就是當(dāng)網(wǎng)民搜索詞與購買關(guān)鍵詞高度相關(guān)時(shí),即使并未提交這些關(guān)鍵詞,但推廣結(jié)果也可能獲...