我的codeigniter库出了问题。要将数据库数据转换为导航并具有活动元素,例如我构建了一个库类CI_Navigation()。 它工作得很好,我只有一个问题。
通常在网页上有一个相应但分开的导航,例如顶部的主导航和侧面的导航。为了解决这个问题,我可以用一个参数初始化我的类,告诉它该导航要保持哪个级别。 我会做这样的事情。
$this->load->library('Navigation');
$main = $this->navigation->build( array('levels'=>array(0)) );
$sub = $this->navigation->build( array('levels'=>array(1,2)) );
正如您可能认为它不起作用,因为类中的数据保持了第一次调用构建时分配的方式。
令人遗憾的是CodeIgniter中的库是单例(对吗?这就是我所读到的)。所以我不能将它初始化两次,如:
$this->load->library('Navigation','','main');
$this->load->library('Navigation','',sub);
你知道如何克服这个问题。
如果我将数组用于类中使用的变量,它应该可以工作吗? 例如。对于选项而不是使用$ this->选项,我必须动态创建$ this-> $ option [0],$ this-> $ option [1]。
这有用吗?我现在无法测试它,但今晚会这样做。但这不是一种非常优雅的方式,那么有更好的方法来解决这个问题吗?有什么方法可以多次初始化库吗?
先谢谢你们。
答案 0 :(得分:7)
如果你想坚持严格的CI库实现,那么我建议你让你的类参数成为一组配置;然后指定要在“构建”功能中使用的配置。
$options = array
(
'main' => array('level' => 0),
'sub' =>array('level' => 1)
);
$this->load->library('navigation', $options);
$main_nav = $this->navigation->build('main');
$sub_nav = $this->navigation->build('sub');
但是我常常为这类事情恢复标准对象:
$a_navigator = new Navigation($options_a);
$b_navigator = new Navigation($options_b);
$a_tree = $a_navigator->build();
$b_tree = $b_navigator->build();
unset($a_navigator);
unset($b_navigator);
答案 1 :(得分:0)
或者你也可以这样做:
$this->load->library('navigation');
$this->another_navigation = clone($this->navigation);