<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>里克的自习室 &#187; modoer</title>
	<atom:link href="http://railser.cn/blog/tag/modoer/feed" rel="self" type="application/rss+xml" />
	<link>http://railser.cn</link>
	<description>关注Ruby和Rails的学习与开发</description>
	<lastBuildDate>Sun, 26 Feb 2012 12:20:51 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<item>
		<title>[php]uc实名认证的修改，使其他系统调用uch的实名</title>
		<link>http://railser.cn/blog/uc-verfy-name-and-usement-in-others</link>
		<comments>http://railser.cn/blog/uc-verfy-name-and-usement-in-others#comments</comments>
		<pubDate>Fri, 31 Oct 2008 06:54:35 +0000</pubDate>
		<dc:creator>里克</dc:creator>
				<category><![CDATA[default]]></category>
		<category><![CDATA[comsenz]]></category>
		<category><![CDATA[modoer]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[uc]]></category>
		<category><![CDATA[uch]]></category>

		<guid isPermaLink="false">http://railser.cn/?p=259</guid>
		<description><![CDATA[写在前面：jp加入本站后，博客立刻火了起来。我奥运会后一直在做php的开发，而且是专门研究，hack康盛的uch，uc和supesite，给客户做php的站，一直没有做Rails的开发，有点遗憾。不过jp带着我还算没太落后，碰到好的Rails项目肯定还会继续Railser的开发的。 这是一篇笔记，边写边整理代码，比较复杂。贴在这里吧。 uc有个问题，就是在uch打开实名认证时，其他与uc通信的应用，仍旧显示uc里的username字段，而独uch显示认证的名字。为了使整站统一，需要在别的应用里显示uchome_space.name字段的内容。 思路： 1、在uc_members中增加name和namestatus字段。 ALTER TABLE `uc_members` ADD COLUMN `name` char(20) NOT NULL default ''; ALTER TABLE `uc_members` ADD COLUMN namestatus tinyint(1) NOT NULL default '0'; 2、uch的source/cp_profile.php 82行后，增加同步更新uc实名字段。 //同步更新uc主表实名 update_uc_table('uc_members',Array('name'=&#62;$setarr['name'], 'namestatus'=&#62;$setarr['namestatus'], 'uid'=&#62;$_SGLOBAL['supe_uid'])); 3、管理后台 admin/admincp_space.php 批量管理实名时，同步更新uc表 75行后： //同步更新uc表，单个用户 update_uc_table('uc_members',Array('name'=&#62;$setarr['name'], 'namestatus'=&#62;$setarr['namestatus'], 'uid'=&#62;$uid)); 需要在 source/function_common.php 中添加一个方法。和updatetable一样的，取消了table的前缀。 function update_uc_table($tablename, $setsqlarr) { global $_SGLOBAL; $setsql = $comma = ''; [...]]]></description>
			<content:encoded><![CDATA[<p>写在前面：jp加入本站后，博客立刻火了起来。我奥运会后一直在做php的开发，而且是专门研究，hack康盛的uch，uc和supesite，给客户做php的站，一直没有做Rails的开发，有点遗憾。不过jp带着我还算没太落后，碰到好的Rails项目肯定还会继续Railser的开发的。</p>
<p>这是一篇笔记，边写边整理代码，比较复杂。贴在这里吧。</p>
<p>uc有个问题，就是在uch打开实名认证时，其他与uc通信的应用，仍旧显示uc里的username字段，而独uch显示认证的名字。为了使整站统一，需要在别的应用里显示uchome_space.name字段的内容。</p>
<p>思路：<br />
<span style="color: green;"><strong>1、在uc_members中增加name和namestatus字段。</strong></span></p>
<pre name="code" class="sql">ALTER TABLE `uc_members` ADD COLUMN `name` char(20) NOT NULL default '';
ALTER TABLE `uc_members` ADD COLUMN namestatus tinyint(1) NOT NULL default '0';</pre>
<p><span style="color: green;"><strong>2、uch的source/cp_profile.php 82行后，增加同步更新uc实名字段。</strong></span><br />
//同步更新uc主表实名</p>
<pre class="php" name="code">update_uc_table('uc_members',Array('name'=&gt;$setarr['name'], 'namestatus'=&gt;$setarr['namestatus'], 'uid'=&gt;$_SGLOBAL['supe_uid']));</pre>
<p><span style="color: darkgreen;"><strong>3、管理后台 admin/admincp_space.php 批量管理实名时，同步更新uc表</strong></span><br />
75行后：<br />
//同步更新uc表，单个用户</p>
<pre class="php" name="code">update_uc_table('uc_members',Array('name'=&gt;$setarr['name'], 'namestatus'=&gt;$setarr['namestatus'], 'uid'=&gt;$uid));</pre>
<p>需要在 <span style="color: blue;">source/function_common.php</span> 中添加一个方法。和updatetable一样的，取消了table的前缀。</p>
<pre class="php" name="code">function update_uc_table($tablename, $setsqlarr) {
global $_SGLOBAL;

$setsql = $comma = '';
foreach ($setsqlarr as $set_key =&gt; $set_value) {
$setsql .= $comma.'`'.$set_key.'`'.'=\''.$set_value.'\'';
$comma = ', ';
}
$where = $comma = '';
if(empty($wheresqlarr)) {
$where = '1';
} elseif(is_array($wheresqlarr)) {
foreach ($wheresqlarr as $key =&gt; $value) {
$where .= $comma.'`'.$key.'`'.'=\''.$value.'\'';
$comma = ' AND ';
}
} else {
$where = $wheresqlarr;
}
$_SGLOBAL['db']-&gt;query('UPDATE '.$tablename.' SET '.$setsql.' WHERE uid='.$setsqlarr['uid']);
}</pre>
<p>//122行后，批量更新</p>
<pre class="php" name="code">case '1':
//通过实名认证
$_SGLOBAL['db']-&gt;query("UPDATE ".tname('space')." SET namestatus='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$_SGLOBAL['db']-&gt;query("UPDATE uc_members SET `namestatus`='1' WHERE uid IN (".simplode($_POST['uids']).") AND name!=''");
$url .= 'namestatus=0';
$createlog = true;
break;
case '2':
//取消实名认证
$_SGLOBAL['db']-&gt;query("UPDATE ".tname('space')." SET namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']-&gt;query("UPDATE uc_members SET `namestatus`='0' WHERE uid IN (".simplode($_POST['uids']).")");
$url .= 'namestatus=1';
$createlog = true;
break;
case '3':
//清空姓名
$_SGLOBAL['db']-&gt;query("UPDATE ".tname('space')." SET name='',namestatus='0' WHERE uid IN (".simplode($_POST['uids']).")");
$_SGLOBAL['db']-&gt;query("UPDATE uc_members SET `name`='' WHERE uid IN (".simplode($_POST['uids']).")");
break;</pre>
<p><strong>4、在需要的应用中，修改方法其实应该放到uc_client中</strong>，<span style="color: red;">但是我未找到一个很重要的方法究竟在哪定义，就是uc_client/client.php 中的 call_user_func 方法，我需要hack这个方法，来将name和namestatus属性包装进来，但是没找到，高手指点下呗。</span>答：最终，还是在modoer里修改了user class，而且在feed的时候，还要使用实名，就只能这样hack了。不过还是没有明白这个<span style="color: red;">call_user_func方法是怎么调用的。</span><br />
所以用了个土办法。这里有个设置问题，当实名未认证时，是否显示该实名。</p>
<pre class="php" name="code">$tmp = Array();
$tmp = $db-&gt;get_one('SELECT name, namestatus from uc_members where `username`="'.$user-&gt;username.'"');
if($tmp['namestatus']){
$user-&gt;name = $tmp['name'];
}else{
$user-&gt;name = $tmp['name']."(未认证)";
}</pre>
<p>这里还有个顾虑就是，在这个新系统中，是否沿用uch的认证机制，如果需要，这个改动讲很大，还是依附于uc过来的数据处理。</p>
<p>其实完美的方案应该该是完全放到uc_client中，但是我4里的问题我还没解决。目前的只是按照常规的方法hack相关代码解决的。</p>
<p>modoer是开源的点评程序，非常出色，从代码里学到很多知识，不仅是php，可能对今后开发Rails都有帮助。在此感谢作者的工作！！！</p>
<p>广告下自己的新站：</p>
<p><a href="http://www.51zoon.com" target="_blank">时尚51区</a></p>
<p><a href="http://7ent.cn" target="_blank">7#娱乐圈</a></p>
<p><a href="http://7news.cn">7#早新闻</a></p>
<p>对了，我们现在用的新插件是这个，http://code.google.com/p/syntaxhighlighter，非常强</p>
]]></content:encoded>
			<wfw:commentRss>http://railser.cn/blog/uc-verfy-name-and-usement-in-others/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

