Skip to content

如何去除DEDECMS系统中友情链接里的“织梦链”

17-十一-11

最近不得已用dedecms来做项目,已经很久没用dede了,现在的版本都好高,功能也强不少。记得以前dede会背地里向服务器发送网站的地址之类的信息,这次测试发现,在浏览器这层,除了向dede的网站请求了几张图片之外,没有其它多余的动作。正当我以为dede走上正道的时候,发现页面底部默认的友情链接列表里有一堆不知道哪里来的链接,后台数据库里并没有这些内容。网上搜了一把,主要是自己懒不想动脑子,说是dede在解析模版标签的时候偷偷的加上去的。于是,还得动脑子了。

在dede的include/taglib/flinktype.lib.php文件中对type做了判断,凡是id为999的,就是“织梦链”。只要删了下面这段,就可以不显示了。

$dedecms = false;
$dedecms->id = 999;
$dedecms->typename = ‘织梦链’;
if($type == ‘dedecms’) $row[] = $dedecms;

到这里应该说问题解决了,“织梦链”被干掉了,欢呼吧。

打住,这只是把type给干掉了,那“织梦链”依然存在,只是因为没有了type系统不会显示而已。这些“织梦链”到底从哪里来的呢?

跟flinktype.lib.php同一个目录有一个flink.lib.php,打开。你会发现有这么一段:

 if($typeid == 0)
{
$wsql .= ”;
}
else if($typeid == 999)
{
//require (DEDEDATA.’/admin/config_update.php’);
//if (!class_exists(‘DedeHttpDown’, false)) {
//require_once(DEDEINC.’/dedehttpdown.class.php’);
//}
//$del = new DedeHttpDown();
//$del->OpenUrl($linkHost);
//$linkUrl = $del->GetHtml().”flink.php?lang={$cfg_soft_lang}&site={$_SERVER['SERVER_NAME']}”;
//$del->OpenUrl($linkUrl);
//$linkInfo = $del->GetHtml();
//if(!empty($linkInfo)){
//$dedelink = explode(“\t”, $linkInfo);
//for($i=0; $i<count($dedelink); $i++) {
//if($i%5==0 && $i!=count($dedelink)) {
//$revalue .= “<li><a href=’http://”.@$dedelink[$i+1].”‘ target=’_blank’ title=’”.@$dedelink[$i+4].”‘>”.@$dedelink[$i].”</a></li>”;
//}
//}
//}
//return $revalue;
}
else
{
$wsql .= “And typeid = ‘$typeid’”;
}

注意被我注释掉的部分,系统先创建一个http连接,去dede的风站上把“织梦链”的数据下载下来,与此同时,你的网站的地址也被发送给了dede。我说怎么在浏览器跟踪不到dede去访问他们自己的网站,原来它是通过PHP在服务器端来偷发数据,这下被打回原形了。注释掉或是删掉上面相关代码,“织梦链”才算真正被消灭。

dede在这方面的技术看来是越来越精了,一个友情链接都会出这样的事,更何况系统的核心代友码。新版本的dede必要要从 头把代码过滤一遍才行了。

就这么多。睡觉,太困了。

 

 

 

 

 

 

 

CodeIgniter 去掉URL里的index.php

11-十一-11

折腾了半天的zend framework,发现zend入门太难.虽然已经算是入了门,可开发起来还是很累.想到以前用过的CodeIgniter,开发速度很快.小巧易用.听说新版支持了php5.于是转去用CI来开发.
以前用过,所以不用到处找文档,CI文档本来就挺全的.配置url的时候遇到点麻烦,直接抄论坛里的.htaccess文件,居然报500错误,以为是mac os的配置不同,后来换到windows居然也一样,百思不得其解.到处找文章,都是同一个文件.同样的配置.别人就行.
无奈之下在论坛里那个帖子里翻来翻去,翻到最后一页的时候,有人说了一句坑爹,终于明白是怎么回事了.RewriteCond里只有一个斜杠,但被LZ写成了两个,难怪会500错误.
正确的.htaccess文件如下:

RewriteEngine on
RewriteCond $1 !^(index\.php|images|robots\.txt)
RewriteRule ^(.*)$ /index.php/$1 [L]

花了一个小时,订餐的小程序开了个头.

制作6寸的电子书

05-十一-11

由于前一阵小钢炮送了个Kindle 4给我,于是乎,天天忙着找书看。

Kindle 4支持的电子书的格式还是挺多的,平时搜集了些电子书大多是pdf,djvu格式的,epub的很少。对于epub格式,Kindle 4默认是打不开的,必须要转换成mobi,Kindle 的默认格式才行。转换到也不难,有一个很棒的工具,calibre,这个工具可以管理电子书,转换格式,管理Kindle等,功能强大。看书必备软件之一。

对于pdf格式,虽然Kindle 4默认支持,可Kindle 4那小小的6寸可没有办法完美的显示,因为普通PDF的书分辨率都很大,所以在Kindle 4上显的格外的小,看着非常吃力。为了适应6寸小屏,只能转换。主要工具可以选 adobe 的acrobat,经过我的努力研究,始终没有找到方法。

后来偶然间用系统自带的预览工具打开PDF,再用网上的办法装文件打印成6寸的pdf,竟然成了。放到Kindle 4 上一看,果然不一样了。不一样也只是格式对于,如果遇到扫描版的PDf,依然是字体小,看不清,很累人。

