MetInfo5.3使用中遇到的一些坑

kano个人技术博客 php教程 755 次浏览 没有评论

MetInfo现在已经更新到了6.1.3,不过kano个人博客使用它套的一些老站还是用的5.3版本,MetInfo是一个方便易学的CMS系统,很快就能上手,但是其中也有一些不完善的地方,这篇文章记录一下kano曾经踩过的雷。

一、上传图片路径

在metinfo中,文章中所上传的图片都是以绝对路径的形式保存的,如这样:

metinfo

平时倒是没有什么不好,但在将项目从测试地址部署到正式地址,或是从某一个域名迁移到另一个域名的时候,其中的图片就无法显示的。所以在每次需要迁移的时候,需要先将sql导出,然后手动的将原本的域名替换成新的域名,这样图片才能正常显示。

(不知这么设计是出于何种考虑,如果是考虑外部的图片的话,那么外部的图片使用绝对路径,而本地上传的图片使用相对路径就好了。)

MetInfo

二、多语言

metinfo本身是个支持多语言的cms,所以当你要做的项目要有中文、英语两个版本的时候就很方便了,然而世界并没有这么美好,metinfo的多语言有两个问题存在:

1. 栏目

metinfo对于不同语言的内容分的很开,当你建立好中文的栏目,然后将语言切换到英文的时候,会发现栏目中是空的——也就是说不同语言栏目完全是不同的栏目,他们的栏目id页不一样。

设计成这样或许是考虑不同语言的内容本身就有有所区别,所以将栏目分开可以更灵活。但是在kano接手的项目中基本都是多语言的网站的内容结构完全相同,只是语言不同而已,如果出于灵活性的考虑,起码应该设置一个“多语言栏目相关联”的选项更好一些,现在这样在某些需要判断特定栏目的操作的地方十分的不方便。

2. 自定义标签

虽然多语言的栏目是完全分开的,但是自定义标签却是公用的——只是值不一样。这很好,但是其中却有一个令人恼火的bug:当你已经定义好所有的自定义标签,并在外观中给他们设置了值,这个时候你发现某个地方还需要设置一个自定义标签,于是你在后台添加了一个自定义标签,保存——神奇的事情发生了!其他语言的自定义标签的值全都变成了你新增自定义标签时所在语言的值,于是你不得不把所有其他语言的自定义标签值重新填写一遍。

我的建议是:一定要在最开始确定好所有要添加的自定义标签,这样你就可以避开这个bug了。

cms系统

三、php版本

老实说这个不算是metinfo的问题了,但是kano曾经因为在php7的环境下部署metinfo5.3,网站变成了一篇大白板,所以在这里记录一下:metinfo所支持的版本只有php5。

四、时间正序

一般来说我们获取文章列表的顺序都是时间倒叙,但有的需求中还是需要文章以正序获得的,然而在metinfo的获取文章列表函数methtml_getarray中,只有时间倒叙。解决方法是按时间倒叙,然后listmx设置一个很大的数以获取所有文章,然后再使用php函数array_reverse让数组元素反转,再截取出需要的文章就可以了。

五、上一页下一页

metinfo没有提供很常用的上一页下一页功能,这里我自己写了一个:

// 上一篇下一篇
$column_all = methtml_getarray($classnow, null, null, null, 10000, null, 1, 1 );
//print_r($column_all);
foreach ($column_all as &$val) {
    $val['url'] = str_replace('-cn', '', $val['url']);
    unset($val);
}
foreach ($column_all as $key => $val) {
    if ($val['id'] == $news['id']) {
        $now_index = $key;
        break;
    }
}
if ($now_index === 0) {
    $prev = '<span style="color: red;">没有了</span>';
    $next = '<a href="' . $column_all[$now_index + 1]['url'] . '">' . $column_all[$now_index + 1]['title'] . '</a>';

    $next_id = $column_all[$now_index + 1]['id'];
} else if ($now_index === count($column_all) - 1) {
    $prev = '<a href="' . $column_all[$now_index - 1]['url'] . '">' . $column_all[$now_index - 1]['title'] . '</a>';
    $next = '<span style="color: red;">没有了</span>';

    $prev_id = $column_all[$now_index - 1]['id'];
} else{
    $prev = '<a href="' . $column_all[$now_index - 1]['url'] . '">' . $column_all[$now_index - 1]['title'] . '</a>';
    $next = '<a href="' . $column_all[$now_index + 1]['url'] . '">' . $column_all[$now_index + 1]['title'] . '</a>';

    $prev_id = $column_all[$now_index - 1]['id'];
    $next_id = $column_all[$now_index + 1]['id'];
}

其中的“$prev”和“$next”是已经拼接好的上一页下一页的a标签,大家有需要可以拿走。

kano个人技术博客暂时讲到这些,以后想到再补充。

发表评论

电子邮件地址不会被公开。 必填项已用*标注

Go