2016-05-14 9 views
0

wp_head()のような関数を作成するには?wp_head()のような関数を作成するには?

ここで私は、次の3つの機能があります

  • add_css()を - headタグ
  • add_script()にCSSファイルを呼び出すために - 結果を表示する - headタグ
  • render_head()へのJavaScriptファイルを呼び出すために上記の関数の両方の関数

add_css("path/to/style.css")またはadd_script("path /to/javascript.js")をbodyタグやどこ、それはrender_head()を呼び出すことにより、headタグで次のようになります。

<link href ="path/to/style.css"> 
    <script src ="path/to/javascript.js"></script> 

私はそれそのようにするために何をすべきか?

+0

1が最初に作成しようとしないのはなぜ、多分あなたの試み、そのような何かを貼り付ける... – Rasclatt

+0

たぶんワードプレスカスタム関数? – claudios

+0

@Rasclatt私は試しましたが、私がそれらを見せようとしたときに現れるものは何もありません。 http://pastebin.com/fJkbws5v – int11

答えて

1

おそらくあなたはWordpressのような機能を作成します。質問は少し広範であり、主に意見に基づいているので、これを行う唯一の方法ではなく、多くのうちの1つです。

/classes/RenderEngine.php

class RenderEngine 
    { 
     // These are just some containers 
     private static $renderer; 
     private static $topage; 
     private static $headElement; 
     // This will save to a header array 
     public static function addToHeader($value,$type) 
      { 
       self::$renderer[$type][] = $value; 
      } 
     // This saves to a separate array that can be used to pull 
     // specific types of element 
     public static function saveTo($val,$type) 
      { 
       self::$headElement[$type] = $val; 
      } 
     // This assembles the css/js arrays and implodes the layout(s) 
     public static function getLayout() 
      { 
       if(!isset(self::$renderer)) 
        self::$renderer = array(); 

       ob_start(); 
       foreach(self::$renderer as $type => $val) { 
        if($type == 'js') 
         echo '<script type="text/javascript" src="'.implode('"></script>'.PHP_EOL.'<script type="text/javascript" src="',$val).'"></script>'.PHP_EOL; 
        elseif($type == 'css') 
         echo '<link rel="stylesheet" type="text/css" href="'.implode('" />'.PHP_EOL.'<link rel="stylesheet" type="text/css" href="',$val).'" />'.PHP_EOL; 
       } 
       self::$topage = ob_get_contents(); 
       ob_end_clean(); 

       return self::$topage; 
      } 
     // This will try and fetch any registered elements 
     public static function getElement($type) 
      { 
       return (!empty(self::$headElement[$type]))? self::$headElement[$type] : false; 
      } 
    } 

/functions/functions.php

// General function to add the layout array(s) 
function add_element($value,$type) 
    { 
     if(is_array($value)) { 
      foreach($value as $spot) 
       \RenderEngine::addToHeader($spot,$type); 
     } 
     else 
      \RenderEngine::addToHeader($value,$type); 
    } 
// Uses the element array to add css 
function add_css($value) 
    { 
     add_element($value,'css'); 
    } 
// Uses the element array to add js 
function add_script($value) 
    { 
     add_element($value,'js'); 
    } 
// This adds to our general array 
function add_header_title($value) 
    { 
     \RenderEngine::saveTo($value,'title'); 
    } 
// This renders the header 
function render_header() 
    { 
     // Start a buffer to cache the string 
     ob_start(); 
     // Don't store the html in the function, rather include it 
     include(__DIR__.'/../renderlib/render_header.php'); 
     // Save the string 
     $data = ob_get_contents(); 
     // Clear the buffer 
     ob_end_clean(); 
     // Return the layout string 
     return $data; 
    } 
を:Wordpressのは、これに似た何かがうまくいくかもしれないので、あなたが記述しているようにグローバルを使用するのが好き

/renderlib/render_header.php

<!DOCTYPE html> 
<html> 
<title><?php echo \RenderEngine::getElement('title'); // Retrieve stored element ?></title> 
<head profile="http://www.w3.org/2005/10/profile"> 
<meta name="viewport" content="width=device-width"> 
<?php echo \RenderEngine::getLayout(); // Render the css/js ?> 
</head> 

使用するには:

// Load relevant helpers 
require_once(__DIR__.'/classes/RenderEngine.php'); 
require_once(__DIR__.'/functions/functions.php'); 
// Add elements 
add_css(array('/file/test/style.css','/file/test/style2.css')); 
add_css('/file/test/style3.css'); 
add_script(array('/js/script.js','/js/script1.js')); 
add_script('/js/script2.js'); 
add_header_title('Page Title'); 
// Render header 
echo render_header(); 

はあなたを与える:

<!DOCTYPE html> 
<html> 
<title>Page Title</title> 
<head profile="http://www.w3.org/2005/10/profile"> 
<meta name="viewport" content="width=device-width"> 
<link rel="stylesheet" type="text/css" href="/file/test/style.css" /> 
<link rel="stylesheet" type="text/css" href="/file/test/style2.css" /> 
<link rel="stylesheet" type="text/css" href="/file/test/style3.css" /> 
<script type="text/javascript" src="/js/script.js"></script> 
<script type="text/javascript" src="/js/script1.js"></script> 
<script type="text/javascript" src="/js/script2.js"></script> 
</head> 
1

これは、よりエレガントな可能性がありますが、これは動作します:

<?php 

class Head { 
    public $tohead="<!DOCTYPE html>\n <html>\n <head>\n"; 
    public function addcss($css) { 
     $this->tohead .= "  <link rel='stylesheet' href='$css'>\n"; 
    } 

    public function addscript($js) { 
     $this->tohead .= "  <script type='text/javascript' src='$js'></script>\n"; 
    } 

    public function render() { 
     $this->tohead .= " </head>\n"; 
    } 
} 

$head = new Head; 
$head->addcss('/assets/css/my.css'); 
$head->addscript('/assets/js/my.js'); 
$head->render(); 
echo $head->tohead;