EMLOG Pro前端文章链接显示二级分类路径的处理方法
众所周知,无论是EMLOG还是EMLOG Pro的哪一个版本,前端文章链接天然的只显示第一级路径,而不支持二级路径,对于我们这些希望从别的CMS迁移到EMLOG的用户极不友好。
我之前也曾向那多大佬电邮寻求解决方案,得到的答复是暂时不提供这方面的解决方案,所以咱只能自己动手丰衣足食了。
可能我前面的表述并不准确,下面通过案例演示一下,希望可以描述的更加准确:
一、问题所在
设定文章一级目录为abc、二级目录是efg,那么,正常逻辑下:
二级目录下的文章链接应该是https://www.xxx.cn/abc/efg/1.html
但EMLOG Pro却无视路径规则,二级的文章链接只显示当前归属的目录,如下所示
二级目录下的文章链接实际是https://www.xxx.cn/efg/1.html
由此可见,EMLOG Pro在文章链接的处理上是极其不友好的,特别是和我一样在路径/代码方面有洁癖的人来说,简直就是一种折磨,现在我们就要动手去解决。
二、解决方案
这个问题,我们可以通修改 Url.php → 生成二级分类链接(只改 case 3)的方式来解决,具体如下:
1、打开/include/lib/Url.php
2、在第60-73行找到如下代码:
case '3': //分类
$Log_Model = new Log_Model();
$logInfo = $Log_Model->getDetail($blogId);
$sortName = isset($logInfo['sortname']) ? $logInfo['sortname'] : '';
$sortAlias = isset($logInfo['sort_alias']) ? $logInfo['sort_alias'] : '';
if (!empty($sortAlias)) {
$logUrl = BLOG_URL . $sortAlias . '/' . $blogId;
} elseif (!empty($sortName)) {
$logUrl = BLOG_URL . $sortName . '/' . $blogId;
} else {
$logUrl = BLOG_URL . $blogId;
}
$logUrl .= '.html';
peak;
3、将这行代码替换为
case '3': //分类
$Log_Model = new Log_Model();
$logInfo = $Log_Model->getDetail($blogId);
$sortName = isset($logInfo['sortname']) ? $logInfo['sortname'] : '';
$sortAlias = isset($logInfo['sort_alias']) ? $logInfo['sort_alias'] : '';
$sortId = isset($logInfo['sortid']) ? $logInfo['sortid'] : 0;
$CACHE = Cache::getInstance();
$sort_cache = $CACHE->readCache('sort');
$sortPath = '';
if($sortId && isset($sort_cache[$sortId])){
$current = $sort_cache[$sortId];
if($current['pid'] > 0 && isset($sort_cache[$current['pid']])){
$parent = $sort_cache[$current['pid']];
$p_alias = !empty($parent['alias']) ? $parent['alias'] : $parent['sortname'];
$c_alias = !empty($current['alias']) ? $current['alias'] : $current['sortname'];
$sortPath = $p_alias . '/' . $c_alias . '/';
} else {
$c_alias = !empty($current['alias']) ? $current['alias'] : $current['sortname'];
$sortPath = $c_alias . '/';
}
}
$logUrl = BLOG_URL . $sortPath . $blogId . '.html';
break;
三、实际效果
通过上述操作,我们就可以实现了EMLOG Pro前端文章链接显示二级路径的预期效果了。
四、其他问题
当然,EMLOG Pro在路径处理方面还存在其他的问题,比如目录路径不显示最后的斜杠、不支持三级分类目录等诸多问题,这可能和程序本身的设计理念有关,这里就暂时不研究这些问题了。

另外需要说明的是,以后每次升级系统,都需要重新按照步骤处理一遍,虽然麻烦点但人是舒服的。