【CodeIgniter】ビューの同じ記述をまとめる(CakePHPっぽいエレメントの実装)

はじめに

この記事は CodeIgniter Advent Calendar 2017 5日目です。
4日目の記事は自分が投稿した『プロファイラを外部ファイル出力できるようにする』でした。

load->view でビューファイルからビューを呼び出す

ビュー — CodeIgniter 3.2.0-dev ドキュメント

/application/views/echo_test.php
<pre>
_________              .___        .___                  .__   __                   
\_   ___ \   ____    __| _/  ____  |   |   ____    ____  |__|_/  |_   ____  _______ 
/    \  \/  /  _ \  / __ | _/ __ \ |   |  / ___\  /    \ |  |\   __\_/ __ \ \_  __ \
\     \____(  <_> )/ /_/ | \  ___/ |   | / /_/  >|   |  \|  | |  |  \  ___/  |  | \/
 \______  / \____/ \____ |  \___  >|___| \___  / |___|  /|__| |__|   \___  > |__|   
        \/              \/      \/      /_____/       \/                 \/         
</pre>
<?= $temp; ?>

コントローラで使用されるイメージがあるかもしれない load->view ですが、たとえば上のようなビューの断片を用意したとき、下のようにすると別のビューファイルからでも呼び出してやることができます。

/application/views/welcome_message.php
<!-- 前略 -->
<?php $this->load->view('echo_test', ['temp' => 'echo test']); ?>
<!-- 後略 -->

echotest.png
今回はもう一歩進めてCakePHPっぽく、ビューの断片をelementフォルダにまとめることにします。

■ ビューの同じ記述をまとめる(CakePHPっぽいエレメントの実装)

1)CI_Loaderクラスを継承して関数elementを用意する

/application/core/MY_Loader.php
<?php

defined('BASEPATH') OR exit('No direct script access allowed');

class MY_Loader extends CI_Loader {

  public function element($view, $vars = array(), $return = false)
  {
    return $this->view('element/' . $view, $vars, $return);
  }

}

2)/application/views/にelementフォルダを作成して適当なファイルをでっちあげる

/application/views/element/echo_test.php
<pre>
        .__                                      __   
  ____  |  |    ____    _____    ____    ____  _/  |_ 
_/ __ \ |  |  _/ __ \  /     \ _/ __ \  /    \ \   __\
\  ___/ |  |__\  ___/ |  Y Y  \\  ___/ |   |  \ |  |  
 \___  >|____/ \___  >|__|_|  / \___  >|___|  / |__|  
     \/            \/       \/      \/      \/        
</pre>
<?= $temp; ?>

3)適当なビューにて呼び出してあげる

/application/views/welcome_message.php
<!-- 前略 -->
<?php $this->load->element('echo_test', ['temp' => 'echo test']); ?>
<!-- 後略 -->

echotest2.png

※このページのアスキーアートは Text to ASCII Art Generator (TAAG) で生成しました。
※この記事の記述はCodeigniterのスタイルガイドに沿っていません。phpdocがないのもごめんなさい。。。
※原則としてビューをロードする制御はコントローラで行うべきです。

おわり!