织梦搜索视图类构造函数__construct(参数)源码分析教程
所在文件:include/arc.searchview.class.php
这个搜索视图类的构造函数由于参数比较多,这里就把标题用“参数”二字表示了,如果这个在标题里面没有多大用处的内容太多的话,影响我们阅读。
现在我们看一下这个构造函数到底参数有多少:
__construct($typeid,$keyword,$orderby,$achanneltype="all",$searchtype='',$starttime=0,$upagesize=20,$kwtype=1,$mid=0)
共9个参数,这在织梦系统里面不要说是构造函数了,就是一般的函数参数这么多的也不多,那构造函数里面也算是最长之一了。
参数解释:
int $typeid 栏目ID string $keyword 关键词 string $orderby 排序 string $achanneltype 频道类型 string $searchtype 搜索类型 string $starttime 开始时间 string $upagesize 页数 string $kwtype 关键词类型 string $mid 会员ID return string
这是织梦官方给我们的注释,这不是本教程的重点,重点是这个关键词搜索,特别是搞seo搜索引擎优化的朋友,如果把这个整个类弄明白了,那么,对百度、谷哥、360搜索引擎等会有很大帮助。虽然,它们不是一个系统,但是,大同小异,如果把织梦的这个分词研究透彻了,那么,对你的seo水平提高也有很大帮助,知道了我们在百度里面搜索关键词,就知道他是如何分词的,这样对于我们网站编辑很有帮助,自然,对排名就有更多帮助了。
源码分析教程开始:
因为,搜索的内容也要分页,前面一大段代码就是对参数进行处理的,这里不用多解释,首先是处理的是分页。代码如下:
然后,实例化模板引擎,这个构造函数里面实例化了二次模板引擎,虽然,在这个构造函数里面最下面用到,这个在这个类里面的其它方法也要使用。
通过分词获取关键词:
$this->Keywords = $this->GetKeywords($keyword);
获得关键字的分词结果,并保存到数据库,既然要搜索必须要获取用户输入的关键词才可以,要不怎么去搜索这个关键词,如果连关键词都不知道的话。
根据参数里面传递过来的栏目id,查询当前栏目使用的模型,这样做的目的是为了快速查询到关键词内容,例如,搜索一个关键词“织梦基地”,假设这个织梦基地的相关内容都在文章模型里面,你说搜索这个关键词时,在整个网站搜索快,还是在文章模型里面搜索快?当然,是在文章模型里了,因为,范围小了。所以,这里先把当前关键词的模型查询出来。
如果参数的栏目id为零,那么,直接把当前的模型默认设置为1,也就是文章模型;如果这个栏目id不大于零,则根据这个栏目id,在栏目表里面查询这个模型id,因为,在栏目表里面有这个字段,如下图所示。
处理栏目id对应的代码如下图所示:
下面是初始化sphinx,关于这个我们一般很少接触,这个是服务器知识了,只要我们知道如何处理这个服务器问题就行了,具体的服务器操作那是空间商的问题。
如果我们要启用全文搜索,那么,可以在织梦系统后台进行配置,找到“系统基本参数”——>其它选项,如下图所示:
对于这个我们只要知道是开启全文搜索功能就行了,代码我们也不用看去了,代码如下:
接下来就是设置搜索页模板:
$tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/search.htm";
这个search.htm 就是我们系统里面的搜索模板,从这里我们可以知道,我们的搜索页模板为什么叫search.htm了吧,如果想改一下搜索页模板名,就要在这个类中修改,也就是说如果你在织梦模板文件夹里面改搜索页模板的话,他会告诉你“模板文件不存在,无法解析!”。
那是因为下面这个段代码的起的作用:
if(!file_exists($tempfile)||!is_file($tempfile)) { echo "模板文件不存在,无法解析!"; exit(); }
模板都准备好了,接下来就是载入模板,解析模板,进行分页处理,并更新关键词表#@__search_keywords 。