2012-11-08 86 views
0

我有问题给你。 我尝试添加到我的页面日历和日历中的一些事件。我知道如何在页面中加载日历,但我现在不知道如何自动在每个页面上加载此日历。CodeIgniter中的自动加载控制器

控制器:

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class Calendar extends CI_Controller { 

    function index() 
    { 
     $data = array(
       3 => 'Polska - Anglia', 
     ); 

     $this->load->library('calendar'); 

     $vars['calendar'] = $this->calendar->generate('', '', $data); 

     $this->load->view('main/calendar', $vars); 
    } 
} 

,并鉴于我打电话:

<?php echo $calendar;?> 

我用笨2.1.3

回答

-1

您可以通过更改application/config/autoload.php文件自动加载磁带库。

查找:

$autoload['libraries'] = array(); 

被替换:

$autoload['libraries'] = array('calendar'); 

要加载的所有网页相同的日历,我建议建立在application/core文件夹中的父控制器。

abstract class BaseController extends CI_Controller 
{ 
    protected $data; 

    public function __construct() 
    { 
     parent::__construct(); 
     $this->data = array();  

     $calendarData = array(
      3 => 'Polska - Anglia' 
     ); 

     $this->data['calendar'] = $this->calendar->generate('', '', $calendarData); 
    } 
} 

然后,您可以在所有控制器上扩展BaseController类。

class Calendar extends BaseController { 

    function index() 
    { 
     $this->load->view('main/calendar', $this->data); 
    } 
} 

一定要始终使用$this->data建设类的保护部件上。

最后,您的BaseController不会被自动加载,您可能不希望将它包含在任何地方。我建议你在自动加载或配置文件的末尾添加以下方法。

/** 
* Extra autoload function. Loads core classes automatically. 
* @param type $class The class to load. 
*/ 
function __autoload($class) 
{ 
    if (strpos($class, 'CI_') !== 0) 
    { 
     if (file_exists($file = APPPATH . 'core/' . $class . EXT)) 
     { 
      include $file; 
     } 
    } 
} 

这将允许你自动加载在你application/core文件夹您有任何类。这个解决方案可能看起来很复杂,但一旦安装完成。您可以在适用于所有页面的BaseController中添加功能,例如页眉和页脚等。

希望这会有所帮助!

+0

我试了一下,但这不行。我有错误消息:未定义变量:日历 – praashaad

+1

您是否试图在所有页面上输出日历(始终相同)? –

+0

是的,在每一页 – praashaad

2

而不是创建控制器日历,创建一个库类,然后将其添加到自动加载配置文件

class MyCalendar{ 

public function get() 
    { 
     $CI =& get_instance(); 
     $data = array(
       3 => 'Polska - Anglia', 
     ); 

     $CI->load->library('calendar'); 

     return $CI->calendar->generate('', '', $data); 
    } 
} 

添加这个库自动加载文件,然后你可以使用下面的语句,你想要的任何地方调用它。

$data['calendar'] = $this->MyCalendar->get(); 
+0

我添加了这段代码,现在我有错误:'消息:未定义的属性:CI_Loader :: $ MyCalendar'我打电话:'$ data ['calendar'] = $ this-> MyCalendar-> get(); echo $ calendar;' – praashaad

+1

@marcin_poland您必须使用小写版本。 '$ this-> mycalendar-> get();'这是在使用你自己的类的时候写的(http://codeigniter.com/user_guide/general/creating_libraries.html)。 –