WordPress 的多站点网络(Network)功能

昨天看到 W3C Community and Business Groups,开始还没有想到是使用什么功能实现的,今天还特意去询问了@酋长,未果。

或许是灵光一现,记起 WordPress 以前有个多用户版 MU 。现在 MU 已成为了 WordPress 的一个分支。官方有文档教用户如何实现多站点功能,具体文档可以参考创建站点网络。网上也有很多类似教程,Google 一下便知。整个安装过程,没什么难度。

不过要注意的是,子站点有子目录和子域名两种实现方式,因为网站环境的影响,需要对应选择设置。比我这个空间,不支持域名泛解析,自然就没办法使用子域名的方式了。两种不同实现方式对应的 .htaccess 文件内容也有所不同。

另外,在已经安装的 WordPress 站点上通过修改使之支持多站点,会影响到原来的固定链接方式。

jQuery KinSlideshow 在 Chrome 浏览器下不显示的问题

jQuery KinSlideshow plugin 插件用来做幻灯片图片展示效果,很方便,所以用得较多。但是最近发现部分页面在 Google Chrome 浏览器下幻灯片不显示。经过测试,发现是在 IMG 标签中少写了 WIDTH / HEIGHT 属性所致。看来偷懒是不行的。

解决方法也就很简单了,把 WIDTHHEIGHTALT 什么的属性,都写上,就没问题了。

解决 IE6 中浮动元素边框消失的问题

现象:给浮动元素设置了边框,在 IE6 中,会出现边框时隐时现的现象。

解决:

  • 给父元素加上背景颜色,background: #fff
  • 给你的外容器加上zoom: 1,让 ie6 产生 haslayout,这样就不会有问题了;
  • 给外容器加定宽,并溢出隐藏,width:100%; overflow: hidden
  • 把 DIV 容器的高度设置成 100%,或者设置固定高度。

参考:
IE加浮动(float)后,滚动时边框(border)消失解决办法
IE6下 div 边框消失 bug解决

iWebMall 提交信息出现多次重定向错误

这两天在熟悉 iWebMall 的使用,发现部分操作会出现多次重定向的错误。官方论坛很多人在询问,但是没有看到给出解决方案。

自己瞎琢磨了一下,将 foundation/ferror.php 文件最末的 set_error_handler("throw_errors"); 去掉或者注释掉,即可。

至于会不会产生其它问题,目前还未知。

jQuery:几行代码实现简单选项卡TABS效果

做个记录。

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>尝试用 jQuery 实现选项卡功能</title>
<style type="text/css">
page {
	font-size: 12px;
	padding: 40px;
}
ul {
	padding: 0;
	margin: 0;
	list-style: none;
}
h2 {
	font-size: 12px;
	padding: 0;
	margin: 0;
}

.tabs {
	width: 403px;
	height: 108px;
	border: 1px solid #CCC;
}
.tabs li {
	line-height: 26px;
	height: 28px;
	float: left;
	position: relative;
}
.tabs h2 {
	text-align: center;
	background: #EEE;
	width: 100px;
	border-left: 1px solid #CCC;
	border-bottom: 1px solid #CCC;
	cursor: pointer;
}
.tabs h2.active {
	background: #FFF;
	border-bottom: 1px solid #FFF;
}
.tabs .tab_0 h2 {
	border-left: none;
}
.tabs .tab_0 div {
	display: block;
}
.tabs div {
	background: #FFF;
	display: none;
	width: 363px;
	height: 40px;
	border-top: none;
	padding: 20px;
	position: absolute;
	top: 28px;
	left: 0;
}

.tab_0 div {
	left: 0;
}
.tab_1 div {
	left: -100px;
}
.tab_2 div {
	left: -201px;
}
.tab_3 div {
	left: -302px;
}
</style>
<script type="text/javascript" language="javascript" src="scripts/jquery-1.7.1.min.js"></script>
<script type="text/javascript" language="javascript">
$(function() {
	$(".tabs li").hover(function() {
		$(this).siblings().children("h2").removeClass("active");
		$(this).siblings().children("div").hide();
		$(this).children("h2").addClass("active");
		$(this).children("div").show();
	}, function() {
		//
	});
});
</script>
</head>

<body>
<div class="tabs">
	<ul>
    	<li class="first tab_0">
        	<h2 class="active">选项卡一</h2>
            <div>
            	选项卡一的内容
            </div>
        </li>
    	<li class="tab_1">
        	<h2>选项卡二</h2>
            <div>
            	选项卡二的内容
            </div>
        </li>
    	<li class="tab_2">
        	<h2>选项卡三</h2>
            <div>
            	选项卡三的内容
            </div>
        </li>
    	<li class="tab_3">
        	<h2>选项卡四</h2>
            <div>
            	选项卡四的内容
            </div>
        </li>
    </ul>
</div>
</body>
</html>

