2014-04-11
Nginx 泛解析实现二级(多)域名,自动设置root 绑定到对应子目录

如根目录结构为 /htdocs ├── bbs └── www 要实现绑定域名bbs.domain.com 到bbs 目录,www.domain.com 到www 目录,规则如下:

server {
listen 80;
server_name ~^(?.+)\.domian\.com$;
root htdocs/$subdomain;
error_page 404 /error.html;
location /error.html {
root /htdocs;
}

}

三级域名,更多子域名设置类似。

Read More

2014-04-10
让Discuz 安卓独立客户端帖子内容页展示分类信息字段

参照之前《简单修改,让Discuz 手机触屏版默认帖子内容页模板显示分类信息内容》一文,举一反三,其实要在Discuz 的独立客户端里实现贴内分类信息的展示并不难。终于可以抛掉使用“温馨提示”来引导用户切换模板的尴尬局面了(见:Discuz 手机版”触屏版” 通过版块判断为viewthread模板页添加自定义文本) 根据经验,要实现起来非常简单! Discuz 安卓独立客户端插件启用后,插件目录位于source/plugin 的mobileoem 中。 查看目录结构:

[root@localhost mobileoem]# tree
.
├── api
│ ├── pushlist.php
│ ├── pushtomobile.php
│ ├── refreshpush.php
│ ├── register.php
│ ├── removepush.php
│ ├── sendtopc.php
│ └── threaddetail.php
├── discuzcode.func.php
├── discuz_plugin_mobileoem.xml
├── index.htm
├── install.php
├── json.class.php
├── mobileoem.class.php
├── mobile.php
├── qrcode.class.php
├── setting.inc.php
├── static
│ ├── image
│ │ ├── cloud.png
│ │ ├── icon_reply.png
│ │ ├── load_pic.png
│ │ └── push.png
│ └── js
│ ├── index.htm
│ ├── iscroll.js
│ └── viewthread.js
├── switch.php
├── table
│ ├── table_mobileoem_member.php
│ └── table_mobileoem_pushthreads.php
└── template
├── downloadguide.htm
├── mobileoem
│ ├── common
│ │ ├── header.htm
│ │ └── showmessage.htm
│ └── forum
│ ├── discuzcode.htm
│ ├── viewthread.htm
│ ├── viewthread_node_body.htm
│ └── viewthread_node.htm
└── module.htm

9 directories, 34 files

客户端帖子主题也模板文件是viewthread_node_body.htm,只要修改一下就可以用了。 找到$post[message],在上面添加以下内容:

$option[title]:

$option[value] $option[unit]-

就完成了。仅仅是循环输出各个字段的内容,不启用分类信息模板,毕竟仅是手机网页,简洁才能有好体验。另外,为了看起来舒服点,可以定义一点css style!


顺便说一下,Discuz 的客户端除了首页有个登陆入口外,真找不到其它的了,如有好位置,可以添加一个“A”标签来调用客户端的登陆页:

[登陆](javascript:AppInterface.toLogin())
Read More

2014-04-10
Discuz Nginx 301 重定向规则,解决二级域名多入口问题

Discuz 在启用了版块或者频道的二级域名时,可通过改二级域名访问论坛的url并且不会自动纠正,似乎不太友好。之前用apache 也写了rewrite 规则实现重定向,但现在切换至nginx,需要重新配置一下,但也很简单: 原来的apache rewrite 规则:

RewriteCond %{HTTP_HOST} ^a.domain.com$
RewriteRule ^thread-([0-9]+)-([0-9]+)-([0-9]+)\.html$ http://www.domain.com/thread-$1-$2-$3.html [L,R=301]
RewriteRule ^forum.php(.)$ http://www.domain.com/forum.php$1 [L,R=301]
RewriteRule ^archiver(.
)$ http://www.domain.com/archiver$1 [R=301,L]

nginx 规则:

