2013-10-17 48 views
0

我正在使用我自己的自定義CMS,它允許我創建一小塊代碼並將它們放置在整個網站上 - 這也是Joomla所做的。我想要做的是每個代碼塊可能都有自己的JS文件,這些文件僅與該塊相關。所以我想動態地使用PHP將JS添加到頭標記中。現在我在網上找到了這個解決方案,併爲它創建了一個類。動態加載使用PHP的「頭部」中的JS

<script type="text/javascript"> 
var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.src = "/path/to/pikachoosejs/jquery.pikachoose.js"; 
document.getElementsByTagName('head')[0].appendChild(script); 
</script> 

這裏的PHP版本:

<?php function loadcss($path) { ?> 
<script> 
var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.src = "<?php echo $path; ?>"; 
document.getElementsByTagName('head')[0].appendChild(script); 
</script> 
<?php } ?> 

現在,這裏的問題是,如果我添加此代碼,它包含在head標籤。但是,不知何故,Pachachoose不起作用。如果我做一個正常的包括使用

<script type="text/javascript" src="/path/to/pikachoosejs/jquery.pikachoose.js"> </script> 

繼承人,我用它來調用腳本PHP函數 -

它做工精細。我不知道我哪裏出錯了。有人可以幫忙嗎?

+0

PHP在哪裏? –

+0

嘗試jquery的['getScript()'](http://api.jquery.com/jQuery.getScript/) – gwillie

+0

@Hanky웃Panky - 跳過那部分因爲它真的沒有使顯示一個PHP函數具有完全相同的東西作爲JavaScript。無論如何,現在添加它。 –

回答

0

試試這個:

(function() { 
var li = document.createElement('script'); 
li.type = 'text/javascript'; 
li.src= "<?php echo $path; ?>"; 
li.async=true; 
var s = document.getElementsByTagName('script')[0]; 
s.parentNode.insertBefore(li, s); 
})(); 
0

您的解決方案是什麼地方寫script代碼到你的HTML,這取決於您的函數被調用。它與Joomla差別很大!特別是因爲它依賴於客戶端將腳本附加到頭部。

爲了做一些Joomla!-ish,你需要使用output buffer,或者服務器端的jQuery,比如phpQuery

對於像您這樣的簡單情況,我會使用phpQuery,因爲它使jQuery編碼器變得更容易。


爲你的小CMS簡單的設置可能是這樣的。在開始時,但以下內容,除非您明確打算,否則不要在代碼中使用任何HTML。

phpQuery::newDocumentFileHTML('/path/to/template.html'); 

它通過加載一個模板文件到內存中創建phpQuery一個新的上下文,是需要,但也可以是不同的變化之一。請參閱Basics documentation

功能追加腳本:

function loadJS($name) { 
    pq('<script>')->attr('src', $name)->appendTo('head'); 
} 

幾乎jQuery中所有可用的方法在phpQuery也是可用的。我迄今爲止發現的唯一例外是css方法,因爲如果不深入分析鏈接的樣式表,就不可能知道客戶端會呈現哪些樣式。

最後,對DOM寫信給你的迴應:

echo pq('html'); 

無論是您目前的做法或這一項,jquery.pikachoose.js腳本實際上應該工作。檢查您的開發人員工具中的資源,查看它是否已加載。如果是這樣,請檢查是否有任何與您的腳本有關的錯誤,以防止它作爲jQuery插件正確加載。

0

如果您希望腳本由PHP生成,您需要將它放入PHP文件中。將文件重命名爲js/getdata.js.php並相應地更新src。

0

另一個簡單可靠的方法是將腳本標記字符串保存在變量中。

<?php function loadcss($path) { ?> 

    $sc = "<script type='text/javascript' src='$path'></script>"; ?> 
    document.getElementsByTagName('head')[0].innerHTML += '<?php echo $sc ?>'; 

<?php } ?> 

考慮兩件事,你得到正確的路徑。你真的有一個頭標籤。如果是,那麼使用下面的代碼。

該代碼應該是正確的,但如果你沒有得到它的工作......爲了確保這段代碼是正確的..你可以檢查你的頭元素(與螢火蟲),你會看到。腳本節點將使用此代碼writeen

0
var js = document.createElement('script'); 
js.src = 'http://xxx./yyy.js'; 
document.getelementsbytagname('head')[0].appendChild(); 

我認爲這是最好的。