본문 바로가기
개발의 기록/Server

PHP Page Class - 최상위 Page 클래스 설계

by prographer J 2011. 6. 28.
728x90
잡담: PHP공부는 처음이라 성능은 장담 못해요~

개요: PHP에서 사용 할 Page 클래스를 만듬.
        이 클래스는 상속 받아서만 사용 할 수 있다. 

함수

  • Create() : 함수 생성 부분 final로 선언하여 override 할 수 없게 한다.
    meta() : 메타 태그 생성(0628 함수명 변경)
    title():타이틀 설정(0628 함수명 및 기능 변경)

    favicon(): 파비콘 설정 (0628 생성)
    keyword(): 키워드 지정(0628 생성)
    description():설명 지정(0628 생성)

    add_to_css_linked($array_css_linked) : css 링크 생성
    add_to_js_linked($array_js_linked) : javascript링크 생성 
    header(): header에 추가 될 부분을 override해서 사용 
    content(): content에 추가 될 부분을 override해서 사용  



<?php 
class Page{
private $meta;
protected $title;
protected $doctype;
private $description;
private $keywords;
private $favicon;
private $css_linked;
private $js_top_linked;
private $js_btm_linked;
public function __construct($title=''){
if(!empty($title))
$this->title = $title;
elseif(defined('SITE_NAME'))
$this->title = SITE_NAME;
$this->meta = <<< EOD
<meta http-equiv="Content-Type" content="text/html; charset-utf-8" />
EOD;
$this->doctype = <<< EOD
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
EOD;
}
final public function Create(){
return <<< EOD
$this->doctype
<html>
<head>
$this->meta
<meta name="description" content="{$this->description}" />
    <meta name="keywords" content="{$this->keywords}" />
<title>{$this->title}</title>
$this->favicon
$this->css_linked
$this->js_top_linked
{$this->header()}
</head>
<body>
{$this->body()}
$this->js_btm_linked
</body>
</html>
EOD;
}
/**
* 메타태그 추가
* @param string $name
* @param string $content
*/
public function meta($name, $content){
if(!empty($name) && !empty($content)){
$this->meta .= <<< EOD
<meta name="{$name}" content="{$content}" />
EOD;
}
}
/**
* 파비콘 설정
* @param string $favicon_src
*/
public function favicon($favicon_src){
$this->favicon = "<link rel=\"shortcut icon\" type=\"image/x-icon\" href=\"{$favicon_src}\" />";
}
/**
* 페이지 타이틀 설정
* @param string $title
*/
public function title($title=''){
if(!empty($title)) $this->title=$title;
return $this->title;
}
/**
* 디스크립션 지정 없을 경우 타이틀로 설정
* @param string $description
*/
public function description ($description = '') {
    if(empty($description)) $description = $this->title;
$this->description = $description;
return $this->description;
}

/**
* 키워드 지정 없을 경우 타이틀로 키워드 설정
* @param string $keywords
*/
public function keywords ($keywords = '') {
if(empty($keywords)) $keywords = $this->title;
$this->keywords = $keywords;
return $this->keywords;
}
/**
* css추가
* @param array $array_css_linked : {href:'',media:'all/handset/etc'}
*/
public function add_to_css_linked($array_css_linked){
if(empty($array_css_linked)) return "";
if(!is_array($array_css_linked))
$array_css_linked = array($array_css_linked);
foreach ($array_css_linked as $css) {
if(empty($css["media"])){
$css["media"]="all";
}
$this->css_linked .= "<link rel=\"stylesheet\"  type=\"text/css\" href=\"{$css["href"]}\" media=\"{$css["media"]}\"/>";
}
}
/**
* js추가
* @param array $array_js_linked : {is_top:true/false,src:''}
*/
public function add_to_js_linked($array_js_linked){
if(empty($array_js_linked)) return "";
if(!is_array($array_js_linked))
$array_js_linked = array($array_js_linked);
foreach ($array_js_linked as $js) {
if(empty($js["is_top"])) $js["is_top"]=false;
if($js["is_top"])
$this->js_top_linked .= "<script type=\"text/javascript\" src=\"{$js["src"]}\" ></script>";
else 
$this->js_btm_linked .= "<script type=\"text/javascript\" src=\"{$js["src"]}\" ></script>";
}
}
/**
* 헤더를 오버라이드 하는 부분
*/
public function header(){
}
/**
* 바디를 오버라이드 하는 부분
*/
public function body(){
}
}
?>
728x90

댓글