搞了半天,还是mobi格式的最好看。

SkylineGlobe 二次开发

31-十-11

Skyline用的com控件,加载到IE里。所以,只有IE才能用。
用Skyline的电脑里,IE要关闭TAB功能,不然,多开几家的web页面就会造成冲突,加载失败。
Skyline上的API手册,网站上进去的内容,跟从exmaple里进去的内容,有些出入。
对于javascript上的写法也有区别。网站上的例子在HTML里加入object。exmaple
网站上的例子是这样的:
HTMl里加载几个object

<object id=”SGWorld” classid=”CLSID:3a4f91b0-65a8-11d5-85c1-0001023952c1″ style=”visibility: hidden;height: 0″></object>
<object id=”TE” classid=”clsid:3a4f9192-65a8-11d5-85c1-0001023952c1″ style=”width: 600px;height: 600px”></object>

然后再通过 onLoad的init()方法来加载地图

 

<script type=”text/javascript”>
function Init() {
try {
var flyPath = “http://www.skylineglobe.com/SkylineGlobe/WebClient/PresentationLayer/WebClient/SkyglobeLB.fly”;
// attach callback to the load finished event
SGWorld.AttachEvent(“OnLoadFinished”, OnProjectLoadFinished);
// Load default developer fly file from www.skylineglobe.com web site.
// default load is in async mode
SGWorld.Project.Open(flyPath);
alert(“Opening project ” + flyPath + ” in async mode”);
}
catch (e) {
alert(“Error: ” + e.description);
}

}

function OnProjectLoadFinished() {
alert(“Received project loaded event. Click OK to fly to Washington DC.”);
var Washington = SGWorld.Creator.CreatePosition(-77.036667, 38.895111, 1500);
SGWorld.Navigate.FlyTo(Washington);
}
</script>

对于新的版本来说,只要有一个div,通过ID就能创建地图:

try{
globe = new SGWorld(“myWorld”, function(){
globe.teCore.ITerraExplorer.Load(flyPath);
});

}catch(e){
alert(e.description);
}

这一点点差别造成了很大的麻烦。

数字武夷 用了javascript和vbscript混合的方式来写,又用的旧版。实在是太麻烦了。它上面的东西在新版本里都找不着在哪的。这可怎么办。
你说这skyline自己都不统一API,如何让我们开发的人去用呢。

Zend Framework 一

23-十-11

今天 再一次拿起Zend Framework,一直认为Zend framework的官方教程难懂,照着抄都无法运行。这次找到一个非官方的,反正挺有名的,再次证明老外的东西就是好。

教程看这里:http://akrabat.com/zend-framework-tutorial

总结一下Zend Framework要怎么用。

首先要配置好开发环境,php的运行环境就不讲了,喜欢用套件的用套件,不喜欢用套件的就自己配,反正能运行php就行了。然后,配置zend Framework,截一段教程里的原文:

  • Extractthedownloadedarchivefile,ZendFramework-1.11.10-minimal.zipinyourDownloads directory by double clicking on it.
  • Copyto/usr/local/ZendFrameworkClibyopeningTerminalandtyping:
    sudo cp -r ~/Downloads/ZendFramework-1.11.10-minimal /usr/local/ ZendFrameworkCli
  • Edit your bash profile to provide an alias:
    • From Terminal, type: open ~/.bash_profile
    • Addaliaszf=/usr/local/ZendFrameworkCli/bin/zf.shtotheendofthefile • Save and exit TextEdit.
    • Exit Terminal.

执行zf show version,能看到 Zend Framework Version: 1.11.10    ,说明zend framework装好了。

下面可以创建项目了,zend framework写项目基本上是用zf命令来完成搭建,然后再自己添点代码就成了。

创建项目:zf create project first-zf

执行这个命令之后,一个基本的框架就搭起来了。

创建controller:zf create controller Try

项目创建完有一个默认的controller叫Index。想创建自己的功能就执行上面的命令。

有了controller,还缺action,不然controller不知道自己能做什么。

创建action:zf create action add Index

给Index controller创建一个add的action,也就是说Index有一个add功能。同样的想给自己的模块加上add功能就执行 zf create action add Try。

接下来,是view部分。zend framework默认已经创建好了view,运行时,zend framework会加载与controller同名且action同名的view模版来显示内容。

比如Try模块,要想显示add表单,framework会自动去找 try/add.phtml文件显示,而这个文件已经在执行zf create action的时候自动创建了。我们只要在里面加内容就行。非常方便。

最后,是数据的部分。官方教程添加数据库应用很麻烦。非官方的教程就很简章直接。

修改application.ini文件,加入:

resources.db.adapter = PDO_MYSQL
resources.db.params.host = localhost
resources.db.params.username = rob
resources.db.params.password = 123456
resources.db.params.dbname = zf-tutorial

这样数据库连接就已经做好了。只不过还没有告诉程序去查询什么。那么好,我们自己创建个表。比如叫albums,字段自己想吧。

执行: zf create db-table Albums albums

就创建了一个数据库类,叫albums,比官网上手工来得简单多了。

在这个类里面可以加上一些方法,比如添加记录的 addAblum方法,或者是修改数据的updateAblum方法。这里就根据需要来了。

还有一个创建form,表单。

命令:zf create from Ablum

也是创建了个类。在这里面可以用zend framework提供的方式来创建表单。

先这么多,下次再详细记录一下。