织梦二次开发如何自定义搜索和分页

步骤:
1.使用DEDE自带的一个工具,生成一个表单,通过该表单,可以提交你按照什么条件来检索内容.
2.后台->核心->内容模板管理->自定义搜索 , 这里你可以选择自己需要的条件,然后就可以创建一个表单了, 该表单提交后,会把结果通过 自定义搜索结果页模板 显示内容,默认的模板文件叫 advancedsearch.htm
3. 先测试下,把dede自带的模板文件advancedsearch.htm拷贝到 templets/default / 下即可.
4.使用即可
课后练习题:
需求: 把检索结果页面,换成a67 提供的检索结果页面. 通用列表页.html, 并完成分页效果.
步骤:
1. 把通用列表页.html 的内容复制拷贝到 advancesearch.htm
2. 修改 advancesearch.htm 的相关设置,网页编码,引入资源,图片的路径. 可以参考index.htm 模板内容
1.把默认的模板文件和检索的响应文件,做成自己.
把默认提交的 页面 advancedsearch.php 换成 mysearch.php ,先在 plus/ 创建 mysearch.php
把默认的检索的模板文件advancesearch.htm,换成 mysearch.htm
现在我们编写自己的 mysearch.php ,了解一下 dede 是怎样把结果给你查询并显示.
mysearch.php 核心代码:


1.可以再{dede:datalist} 中嵌入某些{dede}标签
2.{dede:global.autoindex/} 无效
需求做出我们自己的分页导航
这里,我们需要使用另外一个标签,该标签专门用于分页导航 {dede:pagelist/}
在 mysearch.htm 加入该标签
在适当的位置加入该标签,在实际开发中,我们往往需要对分页导航条,进行自定义。

