亚洲一区2区三区|2020国产无码|日本视频9999|欧美三区四区四区区|超碰小说人人爽亚洲|国产精品3P电影|亚洲综合无码色区|久久tlri深 射|在线免费有码视频|久艹精品中文在线

 找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

查看: 5449|回復(fù): 0
打印 上一主題 下一主題

解決Discuz關(guān)聯(lián)鏈接無法嵌套的問題

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
發(fā)表于 2013-11-9 10:53:11 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
Discuz的關(guān)聯(lián)鏈接一直有個(gè)頭疼的問題:關(guān)聯(lián)鏈接沒法嵌套,顯示異常。
例如下面的關(guān)鍵詞:
較短詞語:汽車改裝 http://wangaiche.com
較長詞語:汽車改裝店 http://www.beclighting.com.cn/dian
就無法顯示成功,只能顯示較短的一個(gè),并且會(huì)出現(xiàn)亂碼。
為了解決這個(gè)問題,我們把代碼調(diào)整了一下,主要涉及2個(gè)文件:
1、source/function/cache/cache_relatedlink.php
2、source/class/helper/helper_seo.php

代碼修改:
1、cache_relatedlink.php
將原來的代碼注釋,修改成未注釋的代碼,目的是將關(guān)聯(lián)詞語按照長度排序,讓長詞在前面(顯示邏輯)
  1. //$query = C::t('common_relatedlink')->range(0, 0, 'length(name)');
  2. $query = DB::fetch_all('SELECT * FROM '.DB::table('common_relatedlink').' order by length(name) DESC');
復(fù)制代碼
2、helper_seo.php
解釋:
原來的代碼在處理嵌套的時(shí)候,只替換了一次,會(huì)導(dǎo)致后面詞語替換的時(shí)候,將已經(jīng)替換好的代碼清除掉。
我們中間用了一個(gè)臨時(shí)的不會(huì)沖突的代碼做過渡,這樣替換以后,就不會(huì)影響了。
找到函數(shù):
  1. public static function parse_related_link($content, $extent) {
復(fù)制代碼
整個(gè)替換為以下代碼:
  1. public static function parse_related_link($content, $extent) {
  2.                 global $_G;
  3.                 loadcache('relatedlink');
  4.                 $allextent = array('article' => 0, 'forum' => 1, 'group' => 2, 'blog' => 3);
  5.         if($_G['cache']['relatedlink'] && isset($allextent[$extent])) {
  6.             $searcharray = $replacearray = array();
  7.             $fixedcode_array = $search_fixedcode_array = array();
  8.             $index = 0;
  9.             foreach($_G['cache']['relatedlink'] as $link) {
  10.                 $link['extent'] = sprintf('%04b', $link['extent']);
  11.                 if($link['extent'][$allextent[$extent]] && $link['name'] && $link['url']) {
  12.                     $searcharray[$link[name]] = '/('.preg_quote($link['name']).')/i';
  13.                     $fixed_code = 'AAABBBCCC['.$index.']'.'XXXYYYZZZ';
  14.                     $fixedcode_array[$link[name]] = $fixed_code;
  15.                     $search_fixedcode_array[$link[name]] = '/('.preg_quote($fixed_code).')/i';
  16.                     $replacearray[$link[name]] = "<a href="$link[url]" target="_blank" class="relatedlink" title="$link[name]">$link[name]</a>";
  17.                     $index += 1;
  18.                 }
  19.             }
  20.             if($searcharray && $replacearray) {
  21.                 $_G['trunsform_tmp'] = array();
  22.                 $content = preg_replace("/(<script\s+.*?>.*?<\/script>)|(<a\s+.*?>.*?<\/a>)|(<img\s+.*?[\/]?>)|(\[attach\](\d+)\[\/attach\])/ies", "helper_seo::base64_transform('encode', '<relatedlink>', '\\1\\2\\3\\4', '</relatedlink>')", $content);
  23.                 $content = preg_replace($searcharray, $fixedcode_array, $content, 1);
  24.                 $content = preg_replace($search_fixedcode_array, $replacearray, $content, 1);
  25.                 $content = preg_replace("/<relatedlink>(.*?)<\/relatedlink>/ies", "helper_seo::base64_transform('decode', '', '\\1', '')", $content);
  26.             }
  27.         }
  28.                 return $content;
  29.         }
復(fù)制代碼
管理后臺(tái),更新緩存,添加2個(gè)嵌套的詞語進(jìn)行測(cè)試,看看效果。

北京途寧網(wǎng)絡(luò) 版權(quán)所有© 2011-2021 京ICP備12025735號(hào)-24 

京公網(wǎng)安備 11010502030663號(hào)

GMT+8, 2025-5-8 07:41 , Processed in 0.028649 second(s), 25 queries .

快速回復(fù) 返回頂部 返回列表