找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 1501|回复: 0

[分享] dede让文章页自动SEO内链 不需要插件

[复制链接]
发表于 2018-3-16 14:33:08 | 显示全部楼层 |阅读模式 来自 中国–河南–新乡
扯远了,说明天的重点“关键字内链”,其实DEDE之前考虑过这个问题的,但是有一些BUG。  DEDE后台里面 核心->批量维护->文档关键字维护  其实这个当时设计出来的时候就是用来做内链的。
dede让文章页自动SEO内链 不需要插件
但是你总发觉得它不怎么好用,总会出这样哪样的问题。但是我们只需要修改一部分代码就可以让DEDE自动替换关键字了,并且只是文档中只要出现了的都完全替换。
打开 /include/arc.archives.class.php 文件,在修改最后的两个方法,按下面的方法进行修改。 主要修改了ReplaceKeyword里面查询关键字的时候排序的算法,然后注释了一个判断

查看源码打印代码帮助
  
  1. /**
  2.      * 高亮问题修正, 排除alt title <a></a>直接的字符替换
  3.      *
  4.      * @param string $kw
  5.      * @param string $body
  6.      * @return string
  7.      */
  8.     function ReplaceKeyword($kw,&$body)
  9.     {
  10.         global $cfg_cmspath;
  11.         $maxkey = 5;
  12.         $kws = explode(",",trim($kw));    //以分好为间隔符
  13.         $i=0;
  14.         $karr = $kaarr = $GLOBALS['replaced'] = array();

  15.         //暂时屏蔽超链接
  16.         $body = preg_replace("#(<a(.*))(>)(.*)(<)(\/a>)#isU", '\\1-]-\\4-[-\\6', $body);

  17.         /*
  18.         foreach($kws as $k)
  19.         {
  20.             $k = trim($k);
  21.             if($k!="")
  22.             {
  23.                 if($i > $maxkey)
  24.                 {
  25.                     break;
  26.                 }
  27.                 $myrow = $this->dsql->GetOne("SELECT * FROM idea_keywords WHERE keyword='$k' AND rpurl<>'' ");
  28.                 if(is_array($myrow))
  29.                 {
  30.                     $karr[] = $k;
  31.                     $GLOBALS['replaced'][$k] = 0;
  32.                     $kaarr[] = "<a href='{$myrow['rpurl']}'><u>$k</u></a>";
  33.                 }
  34.                 $i++;
  35.             }
  36.         }
  37.         */
  38.         $query = "SELECT * FROM idea_keywords WHERE rpurl<>'' ORDER BY keyword DESC";
  39.         $this->dsql->SetQuery($query);
  40.         $this->dsql->Execute();
  41.         while($row = $this->dsql->GetArray())
  42.         {
  43.             $key = trim($row['keyword']);
  44.             $key_url=trim($row['rpurl']);
  45.             $karr[] = $key;
  46.             $kaarr[] = "<a href='$key_url' target='_blank'><u>$key</u></a>";
  47.         }

  48.         // 这里可能会有错误
  49.         $body = @preg_replace("#(^|>)([^<]+)(?=<|$)#sUe", "_highlight('\\2', \$karr, \$kaarr, '\\1')", $body);

  50.         //恢复超链接
  51.         $body = preg_replace("#(<a(.*))-\]-(.*)-\[-(\/a>)#isU", '\\1>\\3<\\4', $body);
  52.         return $body;
  53.     }


  54. }//End Archives

  55. //高亮专用, 替换多次是可能不能达到最多次
  56. function _highlight($string, $words, $result, $pre)
  57. {
  58.     global $cfg_replace_num;
  59.     $string = str_replace('"', '"', $string);
  60.     // if($cfg_replace_num > 0)
  61.     // {
  62.         // foreach ($words as $key => $word)
  63.         // {
  64.             // if($GLOBALS['replaced'][$word] == 1)
  65.             // {
  66.                 // continue;
  67.             // }
  68.             // $string = preg_replace("#".preg_quote($word)."#", $result[$key], $string, $cfg_replace_num);
  69.             // if(strpos($string, $word) !== FALSE)
  70.             // {
  71.                 // $GLOBALS['replaced'][$word] = 1;
  72.             // }
  73.         // }
  74.     // }
  75.     // else
  76.     // {
  77.         $string = str_replace($words, $result, $string);
  78. //   }
  79.     return $pre.$string;
  80. }
复制代码

发帖求助前要善用【论坛搜索】功能,那里可能会有你要找的答案;

如何回报帮助你解决问题的坛友,好办法就是点击帖子下方的评分按钮给对方加【金币】不会扣除自己的积分,做一个热心并受欢迎的人!

▶专业解决各类DiscuzX疑难杂症、discuz版本升级 、网站搬家 和 云服务器销售!▶有偿服务QQ 860855665 更多精品应用
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则 需要先绑定手机号

关闭

站长推荐上一条 /1 下一条

QQ|侵权投诉|广告报价|手机版|小黑屋|西部数码代理|飘仙建站论坛 ( 豫ICP备2022021143号-1 )

GMT+8, 2025-2-2 10:50 , Processed in 0.037895 second(s), 8 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表