分类目录归档:Joomla

Joomla

Joomla 模板常用函数收集

在平时开发 Joomla 模板的时候收集了一些极为常见也非常有用的函数,现列出来方便制作 Joomla 模板时查阅。

1、根据位置是否存在内容设置一些宽度:countModules();

if ($this->countModules('west and east') == 0) {
    $coreWidth = "100%";
}
if ($this->countModules('west or east') == 1) {
    $coreWidth = "75%";
}
if ($this->countModules('west and east') == 1) {
    $coreWidth = "50%";
}

解释一下:通常多栏页面在没有其中一栏或多栏内容的情况下需要将其他栏目做宽度调整,这里使用 countModules() 函数判断是否存在一个或多个位置。

示例中展示的是三栏情况下,假使三栏分别为三个 west core east 位置,其中 west 和 east 为左右两个位置内容为可选,而 core 位置为主体位置内容为必须,通过判断得出四种情况即:无 west 栏、无 east 栏、仅 core 栏及同时具有三栏。

示例代码第一行为仅有 core 栏即 west 和 east 都不存在的情况时赋 coreWidth 为 100% 宽度;
第二行为仅有 west 或 east 栏其中之一时赋 coreWidth 为 75% 宽度;
第三行为同时存在三栏时附 coreWidth 为 50% 宽度。

取得了 coreWidth 值之后就可以在 html 代码中引用了,例如:

<div style="width:<?php echo $coreWidth; ?>;">
  <jdoc:include type="modules" name="core" />
</div>

当然,这里省略了 CSS 样式,你需要在 CSS 里面定义 west 和 east 的宽度等参数。

2、根据位置是否有内容控制输出:countModules();

<?php if($this->countModules('west or core or east')) : ?>
<div class="body">
  <div id="west">
    <jdoc:include type="modules" name="west" />
  </div>
  <div id="core">
    <jdoc:include type="modules" name="core" />
  </div>
  <div id="east">
    <jdoc:include type="modules" name="east" />
  </div>
</div>
<?php endif; ?>

解释一下:这种使用其实是对上面第 1 点的一个补充,通常在输出位置的时候我们喜欢使用一个 div 包裹输出的位置内容用来做一些效果,但如果该位置没有输出,或是一个大通栏里面包括的三个位置都没有输出,那么这个通栏就没有必要输出了,使用 countModules 同时判断 west core east 位置是否有任意一个位置有内容输出,如果有任一位置有输出便输出 <div class=”body”> </div> 中间的内容。

3、方便的查看当前模板位置情况:index.php?tp=1

