从字符串代码点火器资产加载器中查找扩展


find extension from string codeigniter asset loader

我在codeigniter中有一个模型,我基本上希望能够在函数中输入一个文件或文件数组,然后为该文件呈现正确的html。我正在使用strchr来查找.的最后一次出现,然后获取之后的所有内容。但是,根据 php 文档,这并不像我认为的那样有效(该函数总是返回 false)。

这是模型:

<?php
class Asset_Load_Model extends CI_Model {
    public static $jsWrapperStart = '<script type="text/javascript" src="';
    public static $jsWrapperEnd = '"></script>';
    public static $cssWrapperStart = '<link rel="stylesheet" type="text/css" src="';
    public static $cssWrapperEnd = '">';
    public static $imageTypes = array ( 'gif', 'jpeg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'tiff', 'jpc', 'jp2', 'jpf', 'jb2', 'swc', 'aiff', 'wbmp', 'xbm');
    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
    }
    /**
     * Load an asset based on extension in string
     *
     * @param string/array $file
     * @param string $class for image types only
     */
    public function loadAsset($file, $class = '') {
        $out = '';
        if(is_array($file)) {
            $files = array();
            foreach ($files as $file) {
                $out .= $this->loadAsset($file);
            }
            return $out;
        } else {
            $ext = strrchr($file, '.');
            if ($ext == 'css') {
                return self::cssWrapperStart . base_url() . $file . self::cssWrapperEnd;
            } elseif ($ext == 'js') {
                return self::jsWrapperStart . base_url() . $file . self::jsWrapperEnd;
            } elseif (in_array($ext, self::$imageTypes)) {
                $class = isset($class) ? ' class="' . $class . '"' : '';
                return '<img alt="" src="' . base_url() . $file . '"' . $class . '>';
            } else {
                return false;
            }
        }
    }
}
?>

示例用法:

$dataFooter['page_level_plugins'] = $this->asset_load_model->loadAsset(array('assets/plugins/bootstrap-modal/js/bootstrap-modal.js', 'assets/plugins/bootstrap-modal/js/bootstrap-modalmanager.js', 'assets/plugins/jquery-validation/dist/jquery.validate.min.js', 'assets/plugins/select2/select2.min.js'));
$files = array();
foreach ($files as $file) {
    $out .= $this->loadAsset($file);
}

您在foreach之前将$files声明为空数组,因此不会向loadAssets发送任何内容。

尝试类似的东西

foreach ($file as $f) {
    $out .= $this->loadAsset($f);
}
<?php
class Asset_Load_Model extends CI_Model {
    public static $jsWrapperStart = '<script type="text/javascript" src="';
    public static $jsWrapperEnd = '"></script>';
    public static $cssWrapperStart = '<link rel="stylesheet" type="text/css" href="';
    public static $cssWrapperEnd = '">';
    public static $imageTypes = array ( 'gif', 'jpeg', 'png', 'swf', 'psd', 'bmp', 'tiff', 'tiff', 'jpc', 'jp2', 'jpf', 'jb2', 'swc', 'aiff', 'wbmp', 'xbm');
    public function __construct() {
        parent::__construct();
        $this->load->helper('url');
    }
    /**
     * Load an asset based on extension in string
     *
     * @param string/array $file
     * @param string $class for image types only
     */
    public function loadAsset($file, $class = '') {
        $out = '';
        if(is_array($file)) {
            foreach ($file as $f) {
                $out .= $this->loadAsset($f);
            }
            return $out;
        } else {
            $ext = substr(strrchr($file, '.'), 1);
            if ($ext == 'css') {
                return self::$cssWrapperStart . base_url() . $file . self::$cssWrapperEnd;
            } elseif ($ext == 'js') {
                return self::$jsWrapperStart . base_url() . $file . self::$jsWrapperEnd;
            } elseif (in_array($ext, self::$imageTypes)) {
                $class = isset($class) ? ' class="' . $class . '"' : '';
                return '<img alt="" src="' . base_url() . $file . '"' . $class . '>';
            } else {
                return false;
            }
        }
    }
}
?>