同步登录跟官方的没有什么两样,现在重点是怎么进行积分同步。
先看看dedecms通行证的原理:
bbs文件 ->
发送GET请求到 -> dedecms/member/passport/pp_dederemote_new.php ->
pp_dederemote_new.php 处理GET数据并返回成功与否

所以所有操作都是在pp_dederemote_new.php这文件进行的,其它的只是按指定规格调用这参数SynchDedeCms()

织梦的用户表中有money一项,我们就用money与discuz的积分initcredits项来整合同步。

修改如下:
Tags:

foreach 的用法   不指定

jed , 2007-11-22 11:36 , 代码编程 , 评论(1) , 阅读(3936) , Via 本站原创
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";
}
?>


分开检索也很容易啊,只不过如果你没有别的特殊需要和起来就够用了
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}


使用函数去除空格的程序 不指定

jed , 2007-11-6 09:44 , 代码编程 , 评论(1) , 阅读(3566) , Via 本站原创


<?php  
      $string="     My   dog   is   very   clever             ";  
      echo   "原字符串长度:".strlen($string)."字符<br>";  
      $s1=chop($string);  
      echo   "去掉末端空格:".strlen($s1)."字符<br>";  
      $s2=trim($string);  
      echo   "去掉首尾空格:".strlen($s2)."字符<br>";  
      $s3=ltrim($string);  
      echo   "去掉前端空格:".strlen($s3)."字符<br>";  
  ?>  

PHP文本数据库的搜索方法 不指定

jed , 2007-11-6 09:42 , 代码编程 , 评论(0) , 阅读(1857) , Via 本站原创


<?

//PHP文本数据库的搜索方法
searchstr=("/".preg_quote($searchstr)."/");
//$searchstr是查找的关键字
$records=file($file);//获取所有的记录数
//$file是查找的数据文件
$search_reocrds=preg_grep ($searchstr, $records);//开始查找记录
//$search_reocrds为查找到的记录数
unset($records);
if($search_records){
//开始显示记录,写下你自己的处理程序********************
while (list ($key, $val) = each ( $search_records)) {
echo "$val";
}
//****************************************************
}

?>

 PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法
我用一个留言本程序作为例子,阐述PHP实现对文本数据库的数据显示、加入、修改、删除、查询五大基本操作的方法。

此文本数据库共有字段10个:客户IP、发言时间、客户名、客户EMAIL、客户主页地址、留言表情图片名、客户QQ、客户形象图片、留言内容、管理员回复内容。

1、加入数据程序段。



$date=date("Y-m-d H:i:s");//取得系统时间
$ip = $HTTP_SERVER_VARS[REMOTE_ADDR]; //取得发言的IP地址
$text=encode($gb_text);//去掉留言内容后面的空格.
$fp=fopen("gb.dat","a");//以只写模式打开gb.dat文本文件,文件指针指向文件尾部.
$str=$ip." ".$date." ".$gb_name." ".$gb_email." ".$gb_home." ".$face." ".$gb_qq." ".$head." ".$text." ".$reply."\n";//将所有留言的数据赋予变量$str," "的目的是用来今后作数据分割时的数据间隔符号。
fwrite($fp,$str);//将数据写入文件
fclose($fp);//关闭文件
showmessage("留言成功!","index.php","3");//留言成功,3秒后自动返回主界面。
其中的$gb_name 、$gb_email、$gb_home、$face、$gb_qq、$head、$gb_text、$reply是由发言表单传过来的数据。



获取服务器IP和获取访问者IP 不指定

jed , 2007-10-10 10:13 , 代码编程 , 评论(0) , 阅读(2840) , Via 本站原创
$_SERVER['SERVER_ADDR']
获取服务器IP
$_SERVER['REMOTE_ADDR']
获取访问者IP


$PS="http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]";//当前页文件地址
$PD=dirname("http://$_SERVER[HTTP_HOST]$_SERVER[PHP_SELF]");//当前目录地址
$PR="http://$_SERVER[HTTP_HOST]$_SERVER[REQUEST_URI]";//当页地址栏,含?后的请求项 
$BF=$_SERVER['HTTP_REFERER']; //取得上一页的地址,含?后的请求项 

php自带函数大全 不指定

jed , 2007-9-18 14:44 , 代码编程 , 评论(0) , 阅读(2573) , Via 本站原创
Abs: 取得绝对值。
Acos: 取得反余弦值。
ada_afetch: 取得资料库的传回列。
ada_autocommit: 开关自动更动功能。
ada_close: 关闭 Adabas D 连结。
ada_commit: 更动 Adabas D 资料库。
ada_connect: 连结至 Adabas D 资料库。
ada_exec: 执行 SQL 指令。
ada_fetchrow: 取得传回一列。
ada_fieldname: 取得栏位名称。
ada_fieldtype: 取得栏位资料形态。
ada_freeresult: 释出传回资料的记忆体。

屏蔽php脚本错误提示 不指定

jed , 2007-9-9 00:38 , 代码编程 , 评论(0) , 阅读(2024) , Via 本站原创
方法一、在有可能出错的函数前加@,然后or   die("")    
           如:  
        @mysql_connect(...)   or   die("Database   Connect   Error")

方法二、编辑php.ini   ,查找"display_errors   ="   ,将“=”后面的值改为"off。

方法三、在php脚本前加error_reporting(0),屏蔽所有错误提示。

error_reporting
配置错误信息回报的等级。

语法: int error_reporting(int [level]);

返回值: 整数

函数种类: PHP 系统功能




内容说明


本函数用来配置错误信息回报的等级,参数 level 是一个整数的位遮罩 (bitmask),见下表。

遮罩值 表示名称
1 E_ERROR
2 E_WARNING
4 E_PARSE
8 E_NOTICE
16 E_CORE_ERROR
32 E_CORE_WARNING



E_NOTICE 表示一般情形不记录,只有程序有错误情形时才用到,例如企图存取一个不存在的变量,或是呼叫 stat() 函数检视不存在的文件。
E_WARNING 通常都会显示出来,但不会中断程序的执行。这对除错很有效。例如:用有问题的正则表达式呼叫 ereg()。
E_ERROR 通常会显示出来,亦会中断程序执行。意即用这个遮罩无法追查到内存配置或其它的错误。
E_PARSE 从语法中解析错误。
E_CORE_ERROR 类似 E_ERROR,但不包括 PHP 核心造成的错误。
E_CORE_WARNING 类似 E_WARNING,但不包括 PHP 核心错误警告。
error_reporting( 7 ) = error_reporting( 1+2+4) = error_reporting(E_ERROR | E_WARING | E_PARSE)
如果a页是一个表单,提交时因某种原因转至出错页面b,如何在b中返回已填写数据的表单a(数据不变)?  


表单a,要保留的都使用class=saveHistory  



<HTML>  

<HEAD>  
<META  NAME="save"  CONTENT="history">  
<STYLE>  
    .saveHistory  {behavior:url(#default#savehistory);}  
</STYLE>  
</HEAD>  
<BODY>  
<FORM  name=a>  
<INPUT  class=saveHistory  type=text  id=oPersistInput>  
</FORM>  
</BODY>  
</HTML>  





注意: meta中必须设置 name=save  content=history

上面的代码确保表单a(数据不变),后退功能在出错页面b可以使用history.back()或history.go(-1)都可以实现,例如:


<input  type=button  value=Back  onclick=history.back()>  
<input  type=button  value=Back  onclick=history.go(-1)>



分页: 10/22 第一页 上页 5 6 7 8 9 10 11 12 13 14 下页 最后页 [ 显示模式: 摘要 | 列表 ]