(Model) Yeniden Yazımını Doğru Şekilde Devre Dışı Bırakma


10

Belirli bir Magento çekirdek sınıfını yeniden yazan üçüncü taraf bir uzantı var. Bir blok, yardımcı veya model olması önemli değil, ancak bu durumda bir model. Şimdi bu yeniden yazmanın kötü olduğunu ve üçüncü taraf uzantısını değiştirmeden devre dışı bırakmak istiyorum. Bu nedenle, üçüncü taraf uzantısına bağlı özel bir uzantı yazıyorum. Üçüncü taraf yeniden yazmayı devre dışı bırakmanın en iyi yolu nedir? Düşünebileceğim güvenli olan, üçüncü taraf yeniden yazma yerine kullanılan özel bir yeniden yazma tanımlamaktır:

<global>
    <models>
        <custom_extension>
            <class>Custom_Extension_Model</class>
        </custom_extension>
        <mage_core>
            <rewrite>
                <sth>Custom_Extension_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Sth.php, sınıf doğrudan Mage sınıfından uzanır ve bu nedenle üçüncü tarafların yeniden yazılmasını devre dışı bırakır:

class Custom_Extension_Model_Sth extends Mage_Core_Model_Sth
{

}

Bu çalışıyor, ama çok iyi hissetmiyor. Gözlemciler hakkında düşünmek, onları yalnızca config.xml dosyası olarak ayarlayarak devre dışı bırakmak mümkündür disabled. Yeniden yazma ile böyle bir şey mümkün mü? Aşağıdakileri kullanmaya çalıştım ve işe yarıyor:

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth></sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Ama bunu yapmak güvenli mi? Tüm sürümlerde çalışıyor mu? Bunu hiç vahşi doğada görmedim, bu yüzden soruyorum.

Yanıtlar:


1

Düğüm gerçekten boş olduğu sürece, magento yeniden yazma olmadığını ve düğüm asla onların olmadıkça 'sınıf adını oluşturmak için sınıf önekini kullan' olduğunu düşünecektir. In Mage_Core_Model_Config::getGroupedClassName.

Ancak ben bir sınıf bulunamadı hatası ile sona erecek boş olmamak (magento'nun gözlerinde '\ n') etiketi değiştirme biçimlendirmeyi durdurmak <sth/>yerine kullanmak gerektiğini düşünüyorum <sth></sth>.

Yardımcılar, bloklar veya modeller için bir 'devre dışı bırak' seçeneği olduğuna inanmıyorum. Ayrıca bir Gözlemci de kullanabilirsiniz (yapılandırmayı tam olarak nasıl olması gerektiğini geri getirecektir), ancak bununla ilgili gördüğüm sorun, daha sonra bir gözlemci allso veya XML üzerinden gözlemcinizi devre dışı bırakmayı bilmek için.

Gibi bir şey:

    public function controllerActionPredispatch(Varien_Event_Observer $event)
    {
        $helper = Mage::helper('webtise_foundationalerts');
        if (! $helper->isAdmin()) {
            $node = Mage::getConfig()->getNode('global/models/core/rewrite');
unset($node->sth);
        }
    }

Benim için XML yolu kazanıyor.


3

Bunu engellemek için özel bir modül yaparsanız, üzerine yazdığı modüle bağımlı olduğundan emin olun.

Beklenmedik davranışları önlemek için yeniden yazmayı muhtemelen 'uygun' bir şekilde yeniden tanımlayabilirim

<global>
    <models>
        <mage_core>
            <rewrite>
                <sth>Mage_Core_Model_Sth</sth>
            </rewrite>
        </mage_core>
    </models>
</global>

Kısa bir süre önce, Magento tarafından başka bir etiketin içindeki 1 boş etiketin, nulluyarı veren bir nesne yerine döndüğü bir sorunla karşılaşıldı . Ölümcül değil ama geliştirici modunda ve günlük için oldukça can sıkıcı.

Ama burada yolunu kanıtlamak için hiçbir sert kanıt hataya neden olmaz :)

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.