if ($host != ‘www.domian.com')
{
rewrite ^/forum.php(.)$ http://www.domain.com/forum.php$1 permanent;
rewrite ^/forum-(.
)$ http://www.domain.com/forum-$1 permanent;
rewrite ^/thread-(.)$ http://www.domain.com/thread-$1 permanent;
rewrite ^/archiver(.
)$ http://www.domain.com/archiver$1 permanent;
}

因为是多个二级域名的关系,所以将所有$host 不是“www.domain.com” 都rewrite 到“www.domain.com” 下面。将这段规则放到Discuz 生成的规则上面就好了。 看一下效果:

ying@ying-desktop:~/Desktop$ wget http://a.domian.com/thread-18513-1-1.html--2014-04-10 13:28:56– http://a.domain.com/thread-18513-1-1.html
正在解析主机 a.domain.com (a.domain.com)… 114.215.101.226
正在连接 a.domain.com (a.domain.com)|114.215.101.226|:80… 已连接。
已发出 HTTP 请求,正在等待回应… 301 Moved Permanently
位置:http://www.domain.com/thread-18513-1-1.html [跟随至新的 URL]
–2014-04-10 13:28:57– http://www.domain.com/thread-18513-1-1.html
正在解析主机 www.domian.com (www.domain.com)... 114.215.101.226
再次使用存在的到 a.domain.com:80 的连接。
已发出 HTTP 请求,正在等待回应… 200 OK
长度: 未指定 [text/html]
正在保存至: “thread-18513-1-1.html”

\[     <=\>                               \] 106,477      100KB/s   用时 1.0s
Read More

2014-04-09
Discuz 添加自定义语言包(source/language/lang_*.php) 并在模板中调用

没有系统学习过Discuz,想来些diy 确实吃力。现在我要加载一个语言包在source/language/lang_identifier.php 这个 lang_identifier.php是我自定义的。 内容:

‘名字’,
);

?>

目前只知道需要在模板中用php 使用Discuz 的lang 函数输出,不知道有没有更直观的方法?

lang() 函数位于source/function/function_core.php 中:

function lang($file, $langvar = null, $vars = array(), $default = null) {
}

$file 如果写成不包含路径的文件,则代表 source/language 目录下的文件。如果包含目录,如 ‘forum/misc’,则代表 source/language/forum/lang_misc.php 文件。如果写成 plugin/插件id,则会读取插件的语言包文件,即 data/plugindata/lang_plugin.php,此文件是根据安装并启用的插件缓存后生成的。

Read More

2014-04-08
给Discuz 的发帖按钮加个判断,自动补上当前主题分类(分类信息) 的typeid (sortid)

默认Discuz X3.1 发帖按钮的作用就是简单地在当前版块发表新主题!自己搭建的Discuz 站点,划分了一定量的主题分类及分类信息,而在使用论坛的使用过程中,会遇到这样的场景: 进入A 版块,选中A 版块的A-a 主题分类来浏览该主题分类下的所有帖子。然后点击发帖按钮发布新主题。结果在发帖的时候,默认不会选择主题分类,必须再一次执行选择主题分类的操作! 这个给我的感觉就是累,像我这样“低智商”的用户,更喜欢”傻瓜式“的类似”所见即所得“的操作方式,而不是”再一次“执行旧动作。 好了,既然如此,那就弄个判断,给Discuz 的发帖按钮添加上当前主题分类或分类信息的id,让发帖按钮触发的发帖链接带上主题分类或分类信息! 涉及的模板文件:

  1. template/default/forum/forumdisplay.htm (版块主题列表页)
  2. template/default/forum/forumdisplay_list.htm (版块主题列表页)
  3. template/default/forum/viewthread.htm (帖子内容页)

forumdisplay.htm 及forumdisplay_list.htm 这两个文件的修改方法是一样的。 找到发帖按钮所在的位置:

{lang send_posts}

在 forum.php?mod=post&action=newthread&fid=$_G[fid] 后面添加上主题分类及分类信息的判断及输出:

{if ($_G[‘forum’][‘threadtypes’] && $_G[‘forum’][‘threadtypes’][‘listable’]) || count($_G[‘forum’][‘threadsorts’][‘types’]) > 0}{if $_GET[‘typeid’] != 0}&filter=typeid&typeid={$_GET[‘typeid’]}{/if}{if $_GET[‘sortid’] != 0}&sortid=$_GET[‘sortid’]{/if}{/if}

最后变成:

{lang send_posts}

forumdisplay.htm 里还有个通过发帖按钮触发的onmouseover 事件,触发的事件就是发帖按钮下面的ul 列表,其中第一个li 默认是:

这里也总要加上吧:

{if $_GET[‘typeid’] != 0}&filter=typeid&typeid=$_GET[‘typeid’]{/if}{if $_GET[‘sortid’] != 0}&sortid=$_GET[‘sortid’]{/if}

最后是这样子的:

