it-swarm-tr.com

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

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?

20
Dmitry Rekun

Evet mümkün.

Sınıfları geçersiz kılmak için bir sistem eklentisi kullanabilirsiniz, lütfen bunu okuyun link ve this ve this

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

  1. tüm sınıfı geçersiz kılmanız gerekir (yalnızca 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).

16
jackJoe

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

10
Don Gilbert
5
cha

Ç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

işte 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 ilgilenen yeni dosyalar aldığımızdan 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);
4
Dan