Discuz X2 插件设计流程概要

基本方法

  1. 编辑 config/config_global.php,在页面底部新增如下内容以开启插件开发者模式

    // 为2则会在页面上输出所有的嵌入点
    $_config['plugindeveloper'] = 1;

  2. 登录到后台,完成以下工作
    1. 插件 -> 设计新插件,填入插件信息,提交
    2. 插件列表 -> 设计 -> 模块,新增“页面嵌入 – 普通版”类型的模块,程序模块可自定,这里设置为 main.class.php
    3. 插件列表 -> 设计 -> 变量,设置好插件所需要的变量(可选操作)
    4. 插件列表 -> 启用插件,方便后续调试
  3. 在插件目录下新建 main.class.php,包含全局嵌入点类和脚本嵌入点类,查看详细信息

特别注意:调试时注意随时在后台清空页面缓存

手机版

  1. 新建 mobile.class.php,类名前缀改为 mobileplugin_,其余同上
  2. 插件列表 -> 设计 -> 模块,新增“页面嵌入 – 手机版”类型的模块,填入 mobile.class.php
  3. 导出 xml 文件,将插件和 xml 文件上传至服务器,后台执行“升级”操作即可

更新历史

[2012.01.19] 新增手机版插件的开发方法

Posted in PHP | Tagged | Leave a comment

Git Bitbucket 使用方法

将本地代码推送到远程仓库

  1. 本地生成SSH key,并设定密码
    ssh-keygen
  2. 将/.ssh/id_rsa添加到你账户下的公钥列表中
  3. Git 中添加远程仓库
    git remote add <name>  git@bitbucket.org:lanisle/repo_name.git
  4. 推送代码
    git push <name> master

把代码从远程仓库拖回本地

  1. mkdir <repo_dir>
  2. cd <repo_dir>
  3. 初始化
    git init
  4. Git 中添加远程仓库
    git remote add <name> git@bitbucket.org:lanisle/repo_name.git
  5. 拉回代码
    git pull <name> master

PS:

  • <name>表示远程仓库在本地的标识,如果为origin表示为缺省配置,可直接git push,不需要附带标识
  • <repo_name>表示远程仓库名称。
Posted in Git | Leave a comment

使Git for Windows支持中文显示

Git for Windows是基于Cygwin实现的,在安装后的缺省配置下,ls打印出的内容和git log输出的结果都不支持中文显示。

修复方法为编辑<Git installtion dir>/etc/profile,增加如下内容:

# 自定义提示符
export PS1=’[\u@msys \W]$ ‘

# 文件夹和文件名支持中文显示
alias la=’/bin/ls -aF –show-control-chars –color=tty’
alias ll=’/bin/ls -alF –show-control-chars –color=tty’
alias ls=’/bin/ls –show-control-chars -F –color=tty’

# 使git log输出正常显示中文
export LESSCHARSET=utf-8

参考:http://www.cnblogs.com/baizx/archive/2010/08/09/1796120.html

Posted in Git | Leave a comment

Mac OS Lion 编译安装 php(with nginx)

安装nginx(当前版本 1.0.6)

brew install nginx
安装目录 /usr/local/Cellar/nginx/1.0.6

编译安装PHP(当前版本 5.3.8)

主要配置参数来源于Lion自带的php,本处做了部分修改,主要包括:

  • 移除 –with-icu-dir=/usr –enable-suhosin
  • 移除 –with-apxs2=/usr/sbin/apxs
  • 新增 –enable-fpm –enable-force-cgi-redirect
  • 修正libpng和freetype库文件目录错误
  • 移除其他无用参数

For fastcgi usage

