티스토리 뷰

/**
* @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] = "". $paragraphs[$i];
		}
		// 가장 적절한 배너 삽입 위치
		if ($max_weight == $weights[$i]) {
			$cssClass .= " adver";
			$paragraphs[$i] = "". $paragraphs[$i];
		}

		$result .= '

'. $paragraphs[$i] .'

'; } return $result; }


댓글