Joomla/MosIf的使用

来自站长百科
跳转至: 导航、​ 搜索

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 1.0使用手册导航

Joomla安装

Joomla!的安装

Joomla 1.0教程

让网站自动适应掌上电脑阅读版面 | MosIf的使用 | Joomla登录模块的DIY改造| 用下拉式页面跳转替换Joomla跳转列表 | configuration.php文件操作 | 用blog形式做简单的产品展示 | 将DreamHost的mysql数据导入及导出的问题 | 给页面顶端添加ActiveX Infobar | 用JA Transmenu模块做多级弹出菜单 | 用桥接器整合开源Gallery2图库到Joomla | 用CB Profile Gallery搭建交友网站的会员相册 | 在网页中插入Google Map地图 | VM中产品详情只显示大图的实现 | Joomla!扩展(组件、模块、触发器)的汉化 | Joomla! Pack的使用 | 应用JSMF桥接器在Joomla!上安装SMF论坛 | Advanced Flash Mp3 Player播放器模块用法 | Joomla/Allvideos Plugin 引用视频、音频的方法|geshibot使用详解 | 表格式模板列宽度自动扩展的实现 | Joomla! Tkit使用详解 | Community Builder 1.0.2 的安装方法 | 利用CSS给文章标题添加图片 | 如何选择合适的下载组件 | 让Joomla支持flash格式的banner

其他Joomla教程

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