我是Codeigniter的新手。我正在做一个项目,在每个页面中,我想包括一个显示多语言的下拉菜单。为此,我在另一个控制器的一个视图文件中包含一个视图文件:
<?php $this->load->view('language/alllang');?>
在 alllang.php 中,我想包含显示下拉列表的代码。为此,我使用以下代码创建了一个控制器 LanguageController :
<?php if (!defined('BASEPATH')) exit('No direct script access allowed');
class Language extends CI_Controller
{
function __construct()
{
parent::__construct();
$this->load->helper(array('form', 'url'));
$this->load->library('form_validation');
}
function alllang()
{
$data['val']="hhh"; // for testing
$this->load->view('alllang',$data);
exit;
}
}
alllang.php 的代码是:
<?php
echo $val;
?>
但是我收到这样的错误:
遇到PHP错误 严重性:通知
消息:未定义的变量:val
文件名:language / alllang.php
行号:2
此代码仅用于测试目的(不是多语言的代码)。如何设置要从控制器包含在视图文件中的值。
答案 0 :(得分:1)
你的解释有点令人困惑,但这样做
$this->load->view('language/alllang');
您没有调用控制器,只调用视图,而不传递任何数据。如果我做对了,你有一个父视图,然后在里面你想要一个语言下拉视图?那么,在这种情况下,应该使用数据数组调用下拉视图,并且数据应来自调用父视图的控制器。它有意义吗?
答案 1 :(得分:1)
已修改数据库访问功能:
你可以创建一个库文件并将其保存在应用程序/库中,称之为&#34; language_lib.php
&#34;:
<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Language_lib{
function __construct(){
$this->CI =& get_instance();
}
function lang_dropdown(){
//db queries:
$q = $this->CI->db->select('*')->from('table')->get()->result_array();
$html = … //your dropdown code here using $q
return $html;
}
}
接下来,在application / config / autoload.php中:
$autoload['libraries'] = array('language_lib');
现在在需要下拉的每个控制器方法中,例如索引方法:
function index(){
$data['dropdown'] = $this->language_lib->lang_dropdown();
$this->load->view('some_view', $data);
}
您可以使用<?php echo $dropdown; ?>