首页 emlog教程 正文
  • 本文约1944字,阅读需10分钟
  • 4
  • 0

EMLOG Pro前端文章链接显示二级分类路径的处理方法

摘要

EMLOG Pro前端文章链接天然的只显示归属目录路径而不支持二级路径,今天我们来分享一下让EMLOG Pro前端文章链接显示如https://www.xxx.cn/abc/efg/1.html这种二级路径的的方法。

众所周知,无论是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在路径处理方面还存在其他的问题,比如目录路径不显示最后的斜杠、不支持三级分类目录等诸多问题,这可能和程序本身的设计理念有关,这里就暂时不研究这些问题了。

EMLOG Pro前端文章链接显示二级分类路径的处理方法

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

标签:emlog教程
评论
更换验证码
友情链接