我正在编写一个PHP库,在将它们添加到控制器中之后,它将在我的页面的页脚中包含JavaScript标记和代码。我有添加src标签和包含代码的标签的方法。 add_src方法应该将数组或单个srcs添加到已经设置的数组。出于某种原因,只有数组中的最后一项被添加到源中。代码输出正常。
图书馆:
<?php
class JS {
var $js_code = '';
var $js_srcs = array();
function add_code($js = ''){
$this->js_code .= $js;
return $this;
}
function add_src($src = '', $type = ''){
if(is_array($src)){
foreach($src as $type => $url){
$this->js_srcs[] = script_tag($src, $type);
}
} else {
$this->js_srcs[] = script_tag($src, $type);
}
return $this;
}
function reset_code(){
$this->js_code = '';
return $this;
}
function reset_srcs(){
$this->js_srcs = array();
return $this;
}
function generate(){
$str = '';
if(count($this->js_srcs) > 0){
foreach($this->js_srcs as $src){
$str .= $src;
}
}
$str .= '
<script>
'.$this->js_code.'
</script>';
return $str;
}
function generate_srcs(){
var_dump($this->js_srcs);
$str = '';
if(count($this->js_srcs) > 0){
foreach($this->js_srcs as $tag){
$str .= $tag.'
';
}
}
return $str;
}
function generate_code(){
if($this->js_code != ''){
return "<script>
".$this->js_code."</script>";
}
}
}
用法:
<?php
$this->js->add_src(array('' => 'js/fileone.js', '' => 'js/filetwo.js', '' => 'js/filethree.js'));
$this->js->add_code('$("#element").myPlugin({});');
$this->js->add_src(array('js/global.js');
echo $this->js->generate_src();
echo $this->js->generate_code();
脚本标记功能:
function script_tag($src = '', $type = '')
{$str = '';
$CI =& get_instance();
if(is_array($src)){
foreach($src as $url){
$str .= '<script ';
if($type != ''){
$str .= 'type="'.$type.'" ';
}
if(preg_match("^://^", $url)){ // If the url is absolute
$str .= 'src="'.$url.'"';
} else { //If the url is relative
$str .= 'src="'.base_url($url).'"';
}
$str .= '></script>
';
}
} else {
$str = '<script ';
if($type != ''){
$str .= 'type="'.$type.'" ';
}
$str .= 'src="'.$src.'"></script>
';
}
return $str;
}
答案 0 :(得分:1)
问题在于这一行:
$this->js->add_src(array('' => 'js/fileone.js', '' => 'js/filetwo.js', '' => 'js/filethree.js'));
关联数组只能有一个带有特定键的数组。您尝试对所有元素使用相同的密钥,因此它们会相互覆盖。你需要给他们不同的钥匙:
$this->js->add_src(array('type1' => 'js/fileone.js', 'type2' => 'js/filetwo.js', 'type3' => 'js/filethree.js'));
如果您不关心密钥,可以使用普通的索引数组:
$this->js->add_src(array('js/fileone.js', 'js/filetwo.js', 'js/filethree.js'));
PHP会自动分配密钥0
,1
等。