1.  相关服务

  • cms2cms.com:能够帮助在不同 cms 软件(比如 Drupal 和 Wordpress 等等)迁移数据。
  • themeforest.net:能够买到非常不错的模板,WordPress 的、Drupal 的、Joomla 的等等都有!
  • logosnap.com:获得网站 logo 的不错的地方。

2.  Joomla 基本安装

2.1  友好路径在 lighty 中的配置

Joomla 启用 SEO 优化后的 lighttpd 设置方法参考 boxiangtax 虚拟站点的相关章节:

$HTTP["host"] =~ "(www\.|)boxiangtax\.cn" {
  server.document-root = "/var/www/boxiangtax/"
  server.error-handler-404  = "/index.php"
}

3.  界面外观优化

Joomla 的模板可以在 http://www.joomla24.com 下载到。

3.1  SiteGround 模板

SiteGround 春夏秋冬四季模板可以在 http://www.joomla24.com/option,com_remository/Itemid,4/func,fileinfo/id,2901.html 下载到。

解决“当前页面的脚本导致 Internet Explorer 运行缓慢”错误

其原因在于模板为了让老版本 IE 支持 PNG 透明效果,载入了专门处理脚本,而这些脚本和比较新版本的 IE 是冲突的。

编辑 templates/siteground/js/png.js 文件的第 151 行到第 158 行,将

//
// Load the Functions
//
if( navigator.userAgent.indexOf('MSIE') >= 0 )
        addEvent(window,'load',correctPNG);
if( navigator.userAgent.indexOf('MSIE') >= 0 )
        addEvent(window,'load',rollovers_ie.init);
addEvent(window,'load',rollovers.init);

改为

//
// Load the Functions
//
var arVersion = navigator.appVersion.split("MSIE");
var version = parseFloat(arVersion[1]);
if (version <= 6.0){
        addEvent(window,'load',correctPNG);
        addEvent(window,'load',rollovers_ie.init);
        addEvent(window,'load',rollovers.init);
}

不过很奇怪,还是又报告说 IE6 下会很满。也许需要完全禁用 correctPNG 函数。。

修复页头浮动菜单报错

  1. 原始模板的“Cascading Top Menu”功能(也即页面顶端菜单的子栏目浮动弹出功能)无法正常工作,一旦启用就会报错。
  2. 首先,此功能正常工作要求“菜单管理”中有“唯一的名称”(类型)是“topmenu”,但标题不是“topmenu”的菜单模块,否则模板找不到用于页头菜单的栏目项。
  3. 修改 templates/siteground/sg_menus/SGMenu.php 文件,适应 Joomla 新版本的 api 变化。
    • 将第 21 行由
                              $items = &JMenu::getInstance();
      改为
                              $items = &JSite::getMenu();
    • 将第 33 行由
                                              $this->menu->addNode( $row );
      改为
                                              $this->menu->addNode( $params, $row );
  4. 搞定,正常工作了。唯一就是弹出的子菜单留的空白有点儿宽(针对英文标题,230像素宽),而且这个宽度是在 CSS 里头写死的。。

清除页头默认路径导航

在启用“路径导航”模块的情况下,页头会不管“路径导航”模块设置的显示位置,总是另外显示一套“路径导航”组件。只要编辑 html 模板注释掉页头这段代码就行。

高亮系统通知消息

这个模板默认是没有对系统的通知消息做任何高亮处理的(比如“您刚刚成功上传了一张照片”),行为通知和错误提示都非常不明显。可以在 template.css 文件末尾加入如下行来改善:

/* OpenID icon style */
input.system-openid, input.com-system-openid {
   background: url(http://openid.net/images/login-bg.gif) no-repeat;
   background-color: #fff;
   background-position: 0 50%;
   color: #000;
   padding-left: 18px;
}


/* Unpublished */
.system-unpublished {
background: #e8edf1;
border-top: 4px solid #c4d3df;
border-bottom: 4px solid #c4d3df;
}

/* System Messages */
#system-message    { margin-bottom: 10px; padding: 0;}
#system-message dt { font-weight: bold; }
#system-message dd { margin: 0; font-weight: bold; text-indent: 30px; }
#system-message dd ul { color: #0055BB; margin-bottom: 10px; list-style: none; padding: 10px; border-top: 3px solid #84A7DB; border-bottom: 3px solid #84A7DB;}

/* System Standard Messages */
#system-message dt.message { display: none; }
#system-message dd.message {  }

/* System Error Messages */
#system-message dt.error { display: none; }
#system-message dd.error ul { color: #c00; background-color: #E6C0C0; border-top: 3px solid #DE7A7B; border-bottom: 3px solid #DE7A7B;}

/* System Notice Messages */
#system-message dt.notice { display: none; }
#system-message dd.notice ul { color: #c00; background: #EFE7B8; border-top: 3px solid #F0DC7E; border-bottom: 3px solid #F0DC7E;}

/* Debug */
#system-debug     { color: #ccc; background-color: #fff; padding: 10px; margin: 10px; }
#system-debug div { font-size: 11px;}

/* System Messages Detail: */
#system-message dd.message ul,
#system-message dd.error ul,
#system-message dd.notice ul {
        padding: 0;
        margin: 0;
}

