全文搜索其实是很占服务器资源的,据说帖子一上10W,一搜索服务器就当机,所以DZ开发了很多全文搜索的技术,比如用 Sphinx,比如站外搜索
但是有些小站如果要配置一个 Sphinx就很麻烦了,用站外搜索总是有时间差,就是等对方收录了你的帖子你才能搜索出来
所以对于小站来说,用用MYSQL直接搜索也是可以的,毕竟帖子不多
我发现DZ默认只能管理员全文搜索,而且还得到后台去设置
在后台-用户-管理组-管理员-基本设置里面可以开启“允许全文搜索”
在前台搜索的时候还得切换到高级搜索模式,把“全文”打上勾
而我的想法是让游客也可以全文搜索
/bbs/search.php?mod=forum&adv=yes&srchtxt=%B7%BD%B7%A8
这个是搜索路径
找到search.php文件,打开后发现是调用了
require DISCUZ_ROOT.’./source/module/search/search_’.$mod.’.php’;
其实就是\bbs\source\module\search\search_forum.php文件
打开后发现这个东西
$srchtype != ‘title’ && $srchtype != ‘fulltext’
也就是搜索有两种模式,一种标题,一种全文
下面还有几行
if($_G[‘group’][‘allowsearch’] & 32 && $srchtype == ‘fulltext’) {
periodscheck(‘searchbanperiods’);
} elseif($srchtype != ‘title’) {
$srchtype = ‘title’;
}
是和等级有关的,不允许全文搜索的等级全是用标题搜索
剩下的解决办法就很简单了,把这段代码去掉
后面添加个
$srchtype=’fulltext’;
不管三七二十一,全用全文搜索
测试通过~~~~~~~
阅读全文
css替换图片网址
\(["]?[ ]*([^\=)\;]*)\/([^\/]*)\.(jpg|png|gif)[ ]*["]?\)
替换
(\2.\3)
就可以直接替换成xxx.jpg的格式
阅读全文
首先我找到了74行$threadBehavior = getThreadFactory($cyid, $search, $topicsearch);
发现这个函数是根据传入的参数生成一个类名,比如图库帖子就是imgThread,普通帖子就是commonThread,并对他实例化
在1001行发现了这个类class imgThread extends baseThread {扩展自基本帖子类
然后大刀阔斧地修改把
因为我的帖子全是采集的,图片也全是外链的,所以我的想法是:直接读取帖子的第一张图片作为图库贴的封面图片
所以就做了下面的修改
class imgThread extends baseThread {
function getThreadCount() {
//return $this->db->get_value('SELECT COUNT(*) AS count FROM pw_threads_img WHERE fid=' . S::sqlEscape($this->fid) . ' AND ifcheck=1');
return $this->db->get_value('SELECT COUNT(*) AS count FROM pw_threads WHERE fid=' . S::sqlEscape($this->fid) . ' AND ifcheck=1');
}
function getThread($start, $allowtop) {
list($offset, $limit2, $tpcdb, $R) = $this->getThreadSortWithToppedThread(true, $start);
//$query = $this->db->query("SELECT t.*,ti.cover,ti.totalnum,ti.collectnum,ti.ifthumb FROM pw_threads_img ti LEFT JOIN pw_threads t ON ti.tid=t.tid WHERE ti.fid=" . S::sqlEscape($this->fid) . " AND ti.ifcheck=1 AND ti.topped=0 ORDER BY {$this->threadSearch->order} {$this->threadSearch->asc} " . S::sqlLimit($offset, $limit2));
$query = $this->db->query("SELECT t.*,m.content FROM pw_threads t left join pw_tmsgs m on t.tid=m.tid WHERE t.fid=" . S::sqlEscape($this->fid) . " AND t.ifcheck=1 AND t.topped=0 ORDER BY t.tid {$this->threadSearch->asc} " . S::sqlLimit($offset, $limit2));//获取帖子内容
while ($thread = $this->db->fetch_array($query)) {
preg_match_all("/<img.*src\s*=\s*[\"|\']?\s*([^>\"\'\s]*)/i", $thread['content'], $matches);//匹配图片
$thread['cover']=$matches[1][0];//把图片网址赋值给数组
$tpcdb[] = $thread;
}
$this->db->free_result($query);
$R && $tpcdb = array_reverse($tpcdb);
return $this->parseThread($tpcdb);
}
function setWhere() {
global $search,$type;
$this->threadSearch->setType($type);
$this->threadSearch->setImg($search);
$this->threadSearch->setOrder();
}
function getThreadSortWithToppedThread($allowtop, $start) {
global $count;
$R = 0;
$tpcdb = array();
$asc = $this->threadSearch->asc;
if ($allowtop) {
global $foruminfo,$db_perpage;
$toptids = trim($foruminfo['topthreads'], ',');
//$rows = !$toptids ? 0 : (int)$this->db->get_value("SELECT COUNT(*) FROM pw_threads_img WHERE tid IN($toptids) LIMIT 1");;
$rows = !$toptids ? 0 : (int)$this->db->get_value("SELECT COUNT(*) FROM pw_threads WHERE tid IN($toptids) LIMIT 1");;
if ($start < $rows) {
$L = (int)min($rows – $start, $db_perpage);
$limit = S::sqlLimit($start,$L);
$offset = 0;
$limit2 = $L == $db_perpage ? '' : $db_perpage – $L;
if ($toptids) {
$query = $this->db->query("SELECT * FROM pw_threads WHERE tid IN($toptids) ORDER BY topped DESC,tid DESC $limit");
while ($rt = $this->db->fetch_array($query)) {
$tpcdb[] = $rt;
}
$this->db->free_result($query);
}
unset($toptids,$L,$limit);
} else {
list($offset,$limit2,$asc,$R) = getstart($start – $rows, $asc, $count);
}
} else {
list($offset,$limit2,$asc,$R) = getstart($start, $asc, $count);
}
$this->threadSearch->asc = $asc;
return array($offset, $limit2, $tpcdb, $R);
}
}
然后发现图库贴的封面图是经过模板处理的,把处理步骤去掉,直接用原图网址
打开模板\template\wind\thread_maintucool.htm
大概72行去掉处理
$attachImg =$thread['cover']; //$attachsService->getThreadAttachMini($thread['cover'],$thread['ifthumb']);
顺便把图库的图片统计也去掉了
<span class="imgNum" title="共有{$thread[totalnum]}张图片" style="display:none; ">{$thread[totalnum]}</span>
OK了~
当然,有一些不完美的地方,比如不能乱分表了,不然会出错,不过我的是小站,一般不分
发现个比较好的地方,如果外链图片失效,一下子就可以找到那个帖子了
修改后的例子:http://www.netroquality.com/thread-htm-fid-5-search-img.html#tabA
阅读全文
也就是在栏目那里{dede:field.content/}调用栏目内容的时候无法正确显示
其实很简单的
找到include\arc.listview.class.php
大概560行有函数 function ParseTempletsFirst()
下面添加处理
if( $GLOBALS['cfg_multi_site'] == 'Y')
{
$this->Fields['content'] = str_replace('src="/uploads/','src="'.$GLOBALS['cfg_mainsite'].'/uploads/',$this->Fields['content']);
}
就可以了
阅读全文
只针对普通文章
我的想法是显示的时候把图片网址改成绝对网址,也就是图片网址前加个主站的网址就行了
打开include\arc.archives.class.php
找到680多行的function ParseDMFields函数
在
//解析模板
if(is_array($this->dtp->CTags))
前添加个处理
if( $GLOBALS[‘cfg_multi_site’] == ‘Y’)
{
$this->Fields[‘body’] = str_replace(‘src=”/uploads/’,’src=”‘.$GLOBALS[‘cfg_mainsite’].’/uploads/’,$this->Fields[‘body’]);
}
也就是把body的内容里的/uploads/替换一下,加个主站网址
阅读全文
做了几个站都是直接采集英文站,然后用工具直接伪原创
没有进一步处理,估计可读性太差
一段时间后发现效果确实不太好
每天访客很少
看来以后要改变一下
搜索了一下文章来源
有人做出了一些建议
一、添加英文站内容时先用者Google搜索一下标题,看是否有和自己标题完全匹配的搜索结果,如果有就做些更改标题。文章内容的开头和结尾加以少许更改,一篇原创的文章就出来了。
二、利用翻译工具。很简单,翻译软件翻译中文内容,最好找关键词密度大的中文内容,造成的原因可能是别人都看不懂,但是可以做些修改,绝对原创。
三、搜索几篇相近的英文内容,拼凑在一起,同样是篇绝对原创内容。
据大多数的英文站长所说,一个站能保持30%以上的原创内容加上不断的更新就很容易得到较好的排名了,尤其是谷歌和Yahoo.
看来以后得手工更新了
阅读全文
今天给客户弄模板,发现友情连接不能使用底层模板了
主要是这几个不能用了[field:webname/][field:url/][field:logo/]
对于套用别的定义好的LOGO样式的时候非常不方便
于是只好查看了一下源码\include\taglib\flink.lib.php
发现替换的函数竟然有些错误的地方
看来DEDE的开发人员不仔细检查啊
大概116行替换成下面
$rbtext = preg_replace(“/\[field:url([\/\s]{0,})\]/isU”, $dbrow->url, $innertext);
$rbtext = preg_replace(“/\[field:webname([\/\s]{0,})\]/isU”, $dbrow->webname, $rbtext);
$rbtext = preg_replace(“/\[field:logo([\/\s]{0,})\]/isU”, $dbrow->logo, $rbtext);
不解释~
看得懂就看,看不懂好好学学PHP
阅读全文
WordPress显示所有文章的标题和时间有什么好处了?其实在很多的时候我们需要将网站上所有的文章都列出来便用户查阅,以免让用户到处去找,这样就可以给用户一个很好的体验。那么怎么样去实现了?
1、首先是最主要的代码:
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>2、以上代码就实现了我们所需要的功能,最主要的就是第2行的代码,下面来解释一下:
query_posts:这个是WordPress提供用来查询文章的函数;
showposts=20000:文章显示的数量,因为默认是显示10篇文章,所以我们将这个值设置大一点,就可以显示所有文章了;
orderby=date:这个是排序规则,表示按时间排序;
order=DESC:表示按降序还是升序排序,ASC是升序,DESC是降序。
3、以上还只是告诉我们怎么去实现,还没有看到效果。为了方便,我们直接将代码复制到我们模板的index.php文件最后面,如下:
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>
</body>
</html>
保存后,我们就可以在首页最下面看到效果了。
=============================
将query_posts()放在LOOP之前限定你所需要的条件,wp_query会产生一个新的使用你的参数的SQL查询,而忽视通过URL接收到的其它的参数,如果想不忽略,可以在调用中使用$query_string。
query_posts($query_string . “&order=ASC”)
设置文章显示的顺序,但是不干扰其余的查询字符串,参数前须有“&”符号
其他还有N多用途~~
主页不显示某一分类下的日志
<?php if (is_home()) { query_posts(“cat=-3”); } ?>
获得特定的日志
<?php query_posts(‘p=5’); ?>
获得特定的页面
<?php query_posts(‘page_id=7’); //只返回网页7 ?>
<?php query_posts(‘pagename=about’); //只返回关于网页 ?>
<?php query_posts(‘pagename=parent/child’); // 返回母网页的子网页 ?>
创建所有文章列表,并且提供分页功能
<?php query_posts($query_string.’posts_per_page=-1′); while(have_posts()) { the_post(); put your loop here ; } ?>
==========================================
类别 参数
显示属于某个类别的文章
cat
category_name
根据ID显示一个类别
只显示来自一个类别ID的文章
query_posts(‘cat=4’);
根据名称显示一个类别
只显示属于某个类别名的文章
query_posts(‘category_name=Staff Home’);
显示几个类别及ID
显示属于几个类别ID的文章
query_posts(‘cat=2,6,17,38’);
删除某个类别的文章
显示所有的文章,但是类别ID前面有个’-’(负号)负号的类被除外。
query_posts(‘cat=-3’);
删除属于类别3的所有文章。有一个限制性条款:会删除只属于类别3的所有文章。如果一个类别也同时属于其它的类别,这个类别仍然不会被删除。
标签参数
显示与某个标签相关的文章
tag
为某个标签提取文章
query_posts(‘tag=cooking’);
获得拥有任何这样的标签的文章
query_posts(‘tag=bread,baking’);
获取拥有这三个标签的文章
query_posts(‘tag=bread+baking+recipe’);
作者参数
你也可以根据作者限制文章数目
author_name=Harriet
author=3
author_name在 user_nicename区操作, 同时作者 在作者id上操作。
文章 & 网页参数
返回一篇单独的文章或者一个单独的网页
p=1 – 使用文章 ID来显示第一篇文章
name=first-post – 使用 post Slug 显示第一篇文章
page_id=7
pagename=about
showposts=1 (你可以使用 showposts=3,或者其它的任何数字显示一定数目的文章)
由于 模板层级方面的原因, home.php先执行了。这意味这你可以编写一个home.php,home.phh调用query_posts()重新得到一个特别的网页并且将那个 网页设置为你的首页。没有任何插件或者hacks,你需要运行一个机制,并且显示和维护一个非博客的首页。
更有用的方法,可能是利用WP的网页功能并且为你的首页使用这个功能。你可以将”关于网页”设置为entry point或者设置为站点的末页。你可能执行一些更动态的步骤,设置一个自定义网页,显示最近的评论,文章,类别,存档。请看看下面的例子。
时间参数
得到某个特别的时间段内发表的文章
hour=
minute=
second=
day= – 一个月中的每一天; 显示,例如,十五号发表的所有文章。
monthnum=
year=
网页参数
paged=2 -显示使用”以前发表的文章”链接时,通常在网页2上显示的文章。
posts_per_page=10 -每个网页显示的文章数目;-1这个值,会显示所有的文章。
order=ASC -按时间顺序显示文章,以相反的顺序显示DESC(默认)
Offset 参数
你不能转移或者忽视一个或者更多的原始文章,这些文章一般是你的query同时使用offset参数收集到的。
下面的函数会显示(1)最近的5篇文章
query_posts(‘showposts=5&offset=1’);
根据参数排序
根据这个区给得到的文章排序
orderby=author
orderby=date
orderby=category
orderby=title
orderby=modified
orderby=modified
orderby=menu_order
orderby=parent
orderby=ID
orderby=rand
同时考虑”ASC”或者的”DESC”的排序参数
联合参数
你可能从上面的例子中注意到,你使用一个&(&符号)将参数组合在一起,像:
query_posts(‘cat=3&year=2004’);
类别13,关于当前月份显示在主页上的文章:
if (is_home()) { query_posts ($query_string . ‘&cat=13&monthnum=’ . date(‘n’,current_time(‘timestamp’))); }
在2.3版本中,这个参数组合会返回属于类别1同时属于类别3的文章,只显示两篇(2)文章,根据标题,按降序排列:
query_posts(array(‘category__and’=>array(1,3),’showposts’=>2,’orderby’=>title,’order’=>DESC));
在2.3和2.5版本中,你可能期待下面的内容,返回属于类别1并且标签为”苹果”的所有文章
query_posts(‘cat=1&tag=apples’);
一个bug阻止这个运行。请看看Ticket #5433,一个工作区要搜索几个使用+的标签
query_posts(‘cat=1&tag=apples+apples’);
对于先前的查询,这个会产生期待的结果。注意使用’cat=1&tag=apples+oranges’能够产生期待的结果。
————————————
所以我的调用是
<div>
<?php query_posts(“showposts=20000&orderby=date&order=DESC&cat=13”)?>
<?php while (have_posts()) : the_post(); ?>
<a href=”<?php the_permalink() ?>” rel=”bookmark”><?php the_title(); ?></a> <?php the_time(‘m-d’); ?>
<br/>
<?php endwhile; ?>
</div>
阅读全文
用Fireworks便可轻松解决批量添加水印的问题。
题目:
印有字样/图案的透明.gif图片(水印)1张,待处理图片n张,水印尺寸与待处理图基本相符,需要将水印贴到待处理图上。
步骤:
1、打开Fireworks,并用其打开水印,及待处理的第一张图片。
2、全选水印,复制,粘贴到待处理图片上。
3、看下方的历史记录(“帧 和 历史记录”),有一个粘贴命令,选中它,点下方的保存按钮,名字随便起一个如“水印”。
4、点击右上角的文件菜单,选择批处理,选择你要批量处理的图片,点增加,再点继续。
5、在“命令”中找到你刚才保存的命令,点添加,点继续。
6、选择输出的位置,建议自定义一个新的目录,以后出了什么问题好重做。
7、操作完成,接下来等待Fireworks处理便可。若待处理图片的尺寸有变化,它会提示你要不要重新取样,我选不要,水印仍按原本地贴上去。
大功告成,此方法虽然不快,但也慢不到哪去,总比去找那些杂七杂八的软件好多了。以上只是一个简单的主体步骤,各位可扩展一下,添加更多的效果。
阅读全文