Я использую http://github.com/philsturgeon/codeigniter-template/ для шаблонов, и я пытаюсь загрузить другой вид контроллера в фактическое представление как частичное. Моя основная проблема заключается в том, что я не могу добавить метаданные (javascripts, css) с другого контроллера на главный контроллер.
приложение / ядро / MY_Loader.php
class MY_Loader extends CI_Loader { function __construct() { parent::__construct(); } function controller( $sController ) { global $RTR; // Parse the sController string ex: demo/index $aControllerData = explode( '/', $sController ); $sMethod = !empty( $aControllerData[1] ) ? $aControllerData[1] : 'index' ; $sController = !empty( $aControllerData[0] ) ? $aControllerData[0] : $RTR->default_controller ; $sClass = ucfirst( $sController ); $sPath = APPPATH . 'controllers/'; if ( !file_exists( $sPath . $sController . '.php' ) || class_exists( $sClass, FALSE ) ) { set_status_header( 503 ); exit( 'Unable to locate the specified class: '. ucfirst( $sController ).'.php' ); } $this->file( $sPath . $sController . '.php' ); $sClass = new $sClass; if ( !method_exists( $sClass, $sMethod ) ) { set_status_header( 503 ); exit( 'There is no Method: ' . $sMethod . ' in Class: '. ucfirst( $sController ).'.php' ); } $aArguments = func_get_args(); return call_user_func_array( array( $sClass, $sMethod ), array_slice( $aArguments, 1)); } } /* End of file MY_Loader.php */ /* Location: ./controllers/MY_Loader.php */
приложение / контроллеры / demo.php
<?php if ( !defined( 'BASEPATH' ) ) { exit( 'No direct script access allowed' ); } class Demo extends CI_Controller { function index() { $this->load->controller('welcome'); $this->template->set_partial('footer', 'partials/footer')->build('demo'); } } /* End of file welcome.php */ /* Location: ./controllers/demo.php */
приложение / контроллеры / welcome.php
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed'); class Welcome extends CI_Controller { public function index() { echo 'Loaded welcome controller'; $this->template->title('Welcome'); $this->template->append_metadata('<script src="/js/jquery.js"></script>'); $this->template->set_partial('footer', 'partials/footer')->build('welcome_message'); } }
После перехода на url localhost / demo у меня появился интерфейс с частичными, и все выглядит хорошо, но я вижу, что в моих журналах загружаются слишком много библиотек.
DEBUG - 2012-10-24 08:02:16 --> Database Driver Class Initialized DEBUG - 2012-10-24 08:02:16 --> User Agent Class Initialized DEBUG - 2012-10-24 08:02:16 --> Template Class Initialized DEBUG - 2012-10-24 08:02:16 --> Controller Class Initialized DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/controllers/welcome.php DEBUG - 2012-10-24 08:02:16 --> Database Driver Class Initialized DEBUG - 2012-10-24 08:02:16 --> User Agent Class Initialized DEBUG - 2012-10-24 08:02:16 --> Template Class Initialized DEBUG - 2012-10-24 08:02:16 --> Controller Class Initialized DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/partials/footer.php DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/views/welcome_message.php DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/layouts/main.php DEBUG - 2012-10-24 08:02:16 --> Helper loaded: inflector_helper DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/partials/footer.php DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/views/demo.php DEBUG - 2012-10-24 08:02:16 --> File loaded: /home/www/application/themes/default/views/layouts/main.php DEBUG - 2012-10-24 08:02:16 --> Final output sent to browser
Я пытался использовать HMVC, но был тот же результат.
Я нашел решение на https://github.com/EllisLab/CodeIgniter/pull/1818. Существует настоящий HMVC, и он работает. Надеюсь, что это будет включено в предстоящую версию CodeIgniter.
Результаты моих результатов показаны на изображениях. Контроллеры / demo.php
class Demo extends CI_Controller { public function index() { $this->load->controller('welcome'); $this->load->view('demo'); } }
Результаты http://img.ruphp.com/php/o_82a933c1f5.png