这是我从网上转来的,转来转去的,已经不知道当初的作者是谁了,转过来,留给自己日后看看同时与朋友一起分享!
百度收录减少的问题,好多站长都遇见过,如果是新站,出现突然减少,其实也没什么可担心的,因为百度和Google不一样,Google虽然限制宽松,但是稳定,对页面有一定的要求,更新内容是逐步增加。而百度,最喜欢做的是收录新站,只要是页面都收录,然后慢慢整理。
具体的原因可能性太多,大约有几十种,把常见的原因列出来。请看下面:
(1)网站作弊
原因:比如堆积关键字,隐性文字等等。如果出现这样的情况,百度就算已经收录了你,别庆幸自己蒙混过关,因为在更新的时候也会慢慢剔除的。二级域名和博客交叉连接。
解决方法:这个不用说了吧,赶快把自己的页面好好修改一下吧!另外,二级域名不要过分乱用。博客交叉连接现在无用了,里面留一两个连接就可以,多了去掉。
百度收录减少的问题,好多站长都遇见过,如果是新站,出现突然减少,其实也没什么可担心的,因为百度和Google不一样,Google虽然限制宽松,但是稳定,对页面有一定的要求,更新内容是逐步增加。而百度,最喜欢做的是收录新站,只要是页面都收录,然后慢慢整理。
具体的原因可能性太多,大约有几十种,把常见的原因列出来。请看下面:
(1)网站作弊
原因:比如堆积关键字,隐性文字等等。如果出现这样的情况,百度就算已经收录了你,别庆幸自己蒙混过关,因为在更新的时候也会慢慢剔除的。二级域名和博客交叉连接。
解决方法:这个不用说了吧,赶快把自己的页面好好修改一下吧!另外,二级域名不要过分乱用。博客交叉连接现在无用了,里面留一两个连接就可以,多了去掉。
Discuz后台有个计划任务,可以使php自动运行。
DZ计划任务的机制是这样:
1.首先在到了触发计划任务的时间,有访问(会员,游客,搜索引擎的蜘蛛)然后触发该计划任务发生。(因为PHP是触发是语言,没有人去访问他,他什么也做不了。)
2. 计划任务执行.
3. 执行成功,返回执行成功的信息,更新到数据库中记录当前执行的时间,下一次需要执行的时间。
目前让php自动运行的的方法有以下几种方法:
1:在windows下用计划任务
在linux下用crantab
缺点:必须具有服务器权限
2:用个某个网页隔一段时间去刷新,比如用js或者php程序来实现。
缺点:必须用某个工具将该页开着。
3:在有用户访问的时候触发
缺点:必须在用户访问的页面里包含触发程序。
DZ计划任务的机制是这样:
1.首先在到了触发计划任务的时间,有访问(会员,游客,搜索引擎的蜘蛛)然后触发该计划任务发生。(因为PHP是触发是语言,没有人去访问他,他什么也做不了。)
2. 计划任务执行.
3. 执行成功,返回执行成功的信息,更新到数据库中记录当前执行的时间,下一次需要执行的时间。
目前让php自动运行的的方法有以下几种方法:
1:在windows下用计划任务
在linux下用crantab
缺点:必须具有服务器权限
2:用个某个网页隔一段时间去刷新,比如用js或者php程序来实现。
缺点:必须用某个工具将该页开着。
3:在有用户访问的时候触发
缺点:必须在用户访问的页面里包含触发程序。
注册总是失败,sql语句也运行了,可就是不能向数据库中插入数据。后来发现,原来在程序中链接了多个数据库,在sql语句后面习惯性的没有加指定的数据库链接,所以造成了,数据库中无法插入数据。
数据库链接代码(链接多个数据库)
数据库链接代码(链接多个数据库)
AJAX的无刷新机制使得在注册系统中对于注册名称的检测能即时显示。
常见的用户注册是用户输入用户名,后台程序检测数据库中用户名是否重复而做出注册的成功与失败之提示(当用户注册重名时将返回重新注册),或者稍微人性化一点就是在用户名文本框后添加一个检测按钮,让用户检测后再做注册。
以上操作,对于用户体验方面来说是比较“差劲”的,一个很好的用户体验就是:当用户输入完注册用户名后,Web系统应能即时检查并即时显示,并在检查和显示的同时不影响当前页面的操作。这也就是“异步获取数据”的要求,而这正是AJAX的强项
比如如下的示例就能展现AJAX的该功能:
http://www.cnbruce.com/test/ajax/t1.htm
当输入已经存在的用户名(如cnbruce、cnrose)时页面将显示重名不能注册(false),否则将显示可以注册(true),这为用户的注册提供了快速的参考,用户体验至上。
那么下面就来说说是如何来实现这样的功能的。
其实通过如上的t1.htm的源代码,各位就可以看到AJAX的精髓
首先是定义XMLHttp对象
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
关于这部分内容的说明请看:
http://www.cnbruce.com/blog/showlog.asp?cat_id=34&log_id=987
接着是自定义函数
function callServer() {
var u_name = document.getElementById("u_name").value;
if ((u_name == null) || (u_name == "")) return;
var url = "cu.asp?name=" + escape(u_name);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
该函数的主要功能就是异步获得cu.asp的内容,在此前将先提取当前页表单元素“u_name”即用户名文本框zhogn 的值,通过cu.asp其后的参数及赋值而得到了不同的结果(true or false)。
那么这里要说的即是cu.asp,他的主要功能就是接受URL参数name的值做内容显示,该内容最终被t1.htm异步获取。
<!--cu.asp的源码示例-->
<!--#include file="conn.asp"-->
<%
name=request.querystring("name")
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from u_ser where u_name='"&name&"'"
rs.Open sql,conn,1,1
if rs.eof and rs.bof then
response.write("true")
else
response.write("false")
end if
rs.close
set rs=nothing
call CloseDatabase
%>
如何将异步获取的信息显示在当前页呢
function updatePage() {
if (xmlHttp.readyState < 4) {
test1.innerHTML="loading...";
}
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
test1.innerHTML=response;
}
}
其中xmlHttp.readyState中的readyState表示服务器在处理请求时的进展状况,其值分别有0-4,各有其说明情况,具体请参看:
http://www.cnbruce.com/blog/showlog.asp?cat_id=34&log_id=718
使用DHTML中的innerHTML可显示信息在定义的 是否能注册 上。
其余表单页面就不详叙了
打包文件下载(右键选择另存为,下载后修改文件后缀名为rar,解压打开):
http://www.cnbruce.com/test/ajax/ajax.htm
常见的用户注册是用户输入用户名,后台程序检测数据库中用户名是否重复而做出注册的成功与失败之提示(当用户注册重名时将返回重新注册),或者稍微人性化一点就是在用户名文本框后添加一个检测按钮,让用户检测后再做注册。
以上操作,对于用户体验方面来说是比较“差劲”的,一个很好的用户体验就是:当用户输入完注册用户名后,Web系统应能即时检查并即时显示,并在检查和显示的同时不影响当前页面的操作。这也就是“异步获取数据”的要求,而这正是AJAX的强项
比如如下的示例就能展现AJAX的该功能:
http://www.cnbruce.com/test/ajax/t1.htm
当输入已经存在的用户名(如cnbruce、cnrose)时页面将显示重名不能注册(false),否则将显示可以注册(true),这为用户的注册提供了快速的参考,用户体验至上。
那么下面就来说说是如何来实现这样的功能的。
其实通过如上的t1.htm的源代码,各位就可以看到AJAX的精髓
首先是定义XMLHttp对象
var xmlHttp = false;
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
xmlHttp = false;
}
}
if (!xmlHttp && typeof XMLHttpRequest != 'undefined') {
xmlHttp = new XMLHttpRequest();
}
关于这部分内容的说明请看:
http://www.cnbruce.com/blog/showlog.asp?cat_id=34&log_id=987
接着是自定义函数
function callServer() {
var u_name = document.getElementById("u_name").value;
if ((u_name == null) || (u_name == "")) return;
var url = "cu.asp?name=" + escape(u_name);
xmlHttp.open("GET", url, true);
xmlHttp.onreadystatechange = updatePage;
xmlHttp.send(null);
}
该函数的主要功能就是异步获得cu.asp的内容,在此前将先提取当前页表单元素“u_name”即用户名文本框zhogn 的值,通过cu.asp其后的参数及赋值而得到了不同的结果(true or false)。
那么这里要说的即是cu.asp,他的主要功能就是接受URL参数name的值做内容显示,该内容最终被t1.htm异步获取。
<!--cu.asp的源码示例-->
<!--#include file="conn.asp"-->
<%
name=request.querystring("name")
Set rs = Server.CreateObject ("ADODB.Recordset")
sql = "Select * from u_ser where u_name='"&name&"'"
rs.Open sql,conn,1,1
if rs.eof and rs.bof then
response.write("true")
else
response.write("false")
end if
rs.close
set rs=nothing
call CloseDatabase
%>
如何将异步获取的信息显示在当前页呢
function updatePage() {
if (xmlHttp.readyState < 4) {
test1.innerHTML="loading...";
}
if (xmlHttp.readyState == 4) {
var response = xmlHttp.responseText;
test1.innerHTML=response;
}
}
其中xmlHttp.readyState中的readyState表示服务器在处理请求时的进展状况,其值分别有0-4,各有其说明情况,具体请参看:
http://www.cnbruce.com/blog/showlog.asp?cat_id=34&log_id=718
使用DHTML中的innerHTML可显示信息在定义的 是否能注册 上。
其余表单页面就不详叙了
打包文件下载(右键选择另存为,下载后修改文件后缀名为rar,解压打开):
http://www.cnbruce.com/test/ajax/ajax.htm
还记得几年前的那些讨厌的浏览器战争吗?没有一样东西在不同的浏览器上得到同样的结果。不管您是否相信,这些战争仍然在继续,虽然规模较小。但令人奇怪的是,XMLHttpRequest 成了这场战争的牺牲品之一。因此获得 XMLHttpRequest 对象可能需要采用不同的方法。下面我将详细地进行解释。
使用 Microsoft 浏览器
Microsoft 浏览器 Internet Explorer 使用 MSXML 解析器处理 XML。因此如果编写的 Ajax 应用程序要和 Internet Explorer 打交道,那么必须用一种特殊的方式创建对象。
但并不是这么简单。根据 Internet Explorer 中安装的 JavaScript 技术版本不同,MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。请参阅如下代码,其中的代码在 Microsoft 浏览器上创建了一个 XMLHttpRequest。
使用 Microsoft 浏览器
Microsoft 浏览器 Internet Explorer 使用 MSXML 解析器处理 XML。因此如果编写的 Ajax 应用程序要和 Internet Explorer 打交道,那么必须用一种特殊的方式创建对象。
但并不是这么简单。根据 Internet Explorer 中安装的 JavaScript 技术版本不同,MSXML 实际上有两种不同的版本,因此必须对这两种情况分别编写代码。请参阅如下代码,其中的代码在 Microsoft 浏览器上创建了一个 XMLHttpRequest。
同步登录跟官方的没有什么两样,现在重点是怎么进行积分同步。
先看看dedecms通行证的原理:
bbs文件 ->
发送GET请求到 -> dedecms/member/passport/pp_dederemote_new.php ->
pp_dederemote_new.php 处理GET数据并返回成功与否
所以所有操作都是在pp_dederemote_new.php这文件进行的,其它的只是按指定规格调用这参数SynchDedeCms()
织梦的用户表中有money一项,我们就用money与discuz的积分initcredits项来整合同步。
修改如下:
先看看dedecms通行证的原理:
bbs文件 ->
发送GET请求到 -> dedecms/member/passport/pp_dederemote_new.php ->
pp_dederemote_new.php 处理GET数据并返回成功与否
所以所有操作都是在pp_dederemote_new.php这文件进行的,其它的只是按指定规格调用这参数SynchDedeCms()
织梦的用户表中有money一项,我们就用money与discuz的积分initcredits项来整合同步。
修改如下:
因为自己一直做的是网络推广的工作,自己也有做过个人网站,所以有一个好的流量统计工具,对推广的帮助是非常的大。
记得以前才接触网络推广的时候,那时候我主要是去论坛发贴推广流量,就是找了几十个大的论坛,都去发同样的宣传内容,然后通过流量统计工具,看从哪里过来的IP比较多,质量比较好,以后就针对性的去那几家论坛宣传。从而用最少的时间,做到最好的效果。
以前我用的最多的流量统计工具是武林榜和51LA,对这两个统计比较熟悉。现在雅虎也出了一个统计,最近几天试用了下,感觉还行。现在就说说雅虎统计和51LA和武林榜统计自己的用户体验比较吧。
---------------------------------------------------------------------------------------------
51LA统计:是我以前用的时间最长,最久的一个统计,可能是用习惯了,个人觉得非常好用。51LA统计也应该是现在市场份额最大的一个统计工具。只是最近常遭受服务器不稳定的影响,再加上雅虎统计的出现,对51LA能否保证市场份额第一的地位,是个很大的挑战。
优点:能即时的看到各种流量来源数据
记得以前才接触网络推广的时候,那时候我主要是去论坛发贴推广流量,就是找了几十个大的论坛,都去发同样的宣传内容,然后通过流量统计工具,看从哪里过来的IP比较多,质量比较好,以后就针对性的去那几家论坛宣传。从而用最少的时间,做到最好的效果。
以前我用的最多的流量统计工具是武林榜和51LA,对这两个统计比较熟悉。现在雅虎也出了一个统计,最近几天试用了下,感觉还行。现在就说说雅虎统计和51LA和武林榜统计自己的用户体验比较吧。
---------------------------------------------------------------------------------------------
51LA统计:是我以前用的时间最长,最久的一个统计,可能是用习惯了,个人觉得非常好用。51LA统计也应该是现在市场份额最大的一个统计工具。只是最近常遭受服务器不稳定的影响,再加上雅虎统计的出现,对51LA能否保证市场份额第一的地位,是个很大的挑战。
优点:能即时的看到各种流量来源数据
foreach
PHP 4(不是 PHP 3)包括了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。
注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
注: 此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。
注: foreach 不支持用“@”来禁止错误信息的能力。
你可能注意到了以下的代码功能完全相同:
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
echo "Value: $value<br>\n";
}
?>
以下代码功能也完全相同:
<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "Key: $key; Value: $value<br>\n";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br>\n";
}
?>
示范用法的更多例子:
<?php
/* foreach example 1: value only */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
print "Current value of \$a: $v.\n";
}
/* foreach example 2: value (with key printed for illustration) */
$a = array (1, 2, 3, 17);
$i = 0; /* for illustrative purposes only */
foreach ($a as $v) {
print "\$a[$i] => $v.\n";
$i++;
}
/* foreach example 3: key and value */
$a = array (
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);
foreach ($a as $k => $v) {
print "\$a[$k] => $v.\n";
}
/* foreach example 4: multi-dimensional arrays */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
/* foreach example 5: dynamic arrays */
foreach (array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
?>
分开检索也很容易啊,只不过如果你没有别的特殊需要和起来就够用了
PHP 4(不是 PHP 3)包括了 foreach 结构,和 Perl 以及其他语言很像。这只是一种遍历数组简便方法。foreach 仅能用于数组,当试图将其用于其它数据类型或者一个未初始化的变量时会产生错误。有两种语法,第二种比较次要但却是第一种的有用的扩展。
foreach (array_expression as $value) statement
foreach (array_expression as $key => $value) statement
第一种格式遍历给定的 array_expression 数组。每次循环中,当前单元的值被赋给 $value 并且数组内部的指针向前移一步(因此下一次循环中将会得到下一个单元)。
第二种格式做同样的事,只除了当前单元的键值也会在每次循环中被赋给变量 $key。
注: 当 foreach 开始执行时,数组内部的指针会自动指向第一个单元。这意味着不需要在 foreach 循环之前调用 reset()。
注: 此外注意 foreach 所操作的是指定数组的一个拷贝,而不是该数组本身。因此即使有 each() 的构造,原数组指针也没有变,数组单元的值也不受影响。
注: foreach 不支持用“@”来禁止错误信息的能力。
你可能注意到了以下的代码功能完全相同:
<?php
$arr = array("one", "two", "three");
reset ($arr);
while (list(, $value) = each ($arr)) {
echo "Value: $value<br>\n";
}
foreach ($arr as $value) {
echo "Value: $value<br>\n";
}
?>
以下代码功能也完全相同:
<?php
reset ($arr);
while (list($key, $value) = each ($arr)) {
echo "Key: $key; Value: $value<br>\n";
}
foreach ($arr as $key => $value) {
echo "Key: $key; Value: $value<br>\n";
}
?>
示范用法的更多例子:
<?php
/* foreach example 1: value only */
$a = array (1, 2, 3, 17);
foreach ($a as $v) {
print "Current value of \$a: $v.\n";
}
/* foreach example 2: value (with key printed for illustration) */
$a = array (1, 2, 3, 17);
$i = 0; /* for illustrative purposes only */
foreach ($a as $v) {
print "\$a[$i] => $v.\n";
$i++;
}
/* foreach example 3: key and value */
$a = array (
"one" => 1,
"two" => 2,
"three" => 3,
"seventeen" => 17
);
foreach ($a as $k => $v) {
print "\$a[$k] => $v.\n";
}
/* foreach example 4: multi-dimensional arrays */
$a[0][0] = "a";
$a[0][1] = "b";
$a[1][0] = "y";
$a[1][1] = "z";
foreach ($a as $v1) {
foreach ($v1 as $v2) {
print "$v2\n";
}
}
/* foreach example 5: dynamic arrays */
foreach (array(1, 2, 3, 4, 5) as $v) {
print "$v\n";
}
?>
分开检索也很容易啊,只不过如果你没有别的特殊需要和起来就够用了
1、在{dede:artlist}{/dede:artlist}中把stime的显示格式由0000-00-00改为其他格式
[field:pubdate function='strftime("%m-%d",@me)'/] 格式00-00
[field:pubdate function='strftime("%m/%d",@me)'/] 格式00/00
[field:pubdate function='strftime("%y/%m/%d",@me)'/] 0000/00/00
2、栏目名称边上加(文章条数)功能
方法: 打开 \include\inc_arcpart_view.php 在 "//获得一个类目的链接信息" 下面找到
if(!is_array($row)) return "";
在其上面加上两行:
$countarc = $this->dsql->GetOne("Select count(ID) as dd From #@__archives where typeid='$typeid'");
$row['totalarc']=$countarc['dd'];
然后 在 模版的 [field:typename /] 后加上 ( [field:totalarc /] ) 调用即可!
3、相关文章更相关的修改方法
相关的含义是:文章的关键字和其它文章的关键字相同或者文章的关键字在其它文章题目中。
在inc_fun_SpGetArcList.php中可以看出来
$orwhere .= " And CONCAT(arc.title,arc.keywords) REGEXP '$rstr' ";
原帖mylove2046写的:
"相关文章"的正确修改方法
无论是V3版还是V4版,"相关文章"都不相关,修改方法如下:
includeinc_archives_view.php
在第330行附近找到
if($tagname=="likeart") $keywords = ""; //str_replace(" ",",",trim($this->Fields['keywords']));
改为
if($tagname=="likeart") $keywords = str_replace(" ",",",trim($this->Fields['keywords']));
在335行附近找到
else if($tagname=="likeart") $orderby = "near";
改为
else if($tagname=="likeart") $orderby = "id";
其实改动一下代码和系统配置,其它配置里面的系统变量,使用关键词关连文章:
if($tagname=="likeart") $keywords = ""; //str_replace(" ",",",trim($this->Fields['keywords']));
改为
if($tagname=="likeart") $keywords = str_replace(" ",",",trim($this->Fields['keywords']));
4、dedecms会员登录后修改个人资料报错
现象
member\index_do.php on line 262
解决办法
在 $dsql->SetQuery($query);之前加上一段
$dsql = new DedeSql();
5、Tag加链接
{dede:field name='keywords' runphp='yes' }
if(!empty(@me)){
$kws = explode(' ',@me);
@me = "";
foreach($kws as $k){
@me .= "<a href='/plus/search.php?keyword=$k' target='blank'>$k</a> ";
}
@me= str_replace('+', ' ',trim(@me));
}
{/dede:field}
6、栏目合并:
update dede_archives set typeid=新ID where typeid=原ID
update dede_addonarticle set typeid=新ID where typeid=原ID
6、新文章带NEW
[field:senddate runphp='yes']
$ntime = time();
$oneday = 3600 * 24;
if(($ntime - @me)<$oneday) @me = "<font color='red'>[new]</font>";
else @me = "";
[/field:senddate]
7、LOOP标记调用最新评论
{dede:loop table="dede_feedback" sort="dtime" row="5"}
<a href='http://xxxxx/plus/view.php?aid=[field:aid /]' target="_blank" title='文章标题:[field:arctitle/]
评论时间:[field:dtime function="GetDateMk('@me')"/]
发布作者:[field:username /]'>
[field:msg function="cn_substr('@me',50)" /]
</a>
<br>
{/dede:loop}
[field:pubdate function='strftime("%m-%d",@me)'/] 格式00-00
[field:pubdate function='strftime("%m/%d",@me)'/] 格式00/00
[field:pubdate function='strftime("%y/%m/%d",@me)'/] 0000/00/00
2、栏目名称边上加(文章条数)功能
方法: 打开 \include\inc_arcpart_view.php 在 "//获得一个类目的链接信息" 下面找到
if(!is_array($row)) return "";
在其上面加上两行:
$countarc = $this->dsql->GetOne("Select count(ID) as dd From #@__archives where typeid='$typeid'");
$row['totalarc']=$countarc['dd'];
然后 在 模版的 [field:typename /] 后加上 ( [field:totalarc /] ) 调用即可!
3、相关文章更相关的修改方法
相关的含义是:文章的关键字和其它文章的关键字相同或者文章的关键字在其它文章题目中。
在inc_fun_SpGetArcList.php中可以看出来
$orwhere .= " And CONCAT(arc.title,arc.keywords) REGEXP '$rstr' ";
原帖mylove2046写的:
"相关文章"的正确修改方法
无论是V3版还是V4版,"相关文章"都不相关,修改方法如下:
includeinc_archives_view.php
在第330行附近找到
if($tagname=="likeart") $keywords = ""; //str_replace(" ",",",trim($this->Fields['keywords']));
改为
if($tagname=="likeart") $keywords = str_replace(" ",",",trim($this->Fields['keywords']));
在335行附近找到
else if($tagname=="likeart") $orderby = "near";
改为
else if($tagname=="likeart") $orderby = "id";
其实改动一下代码和系统配置,其它配置里面的系统变量,使用关键词关连文章:
if($tagname=="likeart") $keywords = ""; //str_replace(" ",",",trim($this->Fields['keywords']));
改为
if($tagname=="likeart") $keywords = str_replace(" ",",",trim($this->Fields['keywords']));
4、dedecms会员登录后修改个人资料报错
现象
member\index_do.php on line 262
解决办法
在 $dsql->SetQuery($query);之前加上一段
$dsql = new DedeSql();
5、Tag加链接
{dede:field name='keywords' runphp='yes' }
if(!empty(@me)){
$kws = explode(' ',@me);
@me = "";
foreach($kws as $k){
@me .= "<a href='/plus/search.php?keyword=$k' target='blank'>$k</a> ";
}
@me= str_replace('+', ' ',trim(@me));
}
{/dede:field}
6、栏目合并:
update dede_archives set typeid=新ID where typeid=原ID
update dede_addonarticle set typeid=新ID where typeid=原ID
6、新文章带NEW
[field:senddate runphp='yes']
$ntime = time();
$oneday = 3600 * 24;
if(($ntime - @me)<$oneday) @me = "<font color='red'>[new]</font>";
else @me = "";
[/field:senddate]
7、LOOP标记调用最新评论
{dede:loop table="dede_feedback" sort="dtime" row="5"}
<a href='http://xxxxx/plus/view.php?aid=[field:aid /]' target="_blank" title='文章标题:[field:arctitle/]
评论时间:[field:dtime function="GetDateMk('@me')"/]
发布作者:[field:username /]'>
[field:msg function="cn_substr('@me',50)" /]
</a>
<br>
{/dede:loop}