Jhtml :: komut dosyası sırası - jQuery yüklenene kadar nasıl ertelenir?


11

JHtml::scriptÖzel geliştirilmiş bir modülde sayfalarıma komut dosyaları eklemek için kullanıyorum . Bununla birlikte, bu komut dosyaları J3 jQuery'ye eklenmeden önce kafaya enjekte edilir - örneğin:

<!-- my module js -->
<script src="/modules/mod_tiles/js/jquery.isotope.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/jquery.hoverintent.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/mod_tiles.js" type="text/javascript"></script>
<!-- then joomla loads jQuery --->
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>

Joomla'yı diğer komut dosyalarından önce jQuery yüklemeye nasıl zorlayabilirim?

Yanıtlar:


15

Aramalısın

JHtml::_('jquery.framework');

diğer JHtml :: betiğinizden önce. AFAIK bu, önce jQuery'nin yüklenmesini sağlar.


Benim için çalışan tek çözüm mod_tiles.phpbuydu - önce yüklemek için bu zor jQuery'ye yerleştirildi . Teşekkür ederim!
kodlama


2

eğer sorunuzu doğru okursam, kendi modülünüzü geliştiriyorsunuz demektir.

Bunu varsayılan olarak deneyin. Php - modülün görünümü ("tmpl" de):

JHtml::stylesheet('modules/'.$module->module.'/assets/css/yourfile.css');

JHtml::script('modules/'.$module->module.'/assets/js/yourscript.js');

Veya bu :

JHtml::_('stylesheet', 'modules/'.$module->module.'/assets/css/anotherfile.css');

JHtml::_('script', 'modules/'.$module->module.'/assets/js/othercript.js');

Her iki durumda da, JS dosya (lar) ınız içinde bir "varlık" klasörü ve bir "css" ve "js" klasörü oluşturmuş olmanız koşuluyla, jQuery'den sonra enjekte edilmelidir.

İkinci çözüm daha çok joomla 3.XX API ile uyumludur.

Umarım yardımcı olur.


Burada yaptığım tek değişiklik assetsklasörü eklemekti - bu farklı değildi ve jQuery yapmadan önce komut dosyaları hala yüklenir. Ben de bir şablon dosyasına kod bu tür koyarak bilgelik merak ediyorum (özellikle aynı komut dosyaları, KURU vb. Kullanarak birden fazla şablon varsa)
Haziran'da kodlama

Hem, yorumunuz garip -> "bu tür bir kodu şablon dosyasına koymak". Ben sizin tarafınızdan geliştirilen ve izotope.js ve diğer JS betiklerine dayanan bir modül hakkında konuşurken yeterince açık değildi. Eğer yanılmışsam çok üzgünüm ve mod_tiles adında üçüncü bir modül kullanıyorsunuz. BTW, bir şablona JS komut dosyaları eklemenin başka yolları da vardır.
ghazal

Üzgünüm, kulağa çok sert gelmek istememiştim haha! Çok erken olmalısın ... Tam olarak haklısın, yaptığım şey bu - bu benim modülüm. Ne şablon dosyası tarafından geliyordu default.phpiçinde tmplmodülün (şablon) klasörünün. Ben komut dosyaları (görünüm) mod_tiles.phpyerine default.php( 'denetleyici') yükleneceğini düşündüm .
codinghands

Bir tmpl / default.php içine yerleştirmek geçersiz kılmaya izin verir. Mod_tiles.php dosyasında geçersiz kılınamaz.
sovainfo

2

Geçen hafta bu soruna rastladım ve JHtml :: script'i çağırdığım yerle ilgiliydi. Bunu görünümünüzde veya görünümün şablonunda mı yapıyorsunuz? Komut dosyalarını görünümün içine eklemeye çalışırsanız (views / yourview / view.html.php) Joomla! 'Nın kendi komut dosyalarından önce eklenirler, ancak şablondaki komut dosyalarını eklerseniz (views / yourview / tmpl / default.php) bunlar Joomla! 'nın komut dosyalarından sonra eklenir.

İyi şanslar!


Bu sadece mod_tiles.php, bir helper.php dosyası ve içinde tek bir şablon (default.php) bulunan bir modül tmpl. Hem mod_tiles.php hem de default.php komut dosyalarını eklemeyi denedim - jQuery'den önce her iki yük.
Haziran'da kodlama

0

Bu muhtemelen geliştiricinin mod_tileskomut dosyalarını içe aktarmak için kullandığı yöntemden kaynaklanmaktadır . Sanırım bu durumda Joomla kodlama standartlarına bağlı kalmadılar.

(Ben düşünebilirim) hwre 2 seçenek var:

  1. Komut dosyaları modül içindeki tmpl klasöründeki bir dosyadan içe aktarılıyorsa, Şablon Geçersiz Kılma gerçekleştirebilir ve komut dosyasının içe aktarılma şeklini kullanarak değiştirebilirsiniz JHtml.
  2. JQuery'yi içe aktaran ve diğer tüm komut dosyalarının üzerine yerleştiren bir eklenti olan jQuery Easy'yi indirip yükleyebilirsiniz .

Bu yardımcı olur umarım


Modülü geliştirdim - hangi yöntemi kullanmalıyım? Bunu bir soruda sordum ( joomla.stackexchange.com/questions/325/… ) ve JHtml :: script'in ileriye giden yolu olduğu söylendi.
2014'te

0

İki bitimi daha sonra eklemek istedim. Bileşendeki her görünüm için yüklenmesi gereken birkaç komut dosyası ve stil sayfası var ve bunların doğru sırayla yüklendiğinden emin olmak için tek bir nokta olmasını istedim.

Dosyada components\myComponent\mycomponent.php:

defined('_JEXEC') or die;

// Include dependancies
jimport('joomla.application.component.controller');

JHtml::stylesheet('http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', array(), true);
JHtml::stylesheet('components/com_mycomponent/assets/css/mycomponent.css');

JHtml::_('jquery.framework');   // Make sure jQuery is loaded before component JS
JHtml::script( 'components/mycomponent/assets/js/jquery.cookie.js');

// Execute the task.
$controller = JControllerLegacy::getInstance('Mycomponent');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();

-1

Bunun eski bir konu olduğunu biliyorum ama bunun alt kısmına geldin mi? Ben de aynı problemi yaşadım. NEDEN'i tanımladım ama problemi / çözümü değil; Ben bir HATA olduğunu ama başka biriyle denemek yapabilir sinsi bir şüphem var.

Senaryo: jQuery bağımlı komut dosyası içeren bir modül oluşturdunuz, böylece default.php görünümünüzde aşağıdakileri kullanabilirsiniz:

$doc = JFactory::getDocument();
$doc->addScript("media/mod_accordion/js/accordion.js");

Daha sonra modülü kurar ve bir modül konumu verirsiniz, 'sol' diyelim. Ön uç kaynak koduna baktığınızda her şey iyi görünüyor, tüm komut dosyaları, içindeki komut dosyalarından sonra yüklenir

JHtml::_('bootstrap.framework');

Ancak, modüle bir konum 'akordeon' verirseniz ve modülü bir makaleye eklemek için joomla yükleme konumu özelliğini kullanırsanız

{loadposition accordion}

accordion.js, bootstrap.framework dosyalarından ÖNCE eklenir.

Çalışmasını sağlamanın tek yolu, betiği kafaya dahil etmek yerine satır içi bir betik olarak eklemektir.

EDIT: aynı css dahil etmek için de geçerlidir; css bildirimi listesinin en üstüne eklenir (şablon ve bootstrap css dosyalarından önce). Bunun amacı, css bildirimlerine önemli!

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.