示例代码:网站 URL 路径 + index.php?tp=1 (如 http://127.0.0.1/index.php?tp=1 等)
解释一下:这个地址参数用来方便的查看当前页面的模板上的位置情况,及相应的输出模式,其中的 127.0.0.1 需要根据具体地址修改。

Joomla 模板的 jdoc 声明

jdoc 声明是 Joomla 模板的一个方法(method),用来在页面中输出指定的内容。典型的 jdoc 声明看上去是这样的:

<jdoc:include type="component" />

不同类型(type)的 jdoc 声明负责不同的内容输出。

type 类型

jdoc 声明中的 type 指定要渲染的内容类型,类型值可以是 component, head, installation, message, module, modules, 下面是是一些 Joomla 模板中常见的 jdoc 声明:

<jdoc:include type="component" />
<jdoc:include type="head" />
<jdoc:include type="installation" />
<jdoc:include type="message" />
<jdoc:include type="module" name="breadcrumbs" />
<jdoc:include type="module" name="menu" />
<jdoc:include type="module" name="submenu" style="rounded" id="submenu-box" />
<jdoc:include type="modules" name="debug" />
<jdoc:include type="modules" name="icon" />
<jdoc:include type="modules" name="left" style="rounded" />
<jdoc:include type="modules" name="left" style="xhtml" />
<jdoc:include type="modules" name="right" style="xhtml" />
<jdoc:include type="modules" name="status" />
<jdoc:include type="modules" name="syndicate" />
<jdoc:include type="modules" name="title" />
<jdoc:include type="modules" name="toolbar" />
<jdoc:include type="modules" name="top" />
<jdoc:include type="modules" name="top" style="xhtml" />
<jdoc:include type="modules" name="user1" style="xhtml" />
<jdoc:include type="modules" name="user2" style="xhtml" />
<jdoc:include type="modules" name="user3" />
<jdoc:include type="modules" name="user4" />

component

这个声明要放在模板页面的 <body> 标签中,并且只能出现一次;它负责输出当前页面的主要内容(main content)。

head

这个声明要放在模板的 <head&gt 中,并且只能出现一次;它负责输出当前页面的样式表链接、脚本链接、meta 信息等内容。

installation

这个类型的 jdoc 声明只用于 Joomla 的安装器模板(Installer template)中,与 Component 类型相似,它只负责输出安装过程中页面上的主要内容。

message

这个声明要放在模板的 <body> 中,并且只能出现一次;用于输出操作过程中的系统提示信息或出错信息。

module

module 类型的 jdoc 声明会根据其 name 属性输出对应的模块,但该模块内容是否会呈现在页面上则取决于用户是否发布激活了该模块;可以为其设定 style 属性来控制模块输出模式。

modules

modules 类型的 jdoc 声明用来在当前位置调用某个模板位置(template position)的所有模块;所有的模板位置都需要预先在 templatedetails.xml 文件中定义。同样可以为其设定 style 属性来控制模块的输出模式。

style 属性

对于 module 及 modules 类型的一个可选属性,这一属性指定了模块被渲染风格,如果没指定将默认为 none 属性,所有属性在 /templates/system/html/modules.php 中有声明,包括有 horz outline rounded table xhtml 当然模板设计者可以在你自己的模板同样位置对其进行自定义,否则建议使用 xhtml 类型。

Joomla 自定义 404 页面实现

  1. 将 /templates/system/error.php 复制到当前使用的模板中。
  2. 新建一篇文章作为你的404页面,就象这样 http://www.xx.com/404-error.html
  3. 编辑 error.php 在
// no direct access
defined( '_JEXEC' ) or die( 'Restricted access' );
?>

代码后面添加如下代码:

<?php
if (($this->error->code) == '404') {
    echo file_get_contents('http://www.xx.com/404-error.html');
} else {
?>

最后,在

</body>
</html>

代码后面添加如下代码:

<?php } ?>

OK,Joomla 自定义 404 页面实现完成。

去掉 Joomla 头部 meta name=generator 信息的输出

去掉头部

<meta name="generator" content="Joomla! 1.5 – Open Source Content Management" />

的输出:

注释内容请打开

/libraries/joomla/document/html/renderer/head.php

文件找到

$strHtml .= $tab.'<meta name="generator" content="'.$document->getGenerator().'" />'.$lnEnd;

将它注释掉或者修改为你想要的。

修改文件请打开

/libraries/joomla/document/document.php

文件找到

var $_generator = 'Joomla! 1.5 – Open Source Content Management';

将它修改成你想要的内容。OK 大工告成。

JoomlaTags for Joomla 1.5.x 文章标签系统

JoomlaTags 是由国内高手 Joe Guo 针对 Joomla 1.5.x 平台开发的文章标签系统,借助 JoomlaTags 组件及其配套插件,你的 Joomla 文章系统就能增加“标签”(Tag)这种横向索引系统。

JoomlaTags 的前台功能包括:

  1. 在每一篇文章全文页面的内容末尾显示标签(tags);
  2. 标签列表;
  3. 标签博客式布局;
  4. 热门标签;
  5. 点击最多的标签;
  6. 最新标签;
  7. 支持 SEF 友好网址,兼容 sh404SEF 及 ARTIO JoomSEF;
  8. 自带 XMap 插件,可生成站点地图;
  9. 多国语言界面;
  10. 添加/修改 标签;
  11. 支持通过 JoomlFish 实现多语种标签;
  12. 自带搜索插件;

JoomlaTags 的后台功能包括:

  1. 将 Meta 关键词导入为标签;
  2. 修改标签;
  3. 批量添加标签;
  4. 批量管理标签;
  5. 自动提取标签;
  6. 支持多语种系统;
  7. 在线编辑模板;
  8. 按单元及类别筛选标签;
  9. 一步安装 JoomlaTags 组件及其配套模块、插件;

Kareebu Secure for Joomla 1.5.x 后台登录界面保护插件

Kareebu Secure 是针对 Joomla! 1.5.x 平台的系统插件,其功能是保护你的 Joomla 网站的后台登录界面。

Joomla 的后台登录网址默认情况下是可以公开访问的。如果黑客知道你的网站是用 Joomla CMS 搭建的,那么他可以通过 http://www.域名.com/administrator 这个网址就能看到你的网站后台登录页面,这样就加快了破解网站管理入口的速度。

Kareebu Secure 插件就是专门来解决这个问题的。你安装并启用 Kareebu Secure 插件后,可以在其参数中设置一个密码。那么,当你下次尝试直接访问 http://www.域名.com/administrator 这个路径时,就会多一层密码保护。

Kareebu Secure 提供两种密码验证模式:HTTP 验证模式 和 兼容模式。前者是自动弹出一个密码输入框,后者是需要使用带密码的 URL 才能看到后台登录界面,直接访问 http://www.域名.com/administrator 则会被自动转向网站前台首页。

注意:

  1. 只有当你的 PHP 以 Apache 模块方式运行时,才能选择 HTTP 验证模式;否则请选择”兼容模式“;
  2. 在设置密码时,一定不要使用数字!如果你的密码中含有数字,或者由纯数字组成密码,则本插件无法工作!
  3. 如果你自己忘记密码,或由于其它原因导致无法看到后台登录界面,可以通过 FTP 软件删除 /plugins/system/ksecure.php 这个文件,然后再直接访问后台登录页面网址;

隐藏 Joomla 后台的帮助栏目

有的人不喜欢在后台看到那个“帮助”主菜单,解决的办法很简单,我这里是通过 js 将“帮助”主菜单和栏目隐藏。

打开“ 网站目录\administrator\templates\khepri\js\index.js ”。也就是后台默认模板的 js 文件。
这个文件很简单,全部内容如下:

document.menu = null window.addEvent('load',
function() {
    element = $('menu') if (!element.hasClass('disabled')) {
        var menu = new JMenu(element) document.menu = menu
    }
});

现在要隐藏帮助主菜单和栏目,只需在 “ }); ” 之前增加 2 句 js 代码即可,代码如下:

$('ul#menu', 'li.node').getLast().setStyle('display', 'none'); //去帮助主菜单
$('toolbar-help').setStyle('display', 'none'); //去帮助子菜单

修改后的文件内容如下:

document.menu = null window.addEvent('load',
function() {
    element = $('menu') if (!element.hasClass('disabled')) {
        var menu = new JMenu(element) document.menu = menu
    }

    $('ul#menu', 'li.node').getLast().setStyle('display', 'none'); //去帮助主菜单
    $('toolbar-help').setStyle('display', 'none'); //去帮助子菜单

});

经本人测试,以上代码不是 浮云 ,它很 给力。

Display News by BK for Joomla1.5.x 文章列表展示模块

不论你用 Joomla 搭建的是企业网站、政府网站、学校网站还是个人博客等,至少都要用到 Joomla 的文章系统(com_content)来发布新闻、日志,甚至是科研论文、小说故事等等。文章多了之后,你肯定希望有一个模块来展示文章标题链接。尽管 Joomla 已经自带了“Latest News”和“Popular News”两个模块,但是很多人发现其功能远远不能满足各种网站的需求。

举一个最简单例子:如果你希望“最新文章”模块中列出文章标题同时,还要列出发表日期,它就做不到!而很多新闻网站都需要在新闻标题前面或后面同时显示日期,可 Joomla 自带的那两个模块就是没有这些基本的功能。

再比如:你可能希望新闻标题前方还显示所在类别名称,像这样:

这种样式相信大家在诸如“新浪”、“搜狐”等新闻网站都见过,但是 Joomla 自带的文章展示模块根本做不到!

这两点要求几乎代表了绝大多数用户对 Joomla 文章展示模块的期望。还有人希望同时展示文章插图缩略图;有人希望标题滚动;有人希望标题下方附带一点内容;有人希望鼠标指向标题时浮现出内容摘要;有人希望从指定单元、类别中随机提取文章…… 这些要求过分吗?不过分!用户永远是对的!既然 Joomla 官方团队忙得顾不上改进文章展示模块,于是就有许多第三方模块来填补这个空白。用户们也就开始到处寻找符合自己需要的展示模块。

而 Display News by BK 文章列表展示模块,它就能独自实现上述种种文章展示要求!神奇吧?感兴趣的朋友就下个玩玩吧。