#system-message dd.message ul li,
#system-message dd.error ul li,
#system-message dd.notice ul li {
        background: none;
        padding: 5px;
        margin: 0;
        color: #FFFFFF;
}

/* System Standard Messages */
#system-message dd.message ul {
        background: #006699;
        border: none;
}

/* System Error Messages */
#system-message dd.error ul {
        background: #BF0000;
        border: none;
}

/* System Notice Messages */
#system-message dd.notice ul {
        background: #EE9600;
        border: none;
}

解决有时 MyBlog 文本内容会把浏览器窗口严重拉宽问题(有些中文文本不折行)

编辑 templates/siteground/css/template.css 文件,在文件最后加入:

#myBlog-wrap div{
        max-width: 775px;
}

默认选中登陆模块的“Remember Me”选项

Siteground 模板覆盖了系统自带“Remember Me”模块的外观,因此如果想让登陆框默认选中免登陆,那么需要修改 templates/siteground/html/mod_login/default.php 文件(而不是系统默认模块的 modules/mod_login/tmpl/default.php 文件)的第 31 行,由

                        <input type="checkbox" name="remember" id="mod_login_remember" class="inputbox" value="yes" alt="<?php echo JText::_( 'Remember me' ); ?>" />

改为

                        <input type="checkbox" name="remember" id="mod_login_remember" class="inputbox" value="yes" alt="<?php echo JText::_( 'Remember me' ); ?>" checked="true" />

4.  性能优化

4.1  关于Joomla的性能调优

在做所有操作之前,首先到Module管理界面,确认所有模块的缓存选项都已经打开(在组件属性编辑里面的高级参数设置中),特别是mod_feed这种涉及远程内容获取的耗时模块。通常这是产生性能问题的最大瓶颈,而且不完成这一步,基本上其他优化都不会见到什么效果。

5.  重要组件

著名的组件参考文章:

5.1  社区组件 JomSocial

类似功能组件:

  • SuperGroups也是一个自建群组的组件,没有仔细研究它,只是觉得默认观感不如 JomSocial 舒服,所以还是直接选用了 JomSocial 。
  • Community Builder:与 JomSocial 齐名的社区组件,功能插件很多,但是安装配置比较零散,所以安装维护的易用性恐怕不如 JomSocial 。

基本安装

有时候明明安装过程都正常结束了,可是前台网页总说“Missing Jomsocial Zend Plugin Pack 1.”,这时候需要手工在后台安装 Zend 插件,因为刚才的自动安装过程没有成功。插件可以在 http://code.google.com/p/zend4joomla/downloads/list 下载。

界面汉化

参考文档:http://www.jomsocial.com/support/docs/item/873-how-to-setup-translation-language.html

前台汉化文件拷贝到 ~/language/zh-CN/ ,后台汉化文件拷贝到 ~/administrator/language/zh-CN/ 即可。如果界面出现“CC 什么什么”,那说明汉化文件版本比系统组件要旧,需要更新汉化文件了。

通过 Cron 定期发送邮件

参考文档:http://www.jomsocial.com/docs/Cron_Setup

crontab -e 中加入如下新行(每15分钟发送一次邮件):

 0-59/15 * * * * wget -O /dev/null "http://web.beautifulcn.org/index.php?option=com_community&task=cron" > /dev/null

两个字的真实名字没法注册的问题

修改 components/com_community/assets/validate-1.5.js (JomSocial 新版本貌似同时还得修改 validate-1.5.pack.js 文件),把其中的第 175 行左右,也即如下行中的数字 3 改掉即可:

                       if(joms.jQuery(el).hasClass('validate-name')){
                           //checking the string length
                           if(joms.jQuery(el).val().length < 3){
                                   this.setMessage(fieldName, '', 'CC NAME TOO SHORT');
                               isValid = false;
                           } else {
                               joms.jQuery('#err' + fieldName + 'msg').hide();
                                           joms.jQuery('#err' + fieldName + 'msg').html('&nbsp');
                               isValid = true;                     
                           }
                       }       

2.2.2 版本事件墙贴显示不全的问题

这个问题的起因是墙贴的分页功能没有正常工作。修改 components/com_community/views/events/view.html.php 文件,将它的第 59 行由

                        $limit          = $jConfig->get('list_limit');
改为
                        $limit          = JRequest::getVar( 'limit' , 10 , 'REQUEST' );
将它的第 85 行由
                                $output                 .= CWallLibrary::getWallContents( 'events' , $event->id , $event->isAdmin( $my->id ) , 0 , $limitstart , 'wall.content' ,'events,events');
改为
                                $output                 .= CWallLibrary::getWallContents( 'events' , $event->id , $event->isAdmin( $my->id ) , $limit , $limitstart , 'wall.content' ,'events,events');