解决软件界面乱码问题

早上刚到公司启动电脑,发现大多数软件运行时界面会出现乱码,而昨天下班时还是一切正常。

检查电脑的使用记录,昨晚有其他同事在这台电脑上访问 PPTV 观看视频。

搜索解决办法,基本上都是提到“区域和语言选项”,具体操作:

控制面板->区域和语言选项->高级->非 Unicode 程序的语言,选择“中文(中国)”,确认,重新启动电脑。

但是我按此操作之后并没能解决问题,恰好又搜索到《PPTV网络电视界面乱码解决方法》一文,尝试重置“Internet 选项”–“高级”设置,问题解决。

帝国CMS无限级栏目导航

最近利用帝国CMS(ECMS)制作一个网站,遇到以树形目录的方式显示三级栏目列表的需求,但是纵观帝国CMS本身提供的各种标签,也只能满足二级栏目列表的需求。搜索了很久,也没有找到满意的解决方案,咨询王猛(帝国CMS开发人),他给出了两种实现的思路,一种是以模板的方式手动制作,另外一种是自己编写递归函数。鉴于网站最终是交由第三方使用,第一种方式不适合,遂考虑函数——自定义标签。

其实细心的用户应该可以发现帝国CMS本身已经实现了无限级栏目菜单——当我们进入信息管理,左边展示的栏目导航便是无限级的。该菜单对应的文件是e/admin/listEnews.php,其中的函数ShowClass_ListNews便是我们需要寻找的目标。将这个函数修改一下,得到如下函数:

function user_ListCats($bclassid, $showMore) {
	global $empire, $dbtbpre;

	//	classpath 为地址
	$sql=$empire->query("select classid, classname, bclassid, islast, classpath, classurl from {$dbtbpre}enewsclass where bclassid='$bclassid' and wburl='' order by myorder,classid");

	//	判断是否有类别记录
	$num=$empire->num1($sql);
	if ($num == 0 && $bclassid == 0)//无记录
	{
		echo $GLOBALS['notrecordword'];
		return "";
	}
	if ($num == 0)
	{
		return '';
	}

	echo '<ul>';

	$i = 1;
	while ($r=$empire->fetch($sql))
	{
		//	如果不是终极栏目,显示其子目录
		if(empty($r[islast]) && $showMore)
		{
			echo '<li class="moredeep"><a href="' . $r[classpath] . '">' . $r[classname] . '</a>';

			user_ListCats($r[classid], $showMore);
		} else {
			echo '<li><a href="' . $r[classpath] . '">' . $r[classname] . '</a>';
		}

		echo '</li>';

		$i += 1;
    }

	echo '</ul>';
}

将这段代码加入到e/class/userfun.php,然后我们就可以自定义自己的标签了。例如我自定义为ulistcats,调用语法[ulistcats]栏目ID,显示更多栏目[/ulistcats]。两个参数,分别代表最上级栏目 ID 和是否显示多级栏目。其中第二个参数设置为 0 ,则只显示指定栏目下的一级子栏目,如果为 1 ,就为无限级子栏目。

我个人对 PHP 和帝国CMS 都还不熟悉,只是尝试解决问题,上面的代码难免有不完善之处,欢迎大家提出意见和建议。

相应,一个三级栏目导航的例子,请浏览

Discuz! 7.2 之 与 UCenter 通信失败

之前安装的论坛,突然出现用户不能登录的状况,进入 UCenter 查看应用,发现“通信失败”。检查应用的设置,并没有任何变更出现。网上搜索了一些相关的文章,基本上都集中在“应用的 IP”和“通信密钥”这些部分。所以我对问题的排查也围绕这些方面展开。

首先便排除了“通信密钥”错误的可能,然后尝试更换默认“应用的 IP”(127.0.0.1)为域名绑定 IP,但是还是“通信失败”,最终只能从代码入手,一步步查找问题出现的位置。

最终问题定位在/uc_server/model/misc.php中的如下代码:

$fp = @fsockopen(($ip ? $ip : $host), $port, $errno, $errstr, $timeout);

在提供了 IP 的情况下,我们在浏览器中直接输入 IP 无法浏览到网页,所以$fp也不能获得“预期”的结果。

解决办法,就是修改上面的代码为:

$fp = @fsockopen($host, $port, $errno, $errstr, $timeout);

当然,如果通过修改服务器的设置能使得127.0.0.1或者外网 IP 可以浏览到内容,也可以解决问题。目前我还没有找到如何进行这方面的设置,暂且记录在此。

更新 2011.07.08

今天折腾服务器,发现在网站属性中,指定了 IP 地址,将之清除,选择“全部未分配”,问题解决。所以看来,一开始就走了弯路,在添加网站时画蛇添足的行为导致问题出现。

参考文章

UCenter 通信失败 和 无法同步登陆的调试方法
[UCenter] 地狱之旅