至此,Discuz 主题列表页的修改已经完成。然后,还需调整的地方就剩下帖子内容页viewthread.htm 里面的发帖链接了。


与主题列表页基本一致的发帖按钮(链接):

{lang send_posts}

但对应的变量不同了,所以按照主题列表页的方法会出错,需要加入的判断为:

{if $_G[‘forum_thread’][‘typeid’] && $_G[‘forum’][‘threadtypes’][‘types’][$_G[‘forum_thread’][‘typeid’]] && $_G[forum_thread][typeid] != 0}&filter=typeid&typeid=$_G[forum_thread][typeid]{/if}{if $_G[‘forum’][‘threadsorts’] && $_G[‘forum_thread’][‘sortid’] != 0}&sortid=$_G[forum_thread][sortid]{/if}

最后这段发帖链接变为:

{lang send_posts}

对应的onmouseover 事件:

变更为:


有两个比较需要留意的地方

  • 一个是发帖按钮对后台是否启用了分类信息的“发帖必须归类”选项有个值判断:

    !$_G[‘forum’][‘threadsorts’][‘required’]

    这里,我是直接去掉了这个判断,因为我启用了这个选项,版块对应的特殊主题也是关闭的,加入的内容随便放在if 或者else 之后估计不会有太大影响。当然如果有问题,还请指出:)

  • 另外一个,不是很重要,只是加上了typeid 及 sortid 是否等于0 的判断,因为如果不加上,那么在主题列表页没有选择主题分类或分类信息及相关帖子没有启用主题分类或分类信息时,发帖按钮(链接)激活的typeid 及sortid 值均为0,虽然没什么影响,但看起来十分不雅,so…
Read More

2014-04-04
简单修改,让Discuz 手机触屏版默认帖子内容页模板显示分类信息内容

之前特发一文《Discuz 手机版”触屏版” 通过版块判断为viewthread模板页添加自定义文本》以记录在Discuz 上获得的“重大突破”,最近才发现成“笑话”了。与其给Discuz 中的分类信息来个“温馨提示”,还不如直接让它显示出来,用户体验提升又提升一个层次。继续写文备忘… 继续浏览Discuz X3.1 触屏版帖子展示页模板:template/default/touch/forum/viewthread.htm,发现在主题输出段与普通标准版的内容是一致的,为什么不会和标准版模板一样输出分类信息内容呢?

{lang has_expired}

$_G[forum][threadsorts][types][$_G[forum_thread][sortid]]

$option\[title\]: $option\[value\] $option\[unit\]--  

后来往上翻,发现执行一句PHP 语句:

原来变量$threadsort 值已经赋值了,值为null,那么以下有关$threadsort 的if 判断当然被否认了,也就是“!”。直接去掉这段赋值语句,Discuz X3.1 的触屏版就能循环输出分类信息字段内容了。但输出模板真的很难看…如果要调用后台分类信息的“diy 调用模板”,有朋友说可以通过以下方式实现:

  • 原loop 循环段:
$option\[title\]: $option\[value\] $option\[unit\]--  
  • 替换为:

    $threadsortshow\[typetemplate\]
    

    提示:必须在分类信息模板的 DIY调用模板 编写好HTML样式

Read More

2014-04-03
一段鼠标滑过替换lj 标签CSS 样式(背景)的JavaScript

