定义自定义变量并直接调用视图部分中的变量

时间:2012-11-22 08:43:01

标签: php codeigniter

我想要做的是在my_custom_settings.php目录中创建config之类的文件,并在视图部分调用已定义的变量。

让我们说my_custom_settings.php

define('TEMPLATE_DIR', 'assets/front');

并在视图中直接以HTML格式显示:

<link href="<?=TEMPLATE_DIR?>/stylesheet/style.css">

或任何其他替代解决方案??

PS:现在我正在使用base_url()来访问路径

3 个答案:

答案 0 :(得分:1)

我亲自扩展/core/helpers/url_helper.php,默认值为site_url() , base_url(), current_url();等...我只是扩展了base_static_url();

所以放入core / helpers / url_helper.php:

if ( ! function_exists('base_static_url'))
{
    function base_static_url()
    {
        $CI =& get_instance();
        return $CI->config->slash_item('base_static_url');
    }
}

然后在config.php文件中添加1行:

$config['base_url'] = "http://mysite.com/";
$config['base_static_url'] = "http://mysite.com/static/"; //path to your static resources folder

然后您可以使用以下方法调用静态资源:

<img src="<?php echo base_static_url();?>img/myimage.png"/>

答案 1 :(得分:1)

好的,这可能比您正在寻找的更多, 但这是一种将网站范围的配置放在一个文件中,然后轻松将它们提供的方法

在配置文件夹中

你有文件:my_custom_settings.php

在该文件中,您要设置如下的配置值:

$config['TEMPLATE_DIR'] = 'assets/front' ;
$config['site_slogan'] = 'Laravel? Never heard of it' ;

创建另一个名为My_custom_settings.php

的文件

将该文件放入:application / library / My_custom_settings.php 该文件将包含:

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

function __construct($config = array() )
{
foreach ($config as $key => $value) {
    $data[$key] = $value;    
    }
//  makes it possible for CI to use the load method 
$CI =& get_instance();
//  load the config variables
$CI->load->vars($data);
}
} // end my custom settings

现在在您的控制器构造函数

public function __construct() {
    parent::__construct();

// Load configs for controller and view
    $this->load->library( 'my_custom_settings' );
    $this->config->load( 'my_custom_settings' );


} // end construct 

现在,对于很酷的部分 - 您在该配置文件中放置的任何内容都将可用于您的控制器和视图。 (您也可以在模型构造函数中加载配置)。

在控制器或模型中,您可以使用$ this-&gt; config获取值,例如

$this->config->item( 'site_slogan' )

有点尴尬,但对于观看,继承人的奖励,你只需要配置名称

echo $TEMPLATE_DIR . '/somefile' ;

答案 2 :(得分:0)

图片,css,javascript,pdfs,xml ......任何允许直接访问的内容都不应该存在于您的应用程序目录中。你可以做到,但你真的不应该这样做。在目录的根目录下为这些文件创建一个新文件夹,它们不应混合到您的应用程序中,例如:在您的views文件夹中。

  1. 有可能,你正在使用.htaccess文件,它只允许通过http访问某些目录。出于安全原因,这非常好,您希望停止任何直接访问控制器和模型的尝试。这也是我们检查BASEPATH是否定义在大多数文件顶部的原因,并退出('无直接脚本访问。'),如果没有。

  2. 要获取这些资源(js / css / images)的正确路径,您不能使用相对路径,因为我们没有使用普通的目录结构。 url / users / login不从目录/ users / login加载文件,它甚至可能不存在。这些只是uri段,引导程序用它来知道要使用哪个类,方法和参数。 要获得正确的路径,请使用正斜杠(假设您的应用和资产位于根目录中,而不是子目录中),如下所示:

      或者你最好的选择,使用绝对网址:

    //引用你的$ config ['base_url']  “/&gt;  相当于:

    http://mydomain.com/images/myimage.jpg CI中内置了帮助程序,您也可以选择使用它们,但这真的是您需要知道的。