2014-01-29 48 views
0

我在Joomla 2.5.x中測試我的模塊,我注意到在同一頁面中複製模塊似乎不起作用。我注意到這是因爲我的模塊有一個共同的addScript()addStyleSheet()函數。例如,我有我的模塊下面的代碼:Joomla 2.5.x:模塊的多個實例不能在同一個頁面中工作?

$document->addScript(JURI::base() . 'modules/mod_mymodule/js/abc.js'); 
$document->addStyleSheet(JURI::base() . 'modules/mod_mymodule/css/xyz.css'); 

它看起來像我每次複製模塊的時間是,Joomla 2.5.X試圖再包括這些和,因爲它們已經包含第一模塊,它會失敗,並且多個模塊在頁面中不能正確呈現。

然而,Joomla 3.x似乎足夠聰明,可以在頭文件中檢測幷包含這些腳本。有沒有辦法在2.5.x中解決這個問題?

回答

0

嘗試

JURI::base(true) 

,而不是

JURI::base() 

所以方案,主機和端口將不被包括在內,這已經足夠了對於j 2.5看出,腳本是一個和相同。

將主機包含在腳本中是不好的做法,除非它們在另一個主機上。除了在多子網站上緩存問題之外,您只是無緣無故地讓頁面變大。

+0

會使用'JHmtl ::'也解決這個問題嗎? – Lodder

+0

我想是的。但是我檢查了addScript()和head.php:render()的實現,它應該可以與完整的url一起工作,這很令人費解。 –

0

如果你想避免添加兩次,你需要跟蹤你已經添加的事實。

您可以使用Singleton模式來做到這一點,並有一個initialize()方法的類,它只會將所需的數據添加到JDocument一次。

或者,您可以在JDocument對象本身中添加一個屬性,然後再對其進行測試。 (不理想,因爲有了這種做法,你冒着屬性名稱衝突的風險)。

最後,您可以嘗試檢查JDocument的樣式和腳本列表(如果它是公開可見的),看看您是否已經添加它們。這我覺得不是很有效率。

所以我會採用Singleton方法,其中模塊代碼調用initialize()方法,該方法只會添加樣式和腳本一次。

另一個可能的問題是檢查模塊模板是否使用元素ID而不是類。那麼你也可能會有ID衝突。

相關問題