[텍스트큐브] 보람말(태그) 목록의 개수 제한 풀기
텍스트큐브에서는 아래 두 곳에서 전체 보람말 목록을 볼 수 있다.
- 블로그 주소/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();
덧글을 달아 주세요