JHtml: script () ve $ doc-> addScript arasındaki fark nedir?


10

Kısa bir süre önce her JS ve CSS dosyasının <head>her sayfanın içine enjekte edilmesini gerektiren bir modül geliştirdim . Başlangıçta kullandım:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

Ancak, önbelleğe alma etkinleştirildiğinde sitenin hem önbelleğe alınmış sürümü hem de önbelleğe alınmamış sürümü yüklediğini /cacheve /modules/mod_x/js/JS hatalarına neden olduğunu fark ettim .

Bunu şu şekilde değiştirdiğimde:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

Komut dosyası, bu hataları gidererek önbellekten yalnızca bir kez yüklendi.

Ben docs okumak olduğunu addScriptyöntem daha 'düşük seviyeli' oldu JHtml:scriptyöntemle yine de söylemeden ötesinde ...

Tabii ki, [addScript kullanıyorsanız] yukarıdaki [JHtml: script yöntemi] kullanılarak otomatik olarak yapılacak bazı adımları [JHtml: script'in sizin için yaptığı] manuel olarak kodlamanız gerekecektir.

... daha fazla ayrıntı verilmiyor.

Peki fark nedir? JHtml:scriptSonunda addScriptbir noktada bir belge nesnesi üzerinde çağrıları varsayalım , ama ilk olarak diğer aracı adımlar atıldı?


4
Joomla dokümanlarını denemek ve güncellemek için biraz yeniden yazdım - şimdi daha anlamlı olup olmadığını görün?
George Wilson

1
@GeorgeWilson Joomla belgeleri son zamanlarda gerçekten gelişti. Teşekkürler :)
TryHarder

Stil sayfaları hakkında ilgili soru: joomla.stackexchange.com/q/10062/5239
Flimm

Yanıtlar:


8

JHtml::scriptek mantık içerir. API referansı için bkz. Http://api.joomla.org/cms-3/classes/JHtml.html#method_script

Varsayılan olarak hata ayıklama ayarını ve kullanılan tarayıcıyı algılar ve eşleşen komut dosyasını yükler. Örneğin hata ayıklama etkinleştirildiğinde, dosyanın sıkıştırılmamış bir sürümünü varsa yükler.

Dosyayı şablon düzeyinde ve diğer şeyler üzerinde geçersiz kılmaya izin veren isteğe bağlı ayarlar vardır.

Michael Babker JHtml::script()geçersiz kılmalara nasıl izin verileceği konusunda iyi bir rehber yazdı : http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

Referans için repo işlevi: https://github.com/joomla/joomla-cms/blob/staging/libraries/cms/html/html.php#L659

George tarafından güncellenen resmi doküman sayfası: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page


2
Cevap için teşekkürler. API referansı oldukça keskindir - Det_browser ve Detect_debug'un etkilerinin daha kapsamlı bir açıklaması var mıdır ve 'isteğe bağlı ayarlar' ve 'diğer şeyler' dediğinizde bunlar herhangi bir yerde belgeleniyor mu?
codinghands

Michael tarafından geçersiz kılma bölümünü açıklayan bir makaleye bağlantı ekledim. Hata ayıklama ve tarayıcı kısmına gelince, bir belge olduğunu sanmıyorum. Bunun için kodu okumalısınız.
Bakual

1
Örneğin, sıkıştırılmamış ve sıkıştırılmış bir js dosyası varsa ve hata ayıklama açıksa, dosya adı-uncompressed.js ve hata ayıklama kapalıyken sadece dosyaadı.js yükler. Hata ayıklama sırasında tarayıcı için dosyaadı-browser.js sonra dosyaadı-tarayıcı-browserversion.js vb. Arar
George Wilson

2
Bu çatlak bir cevap - teşekkürler @Bakual ve @GeorgeWilson!
codinghands

1
JHtml'nin de bir komut dosyasının veya stil sayfasının MD5 toplamını önbellek büstüne ekleyebileceğini unutmayın.
Flimm

4

iki kelimeyle:

  • JHtml::script() - bazı komut dosyalarına bağlı olarak belirli komut dosyasını (JDocument'e zaten eklenmiş olanlar hariç) geçersiz kılmanıza izin verin (bkz. @Bakual answer);
  • $doc->addScript() - betiği geçersiz kılmaları denetlemeden doğrudan belgeye ekleyin;

Uzantı geliştiricisiyseniz, JHtml::script()komut dosyasını eklerken şiddetle tavsiye edilir . Bu, kullanıcılarınızın istedikleri şeye bağlı olarak bazı belirli komut dosyalarını geçersiz kılmasına olanak tanır.
Ayrıca css için benzer bir yöntem var.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.