it-swarm-tr.com

Dizeleri değiştirmek için JResponse :: setBody veya onContentPrepare kullanmalı mıyım?

Joomla içeriği çukur ve eşleşen dize html çıktıları oluşturur bir kısa kod eklentisi geliştiriyorum.

Şu anda bunu kullanıyorum

   public function onContentPrepare($context, &$row, &$params, $page = 0){

        if ($this->run_plg != 1)return;
        require_once 'shortcodes.php';
        $row->text = shortcodes($row->text);

        return true;
    }

Ve çok iyi çalışıyor. Gördüğünüz gibi, bu modüller dahil olmak üzere temel olarak her Joomla içeriğiyle çalışır (Virtuemart veya diğer 3. taraf uzantılardan emin değilsiniz). Ancak, şablon dosyalarınızda kısa kodu kullanacak olsaydınız bulamazdı.

Bu yüzden onAfterRender işlevini böyle yerleştirmeyi düşünüyorum:

function onAfterRender() {
    require_once 'shortcodes.php';
    $body        = JResponse::getBody();
    $body       = shortcodes($body);
    JResponse::setBody($body);
}

Bu, sitenin herhangi bir yerinde dizeyle eşleşir. Endişem performans. Kısa kodlar işlevine basit bir örnek.

https://eval.in/141437

orijinali PREG_SET_ORDER ile hassaslaştırılır ve yalnızca $ shortcode ['type'] dizesi bulunursa çalışır.

Yani soru şu, ne önerirsiniz ve açıklamak için zamanınız varsa neden.

Teşekkürler ve KONGRELER :)

5
Dan

eklenti performansı hakkındaki diğer cevap gibi, öğrenmenin en iyi yolu testidir .

Ayrıntılar için diğer yanıta bir göz atın, ancak her yöntemin zamanlama sonuçlarını karşılaştırmak için JLog sınıfını kullanarak zaman günlüğü ifadeleri eklemek kolay olmalıdır.

Bununla birlikte, sitenin her yerinde kısa kodu yakalamanız gerekiyorsa, onAfterRender hızlı, kolay ve belki de tek yoldur (kullanarak eklentileri).

1
codinghands

onContentPrepare, uzantıların çıktısı için aşağı yukarı oluşturulmuştur. Benim düşünceme göre, yükte bir bul/değiştir eklenmesi gereken başka bir yer olmamalıdır. Bunu söylememin sebebi Joomla'nın yöntemleriyle tutarlı kalmasını sağlamak.

Bu nedenle, bir tür bulma/değiştirme gerekiyorsa, bunun yerine özel bir HTML modülüne yerleştirilmesi en iyisi olabilir (ayrıca bunun için özel bir düzen de oluşturabilirsiniz). Bu şekilde içerik eklentileri içeriğinizi ayrıştırmaya devam eder, sistem eklentilerinizi ortam ayarlarını ve benzerlerini ayarlamak için bırakır veya fazladan kitaplıklar yükler (temel olarak Joomla'nın çekirdeğini ayarlar ve genişletir).

Özellikle Gelişmiş modül yöneticisi olan sayı olmayan uzantılara bakın, daha fazla ayar içeren modülleri hedeflemenizi sağlar. Size yardımcı olmasa da, verdikleri kontrol başka türlü düşünmeyeceğiniz alternatif çözümlere yol açabilir. http://www.nonumber.nl/

1
Jordan Ramstad