Çekirdek sınıflar nasıl geçersiz kılınır?


20

Bazen daha fazla işlevsellik elde etmek veya bazı temel işlevlerin başka bir şekilde çalışmasını sağlamak için çekirdek sınıfları geçersiz kılmaya ihtiyaç vardır. Çekirdek sınıfları geçersiz kılmanın bir yolu var mı? Mümkünse, onları geçersiz kılarak hangi sorunlarla karşılaşabilirim?


1
Sorunuzu biraz daha belirgin hale getirmek veya açık bir sorunu tanımlamak için hassaslaştırmanız harika olurdu.
Valentin Despa

Joomla 3 kullanıcıları için - bunları kontrol edin. Sana yardım edecektir. joomla.stackexchange.com/questions/5449/… Eklenti - github.com/ghazal/plg_mvcoverride Teşekkürler joomla.stackexchange.com/users/270/ghazal
cha

Yanıtlar:


16

Evet mümkün.

Sınıfları geçersiz kılmak için bir sistem eklentisi kullanabilirsiniz, lütfen bu bağlantıyı ve bunu ve bunu okuyun

Karşılaşacağınız iki sorun:

  1. tüm sınıfı geçersiz kılmanız gerekir (sadece bir kısmını değil)

  2. çekirdek güncellenirse ve sınıf da güncellenir / değiştirilirse, geçersiz kılmanızı güncellemeniz gerekir (gerekirse).


4
Verilen bağlantılardan ilgili adımları yapıştırabilir veya en azından hareket etmeleri veya değişmeleri durumunda bağlantıların bir açıklamasını vermeniz yararlı olacaktır.
kodlama el

10

Bir süre önce çekirdek sınıfları geçersiz kılmanıza izin veren bir eklenti oluşturdum, ancak yine de @jackJoe'nun cevabında işaret ettiği sorunların avına düşüyor. Ancak, geçersiz kılmaları temiz bir şekilde yapmanızı sağlar.

https://gist.github.com/dongilbert/3237387


7
Sadece bu çözümün güzel çalıştığını ve Don'un Açık Kaynak'ın gerçek bir akraba ruhu olduğunu söylemek istiyorum - ona ve işine şapka çıkar !!!
GSYİH

Basit komut dosyanızla ilgili önemli bir sorun var, bileşenleri önceden yüklememesi. Dolayısıyla, bileşenleri geçersiz kılarsanız, çoğu için gerçekten işe yaramaz (örneğin, com_content bileşeni). İyi çalışıyor, ancak bileşeni geçersiz kılabilmesi için bileşeni önceden yüklemelidir (henüz bildirilmemiş bir şeyi geçersiz kılamazsınız). Oh, ve yapıcıdaki her şeyi yapmak yerine onAfterRoute kullanmalısınız. Bu yorumla ne demek istediğimi bilmek istiyorsanız geçersiz kılmayı deneyin components/com_content/models/articles.php.
itoctopus


4

Çok uzun zamandır bunun üzerindeydim ve Don'a bir kez işim bittiğinde daha fazla ayrıntı vereceğine söz verdim.

Ben bileşenler için Joomla MVC geçersiz kılmak ve Joomla sadece şablon html klasör içinde değil, benim eklenti html klasöründe geçersiz kılmalar aramak için söyle gerekiyordu.

Ne sevmedim ne aslında geliştiriciler Joomla varsayılan sınıf almak ve onunla karışıklık, bu yüzden ben bir şey frenlemek yerine, eğer ben bu sınıfı genişletmek.

Sürecim takip ediyor.

  1. Geçersiz kılmam gereken sınıfı al
  2. Oku, sınıf adını değiştir, temp sınıf klasörümde yeni dosya oluştur
  3. Sınıf sürümümü yükle
  4. Joomla sınıfını yükle
  5. Eklentimde geçersiz kılmayı aramak için loadTemplate işlevini genişleten ve joomla şablonu ve son joomla bileşeninden daha fazla genişletme yöntemimi kaydettirin

görüntü oldukça http://prntscr.com/3d9syq

Aşağıdaki snippet'teki ilk bölümler kullanıcının nerede olduğunu kontrol ediyor, eğer Joomla'yı güncellemek üzereyse, güncelleme tamamlandığında JackJoe numarası ile ilgilenenlerden daha yeni olduklarından emin olmak için oluşturulan geçici sınıf dosyalarını siliyorum 2.

if (($this->Input('option') == 'com_joomlaupdate' && $this->Input('task') == 'update.install') || ($this->Input('option') == 'com_joomlaupdate' && $this->Input('layout') == 'complete')) {

    JFolder::delete(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    JFolder::create(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/');
    $indexContent = '';
    JFile::write(JPATH_SITE . '/plugins/system/yjsg/includes/yjsgcore/classes/extend/classes/index.html', $indexContent);
}

$YjsgJViewDefaultRead         = JPATH_LIBRARIES . '/legacy/view/legacy.php';
$YjsgJViewDefaultFile         = YJSGEXTEND . "classes" . YJDS . "Yjsg" . $isView . "Default" . $IsJversion . ".php";



    //extend JView library class

    if (!JFile::exists($YjsgJViewDefaultFile)) {
        $YjsgJViewDefault = JFile::read($YjsgJViewDefaultRead);
        $YjsgJViewDefault = str_replace('class ' . $isView, 'class Yjsg' . $isView . 'Default', $YjsgJViewDefault);
        JFile::write($YjsgJViewDefaultFile, $YjsgJViewDefault);
    }

    require_once($YjsgJViewDefaultFile);
    jimport('joomla.application.component.view');
    JLoader::register($isView, YJSGEXTEND . $IsJversion . '/component/view.php', true);
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.