You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
97 lines
3.9 KiB
97 lines
3.9 KiB
<?php
|
|
defined('BASEPATH') OR exit('No direct script access allowed');
|
|
/**
|
|
*
|
|
* HookPostControllerConstructor.php
|
|
*
|
|
* 컨트롤러가 인스턴스화 된 직후 가동되는 후킹 클래스.
|
|
*
|
|
*/
|
|
|
|
class HookDisplayOverride {
|
|
|
|
function init()
|
|
{
|
|
$this->CI =& get_instance();
|
|
$output = !( $this->CI->uri->segment(1) == 'rss' OR strpos($this->CI->uri->segment(1), "sitemap") !== FALSE ) ? $this->set_layout( $this->CI->output->get_output() ) : $this->CI->output->get_output();
|
|
$this->CI->output->_display($output);
|
|
}
|
|
|
|
function set_layout($output)
|
|
{
|
|
if( PAGE_AJAX OR PAGE_INSTALL OR $this->CI->theme === FALSE ) return $output;
|
|
|
|
// Script Tag를 모두 가져와서 body 밑으로
|
|
preg_match_all("/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/", $output, $matches);
|
|
$output = preg_replace("/<script\\b[^>]*>([\\s\\S]*?)<\\/script>/","", $output);
|
|
|
|
$foot = "";
|
|
$foot .= $this->CI->site->display_js() . PHP_EOL;
|
|
foreach($matches[0] as $match) $foot .= $match;
|
|
|
|
// 구글애널리틱스 코드가 있다면?
|
|
//if( IS_AJAX_REQUEST && ! IS_ADMIN_PAGES && ! $this->CI->agent->is_robot() && ! $this->CI->member->is_super() )
|
|
if( ! PAGE_AJAX && ! PAGE_ADMIN && ! $this->CI->agent->is_robot() )
|
|
{
|
|
$foot .= (! empty($this->CI->site->config('extra_tag_script')) ) ? $this->CI->site->config('extra_tag_script').PHP_EOL : '';
|
|
}
|
|
|
|
// 사이트 채널 연동
|
|
$channel = array();
|
|
$channel_type_array = array('facebook','instagram','itunes','naver_blog','naver_cafe','naver_pholar','naver_post','naver_storefarm','playstore');
|
|
$channel_type = $this->CI->site->config('channel_type') == 'Organization' ? 'Organization' : 'Person';
|
|
foreach($channel_type_array as $c)
|
|
{
|
|
if( $this->CI->site->config('channel_'.$c) ) $channel[] = $this->CI->site->config('channel_'.$c);
|
|
}
|
|
if( count($channel) > 0 )
|
|
{
|
|
$channel_arr = array(
|
|
"@context" => "http://schema.org",
|
|
"@type" => $channel_type,
|
|
"name" => $this->CI->site->config('site_title'),
|
|
"url" => base_url(),
|
|
"sameAS" => $channel
|
|
);
|
|
|
|
$foot .= '<script type="application/ld+json">'.PHP_EOL;
|
|
$foot .= json_encode($channel_arr, JSON_UNESCAPED_SLASHES|JSON_UNESCAPED_UNICODE).PHP_EOL;
|
|
$foot .= '</script>';
|
|
}
|
|
|
|
$foot .= "<script src='".base_url('helptool/lang')."'></script>";
|
|
|
|
$foot .= '</body>'.PHP_EOL;
|
|
$foot .= '</html>';
|
|
|
|
$output = str_replace("</body>", $foot.PHP_EOL."</body>", $output);
|
|
|
|
// Html minify
|
|
ini_set("pcre.recursion_limit", "16777");
|
|
$re = '%# Collapse whitespace everywhere but in blacklisted elements.
|
|
(?> # Match all whitespans other than single space.
|
|
[^\S ]\s* # Either one [\t\r\n\f\v] and zero or more ws,
|
|
| \s{2,} # or two or more consecutive-any-whitespace.
|
|
) # Note: The remaining regex consumes no text at all...
|
|
(?= # Ensure we are not in a blacklist tag.
|
|
[^<]*+ # Either zero or more non-"<" {normal*}
|
|
(?: # Begin {(special normal*)*} construct
|
|
< # or a < starting a non-blacklist tag.
|
|
(?!/?(?:textarea|pre|script)\b)
|
|
[^<]*+ # more non-"<" {normal*}
|
|
)*+ # Finish "unrolling-the-loop"
|
|
(?: # Begin alternation group.
|
|
< # Either a blacklist start tag.
|
|
(?>textarea|pre|script)\b
|
|
| \z # or end of file.
|
|
) # End alternation group.
|
|
) # If we made it here, we are not in a blacklist tag.
|
|
%Six';
|
|
$newOutput = preg_replace($re, "", $output);
|
|
if( $newOutput === null) {
|
|
$newOutput = $output;
|
|
}
|
|
|
|
return $newOutput;
|
|
}
|
|
}
|