var allLi=document.getElementById(“slideUl_a”);
var classCss=” ;background:#FEFAF1;border:1px solid #FED79E;”;
var classCss2=” ;background:#fff;border:1px solid #fff;”;
var allLiQuery=allLi.getElementsByTagName(“li”);
var lilen=allLiQuery.length;
for(var i =0;i

Read More

2014-04-02
Discuz 插件设计:添加版块多选(forums)变量

不是说最近准备学习Discuz 插件的编写了,整个过程都是为了实现在某版块显示子版块主题分类这一小功能而折腾的。因为相关知识异常的缺乏,所以耗时巨长,还迫于记忆力不好,所以赶紧写文备忘。其实Discuz 的开发文档已经非常完善了,只不过对于我等菜鸟来说还是有点难吃消。 开始编写一个新插件,请首先打开 config/config_global.php 文件,在文件结尾添加以下代码开启插件设计者模式。

$_config[‘plugindeveloper’] = 1;

按照Dicusz 的要求,“设置”、“模块”就不说了,在“变量”选项卡添加一个版块多选(forums)变量,如配置变量名为“forumsAllowed”。然后相关“模块”文件中加入判断即可。

global $_G;
@extract($_G[‘cache’][‘plugin’][‘identifier’]);
if(!in_array($_G[‘fid’],(array)unserialize($forumsAllowed))) return ‘’;
else {

}
Read More

2014-03-18
OpenShift 自定义 OPENSHIFT_DOCUMENT_ROOT 变量,替换网站根目录路径!

WordPress 放在OpenShift 这么长时间以来,一直没有出现过问题,真是太省心了。最近因为VtigerCrm 更新至6.0,想找个可靠的外网环境试用一下,当然还是选择了OpenShift 。不过在创建了php-5.4 的cartridge 后,登陆到shell,发现php 应用的根目录不再是曾经的~/app-root/repo/php,而是~/app-root/repo。个人陋习有时可能会rm 掉整个目录的文件,或者需要创建子目录存放其它文件,如OpenShit 自动备份倒dropbox 的脚本等,这样显然很危险!所以作为一个OpenShit 使用Apache-based cartridge 的用户,我还是十分乐意能有个选择去改变应用的公共目录(public directory),也就是Apache 服务里的DocumentRoot 了。这样我就再也没必要将我的代码放到一个预先定义的子目录里面啦。如~/app-root/repo/php,那么只要将VtigerCrm 存放至php 目录下就好了。 预先定义的子目录 :)

  • DIY: DocumentRoot=${OPENSHIFT_REPO_DIR}diy
  • PERL: DocumentRoot=${OPENSHIFT_REPO_DIR}
  • PHP: DocumentRoot=${OPENSHIFT_REPO_DIR}
  • Python: DocumentRoot={OPENSHIFT_REPO_DIR}
  • Ruby: DocumentRoot=${OPENSHIFT_REPO_DIR}public

我能够通过更改$OPENSHIFT_DOCUMENT_ROOT 这个环境变量去定义这个DocumentRoot 的值:

rhc env-set OPENSHIFT_DOCUMENT_ROOT=”\${OPENSHIFT_REPO}/custom-directory” –app NAME

登陆检验:

rhc ssh echo $OPENSHIFT_DOCUMENT_ROOT

成功输出自定义值。结束!

Read More

2014-03-14
Discuz 手机版"触屏版" 通过版块判断为viewthread模板页添加自定义文本

目前移动互联网那么火热,虽然是小草根在做点小事情,但确实也感受到这玩意的强大。方便、快捷、精准!突然间有点小兴奋也有点担忧。就是这样,作为半个屌丝的存在,赶紧为在Discuz 手机版发现的问题找个解决方法。目前Discuz 3.1 的触屏版对内容的呈现方式,许多网友都习惯了,但是在分类信息这块却特别无力。考虑到个人联系电话的私密性,已将号码段划分为”分类信息“并设置登陆可见,但是最新Discuz 3.1 手机触屏版并不会显示任何分类信息字段,甚至连个提示都没有,只有在“标准版”下才可见,部分刚刚接触的网友会很无奈地在回帖里咨询”联系电话“- -! 迫于没有足够资金定制手机模板及过硬的开发技术的情况下,只能折衷地手动将这个“提示” 添加上去了。 guest member 相关文件:

  • /template/default/touch/forum/viewthread.htm

添加位置: 将下面这段代码添加至

这个div 关闭前。

自定义添加的内容:

温馨提示:此帖为分类信息,查看楼主联系电话请

 [{lang register}](<!--{if $_G['setting']['regstatus']}-->member.php?mod={$_G[setting][regname]}<!--{else}-->javascript:; "{$_G['setting']['reglinkname']}") | [{lang login}](member.php?mod=logging&action=login "{lang login}") 后 [切换至“{lang no_simplemobiletype}”]({$_G['setting']['mobile']['simpletypeurl'][0]}) 。

[切换至“{lang no_simplemobiletype}”]({$_G['setting']['mobile']['simpletypeurl'][0]}) 。

由于个人相关知识有限,如果这段代码有问题,欢迎指正!

关于几个判断:

判断是否是Fist Post,即“楼主”。因为这个提示仅是针对“查看楼主联系电话”,所以只需对主题作者所在楼层做手脚即可。

版块判断!就是多个版块的fid,有多少个启用了分类信息的版块,就or 上几个。

判断用户是否登陆,游客则显示“…” else 会员则显示“…”


其实更简单的还是直接判断版块是否启用了分类信息功能:

Read More