./configure –prefix=/opt/php –with-config-file-path=/opt/php/etc –enable-fpm –enable-cgi –enable-cli –with-libxml-dir=/usr –with-openssl=/usr –with-kerberos=/usr –with-zlib=/usr –enable-bcmath –with-bz2=/usr –enable-calendar –with-curl=/usr –enable-dba –with-ndbm=/usr –enable-exif –enable-ftp –with-gd –with-freetype-dir=/usr/X11 –with-jpeg-dir=/usr/local –with-png-dir=/usr/X11 –enable-gd-native-ttf –with-iodbc=/usr –with-ldap=/usr –with-ldap-sasl=/usr –with-libedit=/usr –enable-mbstring –enable-mbregex –with-mysql=mysqlnd –with-mysqli=mysqlnd –without-pear –with-pdo-mysql=mysqlnd –with-mysql-sock=/tmp/mysql.sock –with-readline=/usr –enable-shmop –with-snmp=/usr –enable-soap –enable-sockets –enable-sqlite-utf8 –enable-sysvmsg –enable-sysvsem –enable-sysvshm –with-tidy –enable-wddx –with-xmlrpc –with-iconv-dir=/usr –with-xsl=/usr –enable-zend-multibyte –enable-zip –with-pcre-regex=/usr –with-pgsql=/usr –with-pdo-pgsql=/usr

For apache usage

./configure –prefix=/opt/php –disable-fpm –enable-cgi –with-apxs2=/usr/sbin/apxs –enable-cli…

sudo make
sudo make install

sudo cp php.ini-development /opt/php/etc/php.ini

cd /opt/php
sudo cp etc/php-fpm.conf.default etc/php-fpm.conf

配置PHP

sudo vim etc/php.ini

更新时区配置:

date.timezone = PRC

配置PHP-FPM

sudo vim etc/php-fpm.conf

去除如下选项的注释:

pid = run/php-fpm.pid
error_log = log/php-fpm.log
noticelog_level = notice
listen.allowed_clients = 127.0.0.1
pm = dynamic
pm.max_children = 50
pm.start_servers = 20
pm.min_spare_servers = 5
pm.max_spare_servers = 35
pm.max_requests = 500

sudo ln bin/php.dSYM bin/php
sudo ln sbin/php-fpm.dSYM sbin/php-fpm

配置nginx

vim /usr/local/etc/nginx/nginx.conf

更新内容:

location ~ \.php$ {
root           html;
fastcgi_pass   127.0.0.1:9000;
fastcgi_index  index.php;
fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
include        fastcgi_params;
}

vim /usr/local/etc/nginx/fastcgi_params

新增行:

fastcgi_param  SCRIPT_FILENAME    $document_root$fastcgi_script_name;

启动环境

sudo /opt/php/sbin/php-fpm
sudo nginx

结束环境

sudo kill `cat /opt/php/var/run/php-fpm.pid`
sudo nginx -s stop

关键备忘

1、配置PHP编译选项时候提示

configure: error: png.h not found.
configure: error: freetype.h not found.

表明 –with-freetype-dir 和 –with-png-dir 指向的目录不正确,应当修改为/usr/X11

2、提示 –enable-ndbm 参数无效

修正为 –enable-ndbm=/usr 即可

3、Lion下killall php-fpm 无法终止进程,必须按上文所述方法终止

4、如果与 Apache 搭配,使用上文提供的编译参数重编译后 sudo apachectl restart 即可。

5、如若想恢复自带 PHP 版本 5.3.6 ,找个朋友 Copy 份原始的 /usr/libexec/apache2/libphp5.so 覆盖回去即可。

6、php.dSYM 的后缀含义为 Apple Xcode debug symbols file,应该是编译环境导致的

UPDATE@2011.10.25

去除无用参数–enable-force-cgi-redirect
修正mysql sock文件的路径

TODO

配置 launchctl 使服务开机启动

Posted in Mac OS | Tagged | Leave a comment

find命令-exec参数的使用

在Linux下,find命令用于查找匹配指定规则的文件,那么如果要对匹配的文件进行后续操作时,除了使用pipe结合xargs来处理外,还可以使用其自带的-exec参数。

-exec参数后带一个COMMAND,以分号“;”结尾,但由于“;”在shell下是用于表示单条语句已经结束,为了使我们的命令能够执行,需要使用反斜杠转义“;”,也就是“\;”