步骤:
1.显示提示信息的文字.
2.对导航的样式进行二次修改.
我们为了不去修改 DataListCp源码, 可以使用面向对象的继承,然后重写一个方法.
在mysearch.php
class MyDataListCP extends DataListCP{
function GetPageList(){

}
这里有一个知识点补充
有时候,你们会看到类似这样的用法,就直接把一个变量来使用,而没有 $_GET[‘名字’];
extract();该函数可以把数组数据导出到当前符号表,这样就可以直接通过 $索引名 来访问

如何在检索页面 mysearch.htm 中显示我们的栏目列表
思路:传统的方法,就是引入 head.htm 文件.
{dede:include } 不好使用.
正确思路
因为 mysearch.html 是在 mysearch.php 引入 , 则我们可以在 mysearch.php文件中获取到栏目信息 dede_arctype 获取信息.
在mysearch.php 中加入了代码:

在mysearch.hml 中代码如何取出

这里有话说: <?php echo GetOneTypeUrlA($type);?> 可以得到列表页的url地址,但是要求$type是该栏目dede_arctype 表中取出的完整信息.
另外一种写法:

需求: 在搜索时,带上 typeid,area , year 这三个参数值

思路:
localhost/dedecms/plus/mysearch.php?typeid=2&area=大陆&year=2010
我们对mysearch.php 进行开发.
增加如下代码:
1.


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

继续思考: 分页操作会出现什么? 在分页时候,我们会丢失查询条件.
这里处理,要使用 $dlist 有一个函数,该函数可以保存上次提交的信息.
具体的代码如下改进:

显示自己网站的所有分类检索
步骤,先找到位置. 添加如下代码:

完成点击列表页的某个连接,跳转到对应的检索页面


需求: 完成列表页小星星的评分功能
思考:
1.把评分值,传递给一个函数,让该函数根据 分值,返回一个image的字符串,并显示.
步骤:
前台模板文件:


需求: 当我们点击检索结果的某个电影超链接时,如何跳转到对应的内容页

思路: 是否能够使用{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>
知识点: dede提供了一堆帮助类. 这些工具类的函数可以直接使用.
现在,我先给大家说说 GetOneArchive(); 的用处.
需求:完成列表页昨天更新功能

这里,我们的代码是

需求: 对列表页评分高低排序显示


并且对arclist标签源码,修改
else if($orderby == 'pfz') $ordersql = " order by addf.pfz $orderWay";
需求: 如何从外站来采集自己需要的数据
我们从 www.67.com 采集数据
知识点:
1. 了解php 是如何通过Http协议发送请求,抓取数据.(我们先使用工具,再用程序)
2. 正则表达式
使用工具:
步骤:
1.首先找到要抓取的对象(页面 【列表页和内容页】)
列表页地址 http://www.a67.com/list/1/p.2
内容页: http://www.a67.com/movie/232439
2.在dede后台创建采集点
后台->采集->采集节点管理->创建采集点
在 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.然后我们创建采集点,先配置基本信息

并设置内容获取规则!

真的采集
到采集点管理,点击采集即可
然后倒入到数据库中即可
看看如何采集标题
如何自定义PHP程序来完成数据采集
知识点: 1. HTTP协议 2. 如何同PHP代码来发送HTTP请求和接收HTTP响应(HTML文本) 3. 如何对返回的HTML文本做正则处理 4. 如何保存数据.
补充HTTP流程(时序图)

最后的代码是:
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协议串发送给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";
//发送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支持的开发自定义模块功能. 言外之意,dede 自己就给我们提供非常强大的预定义的模块.(会员管理、会员中心…),如果你想看看还有哪些.

提示: 在工作,尽量找一个成型的功能模块,看看别人如何开发. 我们这里准 参考问答模块来,开发我们自己的影评模块
熟悉一下dede的自带的轻量级的MVC框架.[听点 : dede MVC ,MVC本身.]
MVC核心思想( 把数据的输入,数据处理和数据的显示分离,,减少程序的耦合性.)
原理示意图:

学习一下DEDE的 mvc 框架,参考 ask 模块的代码和结构.
我们来开发一个非常简单的 雇员管理系统(完成 crud 操作)
步骤:
1.在 dedecms的主目录下创建了一个 empmange的模块

2.写代码
在empmanage 目录创建 index.php 文件, 该文件就是入口文件.
整个代码现在完成,参考的代码是 empmange文件夹所有内容.

正式开发我们的影评自定义模块
先设计数据表(设计表的依据[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是外键关系*/
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 构成关系*/
)type=MyISAM default charset=utf8
步骤1. 先把模板文件拷贝到 templates/default目录下.
完成任务是 当我在 浏览器 http://localhost/dedecms/pinglun/index.php?c=pinglun&a=listpl&aid=13
步骤2: 开发控制器 control/pinglun.php
步骤3: 开发 model/mpinglun.php
步骤4:处理 templates/default/list_pl.html
步骤5: 首先我们在list_pl.html 的详细信息获取,并显示

用户可以针对某个电影发表评论.
首先在list_pl.htm 对表单进行修改
在DEDE系统中,因为自带了强大的会员系统,因此,对于每个模块,入口的文件index.php,可以通过创建一个用户即可.
require_once(DEDEINC."/memberlogin.class.php");
$cfg_ml =new MemberLogin(); //如果用户登录过,dede会把该用户的信息放入到session中.
New MemberLogin()对象就把登录用户信息保存
Dede给我们提供了一个 函数 ShowMsg(); //在 common.fun.php
/**
* 短消息函数,可以在某个动作处理后友好的提示信息
*
* @param string $msg 消息提示信息
* @param string $gourl 跳转地址
* @param int $onlymsg 仅显示信息
* @param int $limittime 限制时间,安装毫秒
* @return void
*/
function ShowMsg($msg, $gourl, $onlymsg=0, $limittime=0)
这个函数的主要应用两种情况.
1.显示信息然后返回原来的页面
2.显示信息到另一个页面(如果是外网 http://xxx 如果就是本网站的页面,则使用相对路径. )
如果 $gourl, 是 -1 则表示上一个页面.
如果 $onlymsg =0表示跳转, 如果是 1 或者其它值. 表示不跳转
$limittime=0 表示停留的时间.
步骤7: 完成点击内容页的 发布新评论,就跳转到对应的发布评论页面


步骤8 : 将会员管理系统和a67网站整合到以前

<div class="logn">当前位置:<?php echo $ainfos->Fields['position']; ?> <?php echo $ainfos->Fields['title']; ?> > 评论</div>
2.如果用户登录过,则提示可以进入到会员中,否则,提示他登录.
Dede 的ask 模块都有 header.htm, 用于导航.
具体代码:
<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="会员中心">会员中心</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>
这样处理后,可以登录,页可以进入到会员中心.
步骤 9: 最后一个需求,就是如何对所有的评论,分页显示
思路: 前面我们学习过检索内容,所以思路大致一样.
在 pinglun.php 这个控制中去,使用 DataListCP这个类,带检索并可以分页.
步骤10: 使用ajax无刷新的取最新的 5条评论

? 如何在一个很多文件中,迅速的定位某个函数.
1. source insight
2. php->zend studio /netbean / easyeclipse [ide] [mis]
在zend studio 下创建一个空的PHP 工程,然后把dede 的项目源码拷贝到空项目即可使用. 然后可以通过 工具,来选中一个函数,查看该函数的声明.
? 使用phpmyadmin来查看
http://localhost/ phpmyadmin
? 当我们使用dede 或者是以后工作是,可以先使用 httpwatch/firebug 找到请求的PHP 文件,然后,通过 die(“ 输出”),或者使用 file_put_contents()来测试
? isset和 empty的区别是什么
empty 判断一个变量是否为“空”,isset 判断一个变量是否已经设置。
$name=0;
$name='';
$name=null;
$name="0";
$name;
if(empty($name)){
echo "ok"; //上面五种写法empty($name)都是 true
}
isset 函数是用于检测这个变量是否设置过,在下面两种情况下会认为
isset 为假
①$id; 没有给任何值
②或者就是根本没有定义.
因此我们建议在 判断某个表单是否提交有数据(可能是0 '' ),使用
isset来判断
if(isset($_GET/$_POST['变量']){
echo $_GET['变量']
}else{ echo '没有传递数据'}
相关文章:
-
那些排名在首位的网站,大部分都是相当稳定的,很多人都在质疑,网站排名和文章有什么关系吗?这其实是显而易见的。 对于搜索引擎的算法,都是根据当初的网站的持有者站长所操...
-
西安哪有制作自己的网站,西安做网站推荐阅读 西安网站建设:如何选择适合自己的网站 网站建设的目的就是为了获利,但是有的人就是一心想要赚钱,而忽略了细节的问题,新手最容...
-
竞价本身就是一个花钱的地方,如果操作管理的不好,那么就会出现高成本、低询盘的现状,对于中小型企业的长远发展是不利的,要学会控制成本、消费没有效果的消费,当竞价账户...
-
西安医疗网站制作,西安做网站推荐阅读 西安网站建设:网站建设重要的三步你知道吗 企业网站建设过程中不能不知的4点 1、明确目的,精心策划 设计主页未必很艰难。但这一工作与编...
-
在信息泛滥的时代,如何让人们来主动发现你,是一门高深的学问。下面西安网站推广专家为大家介绍企业网站推广的技巧及方法有哪些? 一、注册各种搜索引擎 搜索引擎是网民搜索...
-
在做网站定位的时候我们需要做的是,寻找或打造企业网站与竞争对手的核心差异点,这要求网站进行定位时要站在整个行业、整个市场的高度上,而不是仅仅地站在自我的角度上。...
-
百度竞价账户结构分析,可以从3个方面进行: 西安竞价托管 1、账户内推广计划的数量不少于2个; 大体上来说,较多的推广计划和推广单元意味着关键词的细分更透彻,能够以更精准...
-
高质量的网站建设包含哪些要素,及如何建设高质量的网站。 西安网站建设 高质量的网站包含两个方面, 第一、面向用户体验方面; 第二、面向网站优化方面, 第一条是解决用户需求...
-
网站建设中容易忽视的细节问题,有很多的站长在做网站优化的时候心里只记着:内容为王,外链为皇的传统理论,还有些经验老道一点的站长还会关注一下内链的建设,但我们做网站...
-
广泛匹配是百度搜索引擎营销的三种匹配模式(精确、短语、广泛)之一。广泛匹配的使用就是当网民搜索词与购买关键词高度相关时,即使并未提交这些关键词,但推广结果也可能获...