即可。

这个补丁已经发布到官方支持论坛 Patch to repair pagination of event wall posts

用密码保护用户注册功能

目前 Joomla 没有使用邀请码来保护注册的机制( Members Only 组件可能是唯一的选择),本来JRPassphrase组件可以实现对注册页面的密码保护,可惜我没能安装配置成功。。

其他有用插件

已安装模块:

  • mod_activegroups
  • mod_latestdiscussion
  • mod_activitystream

已安装插件:

  • plg_myblog:MyBlog 集成插件。
  • plg_myblogtoolbar:在用户前台添加 MyBlog 工具栏的插件。
  • plg_jomcomment:JomComment 集成插件,一般和 JComment 两者总归得用一个,而后者和 JomSocial 的集成目前需要自己修改一些代码,没 JomComment 集成起来方便。
  • plg_jomsocialuser:当 Joomla 后台删除用户的时候,在 JomSocial 所有数据表中也删除这个用户,并且当用户登陆/注销的时候相应也调整他/她是否 active 的状态。
  • plg_invite:似乎是个生成邀请链接用的插件,但是没用明白。。

未安装插件:

  • plg_friendslocation:利用用户 Profile 中的定制字段在 Google 地图上显示好友地理位置的插件,不过怀疑只能支持国外的城市。
  • plg_latestphoto:显示一个用户上传的最新照片,不太确定这东西是否有用。
  • plg_myarticles:显示一个用户发布过的文章,感觉暂时用不上。
  • plg_wordfilter:恶意词汇过滤组件,现在架设的社区不公开对外,所以暂时用不上。

5.2  JomSocial 权限控制插件

  • JomSocial Profile Types:利用这玩意儿,可以实现会员制、群组或图册访问限制、权限细分控制等等功能,非常强大~唯一缺点是要收费,不过我认为这 49 美元还是很值的!

5.3  评论组件 Jom Comment

和 JComment 是同类组件,也几乎同样强大。只是在和 JomSocial 集成的时候不用像 JComment 那样手工改 php 文件,更为方便就是了~

中文长评论被截断问题

默认设置会自动截断比较长的中文内容,原因在于 Jom Comment 设置中的 Layout 部分的“Wrap long word”参数,改为空值禁用它就好了。

已登陆用户无法发表评论问题

已登陆用户在发表评论时会遇到错误信息“jomcomment This name has been registered. Please use other name.”(中文是:“這個帳號已經被其他人註冊了,請使用其他名稱註冊”),导致评论发表不上去。

这是垃圾评论过滤部分代码的一个 Bug ,最简单的绕过办法是编辑 /components/com_jomcomment/spamfilter.jomcomment.php 文件,将以下行注释掉(340-347行):

                # @rule: a guest cannot use registered user's email/name/username
                $query = sprintf("SELECT count(*) FROM #__users
                                                        WHERE username='%s' OR name='%s'"
, $this->_data->name, $this->_data->name);
                $db->query($query);
                $found = $db->get_value();
                if (($found > 0) && ($this->_data->name != $my->username) && ($this->_data->name != $my->name)) {
                        return $this->setWarning(_JC_USERNAME_TAKEN);
                }

这样其实是完全禁用了检查评论提交者书写的姓名是否和现有注册用户的名字重复的功能,会导致冒充他人进行评论,特别是在开启匿名用户评论的情况下,需要管理员进行比较细致的管理。

有时用户的 Profile 页面显示不出来的问题

有时 Profile 页显示不出来,而只是报一个类似下面这样的错误:

 
Fatal error: Call to a member function nameQuote() on a non-object in /Applications/xampp/xamppfiles/htdocs/joomla/plugins/community/jomcomment.php on line 279

这似乎是 Jom Comment 组件代码的一个 Bug 。编辑 /plugins/community/jomcomment.php 文件做如下修改即可。将第 279 行由

                        $sql  = '       SELECT  count('.$db->nameQuote('id').') as total'

改为

                        $sql  = '       SELECT  count('.$this->db->nameQuote('id').') as total'

5.4  项目管理组件 Projectfork

与 JomSocial 的集成

有个插件可以把 Projectfork 中的事件写入 JomSocial 的 Active Stream ,见 JomSocial / Projectfork Integration 。不过 Projectfork 的商业策略是核心程序开源,扩展组件收费,于是这个东西要 19 美元。

5.5  其他可能有用的组件

  • Geommunity:利用 Google Map 实现的社区内用户地理位置标记,可以和 JomSocial 和 Community Builder 良好集成,不过要价 19 欧元。。
    • User Maps插件分类下应该还有一些类似的功能组件。

6.  其他问题

6.1  关于Joomla中显示QQ在线状态

安装 mod_htmlcode 然后直接在代码里帖上以下获得的代码就可以了!

获得代码方法: 登陆QQ, QQ 的个人设置里, 个人资料栏下 有个 生成在线状态, 点击 后有向导哦。

GlossyBlue theme adapted by David Gilbert
Powered by PmWiki