Joomla/MosIf的使用

来自站长百科
Jiaomh讨论 | 贡献2011年2月14日 (一) 11:38的版本
跳转至: 导航、​ 搜索

Joomla | Joomla使用手册

MosIf是一个Joomla!触发器(mambot)的名称。所谓触发器,就是当 Joomla! 的页面被浏览器打开时,就立即执行的“机器人代码”。通常来说,“页面被打开”就是触发器运行的唯一“触发”条件。但是,MosIf 是一个特例。

MosIf 特殊在,在某些特定条件下才能看到它执行的结果。例如,有一段文字指定只给“熊猫烧香”这个会员看,那么其他访客或会员打开该页面时就看不到这段话,而“熊猫烧香”会员却在登录后能在同一个页面上看到这段文字。严格来讲,看不到结果的时候,MosIf 也是运行了的,只不过没有“显示”出来。给人的感觉似乎并没有执行。

为什么要用MosIf

首先举一个简单的例子来说明:我们都知道Joomla!后台可以对某个模块或某篇文章设置其访问权限,比方说只让注册会员看到,而未注册访客看不到。这样做的好处是可以诱惑访客注册为会员。但是,如果反过来:我们希望某些文字只展示给未注册访客(含未登录的会员),而注册会员在登录后就看不到—— 这一点Joomla!就做不到!因为开发人员认为很可笑:凭什么未注册访客都能看到的东西,站内注册会员却看不到?他们认为不公平!

但是,这种需求与公平无关。例如,我想在一篇名为《欢迎访问我的网上家园》的文章中,分别对未注册访客和会员问候一下,而且我希望未注册访客看到的文章内容是“亲爱的访客朋友…… 点击此处立即注册…… 如果您已经注册,请点击此处登录”,而已注册会员在登录后看到的是“亲爱的会员…… 感谢您在本站注册”。也就是说,会员在登录后完全看不到给访客显示的文字。遗憾的是,Joomla! 本身不具备这个能力——除非你准备两篇内容不同的文章,但是这样就背离了我们的初衷:文章的数量增加了,而且URL也不同。

如果启用了 MosIf 就很容易做到:这个触发器可以基于用户类型(访客、会员、管理员等等)而显示指定的文字。例如,用mosif 来完成上面的任务,其代码就是:

{mosif usertype=registered}亲爱的会员{else}亲爱的访客朋友{endif}:

上面一段代码执行后的结果就是会员和访客看到不同内容的问候语。

用MosIf能干什么

这个条件触发器(Conditional Mambot)支持的条件可不止一种,条件还可以是:用户名、文章作者、浏览器版本、日期、时间、星期、浏览器语言、IP 地址,甚至是 cookie !

例如,我们显示一段文字,只允许会员 batman 看到:

{mosif username=batman}亲爱的batman{else}陌生人{endif},您好!:

至于其他条件的应用,大家参看安装包中的 readme_cn.txt 文件。

在最新的 1.11 版本中,软件作者 Martin Larsen 还增加了“嵌套”功能。即,在MosIf 语句中可以嵌套另一个 MosIf 条件,而且嵌套曾数不限。唯一要注意的是:为了避免代码混淆,每一层必须设定一个识别标志。

举例来说,我们刚才问候了 batman ,这次我们搞复杂一点:我们判断时间是否已过23:00 ,如果过了就提醒他休息,如果没过,就说点别的;同时对于陌生人也作出提醒:

{mosif username=batman}亲爱的batman 时间 {mosif.a time gt 23}很晚了{else.a}还不算晚{endif.a}{else}陌生人{endif},您还在网上流浪吗?

可以看出,这是嵌套了两层 MosIf,内层的增加了一个 .a 的识别标志。那么 gt 又是什么?这表示 Greater Than,即“大于”(>)。这是 MosIf 允许的“运算符”。

MosIf用法

MosIf 的语法是:

{mosif <参数><运算符><列表>}some content{else}other content{endif}

<参数> 包括:username | usergroup | usertype | ip | language | cookie_<name> | author | browser | date | time | datetime | weekday

<运算符> 包括:> | < | = | != (分别代表“大于”、“小于”“等于”和“不等于”),其中前两个还可以写作 gt (greater than)和 lt (less than)。

<列表> 表示参数值可以是多个,互相用英文逗号分隔。例如,我们希望 batman 、spider 和 superman 三个会员看到同样一段文字,而其他人看不到,就可以写成:

{mosif username=batman, spider, superman}bla bla bla {else} heyihayo {endif}

另外,MosIf 还支持使用通配符(Wildcard),同样的,? 表示任意一个字符,* 表示任意数量的任意字符。例如,username=john* 就表示以 john 开头的所有会员。

通配符可以用来描述IP地址段。例如,我们只允许特定IP范围的访客看到某些内容:

{mosif ip=10.0.0.?}这段文字仅对网络地址范围 10.0.0.0-10.0.0.9 的用户可见{endif}

由于?表示任意一个字符,因此只能是 0 至 9;假如使用*,则表示 0 至 255。

几点注意事项:

  • MosIf 标记可以跨越多行。
  • 条件及名称是区分大小写的。
  • 您可以在逗号(commas)及等于号(equal sign)之前或之后添加空格以便于识别。

最后,提醒一下:当网站启用了 PDF 按钮,显示文章的 PDF 格式时,MosIf 触发器不能生效。如果您希望 mosIf 在 PDF 视图下生效,你必须上传 Martin 修改过的 pdf.php 文件(此文件在安装包内)到服务器上,放置到 /includes 目录,覆盖Joomla! 原有的同名文件。

参考来源

http://www.joomlagate.com/article/joomla10-tutorial/mosif-execute-joomla-command-on-conditions/

Joomla使用手册导航

Joomla安装

Joomla!的安装

Joomla使用手册

用XAMPP快速搭建Joomla本地测试服务器 | 用Gmail的SMTP发送Joomla激活及通知邮件 | 深入认识Joomla CMS:扩展、菜单及模板 | Joomla 1.0教程 | Joomla 1.5教程 | Joomla高级教程 | Joomla! SEO教程