在COMMAND表达式中,一对花括号“{}”表示的是find命令匹配到的文件列表,执行时会被自动替换。

实际例子,删除指定目录下三天前的备份文件:

find /backup/daily_db -type f -mtime +3 -exec rm {} \;

Posted in Server | Tagged | Leave a comment

TAR备份文件时候排除特定目录

在备份站点的关键文件时,通常需要排除附件、用户头像等体积比较大的目录来节省备份时间。因为不常用Linux,操作过程并不顺利,为了日后方便,遂在此记录些细节,:)

  • 要排除某个目录请使用–exclude PATTERN选项,如需指定多个目录,请相应增加–exclude数量
  • PATTERN必须是相对路径,如果是目录,则不能以/结尾
  • -czvpf中的p为保留目录权限信息,:)

例子:
tar -czvpf archiver.tar.gz ./target_dir/ –exclude ./target_dir/attachments –exclude ./target_dir/uc_server/data/avatar

Posted in Server | Tagged | Leave a comment

平铺地图滚动的性能优化

一款手机游戏需要实现背景图的无缝循环滚动,基本思路就是生成若干数量的背景图实例前后对接在一起。编码中考虑到要降低内存消耗,除了将背景图转换为单份BitmapData复用外,也需要对生成的背景图数量进行控制。因为对移出显示区域的图片可以重复使用,所以最终生成的图片数量为:Math.ceil(显示区域宽度/图片宽度)  + 1。最后的+1是为了补上当第一张图片再未完全移出显示区域时在图片队列尾部留下的空隙。

以下是滚动方案:

方案一:

在EnterFrame内递减已对接好的若干图片的x坐标,首图移出显示区域后改变其x坐标将其移至队列尾部。此方法需要更新多个显示对象的坐标值,性能一般,移出显示区域的图片还会显示,同时会撑大显示区域(实际大小为图片数量*图片宽度)。虽然可以使用遮罩解决,但是还要生成一个显示对象赋值给mask。

方案二:

使用scrollRect,递增其x坐标来实现类似镜头移动效果。默认就隐藏了移出显示区域外的图片部分,不用使用遮罩。只需控制scrollRect的x坐标,逻辑相对方案一清晰,也减少了代码量。需要注意的是DisplayObject.scrollRect属性是一个getter,取值做修改的时候内部可能赋值一个实例返回给你,所以你直接修改其x坐标是不会生效的,最佳的做法是在最初赋初值的时候在外部保存一个引用,要修改x坐标时直接通过保存的引用修改,然后将这个引用再赋值给DisplayObject.scrollRect即可。代码如下:

不生效:

area.scrollRect.x += 1;

会生效:

scrollRectRefCopy.x += 1;
area.scrollRect = scrollRect;

小记:

  1. 遮罩对象也需要加入到显示列表,否则是不会生效的。
  2. 单纯的提高移动速度(因数)不会降低帧频,重要的是控制移动的显示对象的数量。
  3. 不要设置移动对象容器的cacheAsBitmap为true,在移动(大面积重绘)的情况下会让移动设备掉帧,上述例子iOS未设置时帧频为23~24浮动,设置后直接掉到17~18。
  4. 由于原理不同,方案二在处理图片连续性问题的解决方案是,在首图移出显示区域后,重置scrollRect.x为scrollRect.x – tile.width。这样也可以避免对显示列表的频繁更新。
Posted in Actionscript | Leave a comment

无法将使用Embed元标签嵌入的MovieClip绘入BitmapData

昨天在为一个手机应用做测试的时候发现无法将使用Embed元标签嵌入的MovieClip绘入BitmapData,位图数据为空。原本以为是MovieClip有问题,尝试后排除此可能。

最后经过过客的调试发现,使用Loader载入的同个swf可以正常绘制。目前还未找出使用Embed嵌入的MC绘制失败的原因。

测试过程中有一个细节,就是实例化BitmapData时,除了第三个参数transparent需要设置为true外,第四个参数fillColor需要与MC的文档背景色一致,否则背景会不透明,显示为一个色块。

Posted in Actionscript | Leave a comment