韩国的时装
韩国人的设计用温和的方式掩饰东方人体形上的不足,并意图通过服饰和造型来表达东方式的对女性的审美要求,比如可爱,文静,羞涩,含蓄等等。于是这 种普适的韩式时尚带给女性一种淡然的审美,和谐,柔美但不那么显眼。
韩国人的设计用温和的方式掩饰东方人体形上的不足,并意图通过服饰和造型来表达东方式的对女性的审美要求,比如可爱,文静,羞涩,含蓄等等。于是这 种普适的韩式时尚带给女性一种淡然的审美,和谐,柔美但不那么显眼。
到vbulletin 4的时代了,打算给ahome升级。顺便也理顺一下代码。
术语:
内容块:即 block ,这个很好理解,比如页面上的“最新主题”“新注册的用户”“用户发帖排行”等等的内容就是内容块。每个内容块有相应的ID,其要显示的内容(html代 码)就放在$block[ID]变量中,所以只要声明了$block这个变量,就可以在模板中使用了。不同的内容块,按设计的页面样式组合好,就是一个完 整的首页。另外,在其他的页面中,也调用某内容块的内容,浏览时显示。

要面对的代码比较多,想争取点能写的同学的支持。因为 ahome 是以内容块block为中心的,所以容易分开各自写好再组合,比如现在我就只写了用得上的一些功能。加上4.0需要增加相册和博客方面的block所以估 计工作量比较大,原来就已经有三十多个类型的block了。我是打算能重写就重写一遍的。
PHP计算两个经纬度之间的距离
偶然在网上看到迈克尔 杰克逊经典曲目《犯罪高手》被伦敦交响乐团演奏,找旧歌的冲动就一发不可收拾起来,初衷纯粹就是想听听原版的《犯罪高手》。
vBulletin原版自带icq,yahoo, msn, aim, skype 五种即时通信的用户资料设置项,为了在不改动原代码的基础上添加QQ这个设置,费了半天劲,发现按现有钩子,是无法做到的,因为vbulletin对这五种即时通信的选项使用,已近完美,包括显示于搜索,帖子块,用户资料等等各种可能的地方。如果做到要跟上面的一样,需要改动不少源代码,还有模板。怎么办呢?
在使用pivotx搭建新闻发布站点之前,有一个问题是首先要解决的,那就是分类模板的设置。pivotx默认是所有文章按照发布的先后顺序显示在首页 上,但subweblog里面有一个标签可以按category调用文章,不过使用这个标签之后当你点击分类列表时会出现分类页按首页的格式排列的现象, 也就是同一个类别的文章出现多次,所以必须为分类页单独设定模板,这需要改动pivotx程序,不过也很简单,只需要改动两处:
以前帮朋友做过类似的东西,简单复杂都可以,如果做得比较复杂,就要专门写些代码。一般中小企业或者个人应用,插件就足够满足需求了。
这里说的社区是不是SNS类似的,更多的是偏重BBS方式的,不过VB4.0貌似全面了不少,值得期待。为什么会说到vb4,是因为官方声称其提供了简单 的cms,并且包含更强的blog多用户系统。具体如何要发布了才会揭晓。不过这里我认为sns是分散的,以人为联系方式的;而BBS是集中式的,以事物 为联系中心的。简单来讲,构成sns是朋友-朋友-朋友的离散方式,BBS可以形容为网友-某个事物-网友的方式。具体来说,这是通过摄影/图片来集聚 人,构成交流环境的;所以我认为这样以某个主题为中心的社区用BBS这种方式可能更好些。至少在一定规模的程度要求上是如此的。
是否需要一个自定义的页面?或许对一个论坛来说,vbb自带的帮助系统就足够了,还能分类的。
但了解这个原理无疑对亵玩vbulletin有极大的帮助。而且前戏非常简单,没有理由拒绝的。
首先建立一个新文件: test.php ,放在论坛根下。内容如下:
<?php
// ####################### SET PHP ENVIRONMENT ###########################
error_reporting(E_ALL & ~E_NOTICE);
// #################### DEFINE IMPORTANT CONSTANTS #######################
define('NO_REGISTER_GLOBALS', 1);
define('THIS_SCRIPT', 'test'); //按文件名称命名,这里是test
// ################### PRE-CACHE TEMPLATES AND DATA ######################
// get special phrase groups
$phrasegroups = array(
);
// get special data templates from the datastore
$specialtemplates = array(
);
// pre-cache templates used by all actions 缓存模板,文件中使用的模板都要在这里缓存
$globaltemplates = array(
'TEST',
);
// pre-cache templates used by specific actions
$actiontemplates = array(
);
// ######################### REQUIRE BACK-END ############################
require_once('./global.php');
// #######################################################################
// ######################## START MAIN SCRIPT ############################
// #######################################################################
$navbits = array();
$navbits[$parent] = 'Test Page'; //这个地方显示在navbar的链接文字
$navbits = construct_navbits($navbits);
eval('$navbar = "' . fetch_template('navbar') . '";');
eval('print_output("' . fetch_template('TEST') . '");'); //这个地方是使用的模板名称
?> 再创建模板。后台新建模板,如上所示名称为 TEST ,内容如下:
$stylevar[htmldoctype]
<html dir="$stylevar[textdirection]" lang="$stylevar[languagecode]">
<head>
<title>$vboptions[bbtitle]</title>
$headinclude
</head>
<body>
$header
$navbar
<table class="tborder" cellpadding="$stylevar[cellpadding]" cellspacing="$stylevar[cellspacing]" border="0" width="100%" align="center">
<tr>
<td class="tcat">Title</td>
</tr>
<tr>
<td class="alt1">Text</td>
</tr>
</table>
$footer
</body>
</html>
这基本上就算完成了。
为了完善起见,需要在在线位置添加合适的位置名称。
后台插件,添加插件,钩子位置为 online_location_process
添加插件代码
case 'test.php':
$userinfo['activity'] = 'test'; //动作变量名
break;
钩子位置 online_location_unknown
添加插件代码
case 'test':
$userinfo['action'] = 'Viewing Test Page';//动作名称
break;
好了,浏览test.php就可以了。
如果要想得到某个vb自身文件内部的浏览地址,虽然不推荐这样。如 ***.php?do=xxx
那么打开要编辑的vB文件,在 最后的 ?> 前面添加
if ($_REQUEST['do'] == 'xxx') //do带的字符串
{
eval('print_output("' . fetch_template('TEMPLATE_XXX') . '");');
}
TEMPLATE_XXX 为模板名称。
这样防问 ***.php?do=xxx就行,不过不推荐这样,因为动了vb的原文件,不方便升级,风险也高。
大家试试看。
使用钩子 cache_templates;
代码为:
XXX 为常量,每个php文件开头都有定义。
放置 一个名为 bitfield_[product].xml 的文件到 includes/xml 目录。
文件内容参照:
得到两个 $vbulletin->bf_ugp_myproductpermissions['canfoo'] 和 $vbulletin->bf_ugp_myproductpermissions['canbar'] 权限控制参数。
其中 name 表示参数名,gourp 表示权限归类,phrase 则是显示在后台的该权限说明的短语变量。注意
</bitfield>前的值,依次为 1, 2, 4, 8, 16, ……然后需要
1 添加一个产品 名称为 myproductpermissions
2 为usergroup 表增加一个同名的字段 ALTER TABLE usergroup ADD myproductpermissions INT UNSIGNED NOT NULL DEFAULT 0;
3添加短语

4重建 bitfields

后台用户组新的权限显示为

使用用户组权限判断:
例如 if ($permissions['myproductpermissions'] & $vbulletin->bf_ugp_myproductpermissions['canusecitymate'])
用usergroup表中的字段值和xml文件中定义的值比较,来判断权限的开关设置。