Joomla/MosIf的使用
MosIf是一個Joomla!觸發(fā)器(mambot)的名稱。所謂觸發(fā)器,就是當 Joomla! 的頁面被瀏覽器打開時,就立即執(zhí)行的“機器人代碼”。通常來說,“頁面被打開”就是觸發(fā)器運行的唯一“觸發(fā)”條件。但是,MosIf 是一個特例。
MosIf 特殊在,在某些特定條件下才能看到它執(zhí)行的結果。例如,有一段文字指定只給“熊貓燒香”這個會員看,那么其他訪客或會員打開該頁面時就看不到這段話,而“熊貓燒香”會員卻在登錄后能在同一個頁面上看到這段文字。嚴格來講,看不到結果的時候,MosIf 也是運行了的,只不過沒有“顯示”出來。給人的感覺似乎并沒有執(zhí)行。
為什么要用MosIf[ ]
首先舉一個簡單的例子來說明:我們都知道Joomla!后臺可以對某個模塊或某篇文章設置其訪問權限,比方說只讓注冊會員看到,而未注冊訪客看不到。這樣做的好處是可以誘惑訪客注冊為會員。但是,如果反過來:我們希望某些文字只展示給未注冊訪客(含未登錄的會員),而注冊會員在登錄后就看不到—— 這一點Joomla!就做不到!因為開發(fā)人員認為很可笑:憑什么未注冊訪客都能看到的東西,站內注冊會員卻看不到?他們認為不公平!
但是,這種需求與公平無關。例如,我想在一篇名為《歡迎訪問我的網上家園》的文章中,分別對未注冊訪客和會員問候一下,而且我希望未注冊訪客看到的文章內容是“親愛的訪客朋友…… 點擊此處立即注冊…… 如果您已經注冊,請點擊此處登錄”,而已注冊會員在登錄后看到的是“親愛的會員…… 感謝您在本站注冊”。也就是說,會員在登錄后完全看不到給訪客顯示的文字。遺憾的是,Joomla! 本身不具備這個能力——除非你準備兩篇內容不同的文章,但是這樣就背離了我們的初衷:文章的數(shù)量增加了,而且URL也不同。
如果啟用了 MosIf 就很容易做到:這個觸發(fā)器可以基于用戶類型(訪客、會員、管理員等等)而顯示指定的文字。例如,用mosif 來完成上面的任務,其代碼就是:
{mosif usertype=registered}親愛的會員{else}親愛的訪客朋友{endif}:
上面一段代碼執(zhí)行后的結果就是會員和訪客看到不同內容的問候語。
用MosIf能干什么[ ]
這個條件觸發(fā)器(Conditional Mambot)支持的條件可不止一種,條件還可以是:用戶名、文章作者、瀏覽器版本、日期、時間、星期、瀏覽器語言、IP 地址,甚至是 cookie !
例如,我們顯示一段文字,只允許會員 batman 看到:
{mosif username=batman}親愛的batman{else}陌生人{endif},您好!:
至于其他條件的應用,大家參看安裝包中的 readme_cn.txt 文件。
在最新的 1.11 版本中,軟件作者 Martin Larsen 還增加了“嵌套”功能。即,在MosIf 語句中可以嵌套另一個 MosIf 條件,而且嵌套曾數(shù)不限。唯一要注意的是:為了避免代碼混淆,每一層必須設定一個識別標志。
舉例來說,我們剛才問候了 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 <參數(shù)><運算符><列表>}some content{else}other content{endif}
<參數(shù)> 包括:username | usergroup | usertype | ip | language | cookie_<name> | author | browser | date | time | datetime | weekday
<運算符> 包括:> | < | = | != (分別代表“大于”、“小于”“等于”和“不等于”),其中前兩個還可以寫作 gt (greater than)和 lt (less than)。
<列表> 表示參數(shù)值可以是多個,互相用英文逗號分隔。例如,我們希望 batman 、spider 和 superman 三個會員看到同樣一段文字,而其他人看不到,就可以寫成:
{mosif username=batman, spider, superman}bla bla bla {else} heyihayo {endif}
另外,MosIf 還支持使用通配符(Wildcard),同樣的,? 表示任意一個字符,* 表示任意數(shù)量的任意字符。例如,username=john* 就表示以 john 開頭的所有會員。
通配符可以用來描述IP地址段。例如,我們只允許特定IP范圍的訪客看到某些內容:
{mosif ip=10.0.0.?}這段文字僅對網絡地址范圍 10.0.0.0-10.0.0.9 的用戶可見{endif}
由于?表示任意一個字符,因此只能是 0 至 9;假如使用*,則表示 0 至 255。
幾點注意事項:
- MosIf 標記可以跨越多行。
- 條件及名稱是區(qū)分大小寫的。
- 您可以在逗號(commas)及等于號(equal sign)之前或之后添加空格以便于識別。
最后,提醒一下:當網站啟用了 PDF 按鈕,顯示文章的 PDF 格式時,MosIf 觸發(fā)器不能生效。如果您希望 mosIf 在 PDF 視圖下生效,你必須上傳 Martin 修改過的 pdf.php 文件(此文件在安裝包內)到服務器上,放置到 /includes 目錄,覆蓋Joomla! 原有的同名文件。
參考來源[ ]
http://www.joomlagate.com/article/joomla10-tutorial/mosif-execute-joomla-command-on-conditions/