티스토리 뷰

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/**
* @brief 본문 내 적절한 배너 삽입 위치 분석 후 [AD] 표식을 심음
* @author darthJun (itzone.tistory.com)
* @date 2015-07-16
*/
function injectBannerSignToContent($content)
{
    // 본문 문단 구분 < br > < br > 로 가정. 미니위니 에디터가 이러함
    $paragraphs = preg_split("/<br\s?\/?><br\s?\/?>/i", $content);
 
    $paragraphCount = count($paragraphs); // 문단 수
 
    $weight = 0;        // 문단의 텍스트 가중치
    $weights = array(); // 문단별 텍스트 가중치
     
    // 문단들 텍스트 가중치 측정
    for($i=0; $i < $paragraphCount; $i++) {
        $p = trim($paragraphs[$i]);
         
        if (preg_match('/(<center|<iframe|<table|<img)/i', $p)) {
            $weight = 0;
            $weights[$i] = $weight;
        } else {
            ++$weight; // 일단 가중치는 추가
            if ($weight >= 2) { // 가중치가 2 이상이면
                // 하위 가중치들 가중치먹임
                for($j=($i-1); $j > 0; $j--) {
                    if ($weights[$j] < 1) break;
                    $weights[$j] += 1;
                }
                // 자신의 가중치는 일단 추가 전 가중치로
                $weights[$i] = --$weight;
            } else {
                $weights[$i] = $weight;
            }
        }
    }
 
    //print_r($weights); exit();    // 문단별 가중치 점수 디버깅
     
    $isFirst = false;
    $max_weight = max($weights);
    $result = "";
    for($i=0; $i < $paragraphCount; $i++) {
        $cssClass = "p{$i}";
 
        // 가장 위 배너 삽입 위치
        if (!$isFirst && $weights[$i] == 2) {
            $isFirst = true;
 
            $cssClass .= " adver";
            $paragraphs[$i] = "<!--[AD]-->". $paragraphs[$i];
        }
        // 가장 적절한 배너 삽입 위치
        if ($max_weight == $weights[$i]) {
            $cssClass .= " adver";
            $paragraphs[$i] = "<!--[AD]-->". $paragraphs[$i];
        }
 
        $result .= '<p class="'. $cssClass .'">'. $paragraphs[$i] .'</p>';
    }
 
    return $result;
}


댓글