[텍스트큐브] 보람말(태그) 목록의 개수 제한 풀기

  텍스트큐브에서는 아래 두 곳에서 전체 보람말 목록을 볼 수 있다.

  • 블로그 주소/tag
  • 관리자 화면의 '태그 관리'

  이 두 곳에 나오는 보람말(태그, tag) 개수는 2000개로 제한이 걸려 있다. 보람말 수가 2000개가 넘으면 부호값 차례에서 밀린 보람말들이 목록 화면에 나타나지 않는다.

글걸이의 텍스트큐브 보람말 목록 (태그 목록)
글걸이의 텍스트큐브 보람말 목록 (태그 목록)

  이 제한을 풀려면 /library/model/blog.tag.php에 들어간 getSiteTags 함수를 고쳐 준다.

function getSiteTags($blogid) {
global $database;
if (doesHaveOwnership())
$names = POD::queryAll("SELECT t.id, name FROM {$database['prefix']}Tags t,
{$database['prefix']}TagRelations r
WHERE t.id = r.tag AND r.blogid = $blogid
GROUP BY r.tag, t.id, name
ORDER BY t.name ASC
LIMIT 2000");
else
$names = POD::queryAll("SELECT t.id, t.name FROM {$database['prefix']}Tags t,
{$database['prefix']}TagRelations r,
{$database['prefix']}Entries e
WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.blogid = $blogid
GROUP BY r.tag, t.id, t.name
ORDER BY t.name ASC
LIMIT 2000");
if(!empty($names)) return $names;
else $names = array();
return $names;
}

  보람말 목록을 가져오는 SQL 물음글에서 LIMIT 2000의 수를 20000 이상으로 늘릴 수도 있고, LIMIT 2000을 지우거나 아래처럼 주석문으로 만들면 보람말 개수 제한이 아주 풀린다.

function getSiteTags($blogid) {
global $database;
if (doesHaveOwnership())
$names = POD::queryAll("SELECT t.id, name FROM {$database['prefix']}Tags t,
{$database['prefix']}TagRelations r
WHERE t.id = r.tag AND r.blogid = $blogid
GROUP BY r.tag, t.id, name
ORDER BY t.name ASC");
//LIMIT 2000");
else
$names = POD::queryAll("SELECT t.id, t.name FROM {$database['prefix']}Tags t,
{$database['prefix']}TagRelations r,
{$database['prefix']}Entries e
WHERE r.entry = e.id AND e.visibility > 0 AND t.id = r.tag AND r.blogid = $blogid
GROUP BY r.tag, t.id, t.name
ORDER BY t.name ASC");
//LIMIT 2000");
if(!empty($names)) return $names;
else $names = array();
return $names;
}

  보람말을 꺼내오는 개수에 제한이 걸린 까닭은 웹 서버의 자료기지(DB)에 너무 큰 짐이 걸리지 않게 하려는 것에 있었을 것이다. 보람말이 매우 많으면 제한을 풀고 나서 보람말 목록이 늦게 뜨거나 오류가 날 수도 있으므로, 문제가 없는지 살필 필요가 있다. 텍스트큐브의 페이지 캐시 기능을 켜 두면 보람말 목록을 자료기지에서 꺼내는 때를 줄여서 웹 서버에 걸리는 짐을 줄일 수 있다.

  '블로그 주소/tag'에서 손님에게 보이는 목록과 관리자에게 보이는 목록이 다를 수 있는데, 현재 텍스트큐브는 두 목록을 이름이 같은 캐시 파일에 기록하는 문제가 있다.

(2022.9.5 고침)

  이를 막으려면, /interface/common/blog/siteTags.php의 23째 줄을 고쳐 준다.

	if(isset($cache)) {
$cache->contents = $tagView;
$cache->update();
}

	if(isset($cache)) {
$cache->contents = $tagView;
$cache->update(doesHaveOwnership() ? 'owner' : 'guest');
}

 

  이를 막으려면, /interface/blog/tag.php의 74째 줄을 다음처럼 고쳐 준다.

$cache->reset();
$cache->name = 'tagPage';

$cache->reset();
$cache->name = doesHaveOwnership() ? 'tagPageOwner' : 'tagPage';

  그리고 보람말이 들어오거나 빠졌을 때에 관리자에게 보이는 보람말 목록을 캐시 파일이 함께 바뀌게 하기 위해 /framework/legacy/Needlworks.Cache.PageCache.php의 flushTag 함수에도 내용을 더해 준다.

  $cache->reset();
$cache->name = 'tagPage';
$cache->purge();

  $cache->reset();
$cache->name = 'tagPage';
$cache->purge();
$cache->reset();
$cache->name = 'tagPageOwner';
$cache->purge();
글 걸기 주소 : 이 글에는 글을 걸 수 없습니다.

덧글을 달아 주세요