Magento Blok ve Blok Tipini Anlamak


105

Sadece anlamını anlamak istiyorum

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

Google'dan birçok referans aldım ve bununla ilgili birçok şeyi anladım, ancak type="page/html"özel modülüm için bir tür oluşturmanın oluşumunu hala anlayamıyorum .

Lütfen açıkla

type="A/B"

Bu A ve B'nin nereden geldiğini bana bildirin.

Yanıtlar:


126

ABir modülün olduğu takma . Bu durumda pagekısaltmasıdır Mage_Page_Block( app/code/core/Mage/Page/etc/config.xmlgörmek istiyorsanız içinde tanımlanır ).

Diğer Bada göre sınıf adıdır, her kelimenin ilk harfleri büyük yazılır. Bu durumda çözülen takma ada htmlolur Htmlve eklenir, yani öyledir Mage_Page_Block_Html. Bu muhtemelen dosyada bulunur app/code/core/Mage/Page/Block/Html.phpçünkü sınıf adları doğrudan Magento'daki konumlara çevrilir.

Blok takma adı yerine model takma adı kullanıyor olsaydınız page, bunun Mage_Page_Modelyerine olacaktır . Aynı şey kaynak modelleri ve yardımcıları için de olur. Blokları, modelleri ve yardımcıları olacaksa, kendi modülünüzün bunları yapılandırmasında tanımlaması gerekecektir .


@ clockworkgeek çok çok teşekkür ederim. Cevabınız bana çok yardımcı oldu.
Anup_Tripathi

Beni bir ton kurtardın. Teşekkürler.
Sumit Malik

Nice Explaination
Jalpesh Patel

Ya yeniden yazılmış / geçersiz kılınmış bir bloksa, o zaman blok tipini nasıl tanımlayabilir ve kullanabilirim?
Vicky Dev

@VickyDev, yeni blok eski bloğun soyundan geleceği ve uyumlu olacağı için farklı bir şey yapmanıza gerek yoktur. Yokmuş gibi davranabilirsin ve yapmalısın.
clockworkgeek

158

Magento blok türleri hakkında daha fazla bilgi edinmek için, düzende yaygın olarak kullanılan bazı yerleşik blok türleri aşağıdadır.

  1. core/template: Bu blok, template niteliği ile tanımlanan bir şablon oluşturur  . Düzende tanımlanan blokların çoğu türü veya alt tipidir  core/template.
  2. page/html: Bu, core/template kök bloğun bir alt türüdür  ve kök bloğunu tanımlar. Diğer tüm bloklar bu bloğun alt bloklarıdır.
  3. page/html_head: Sayfanın JavaScript, CSS vb. Dahil olmak üzere öğeleri içeren HTML head bölümünü tanımlar.
  4. page/html_header: Site logosunu, üst bağlantıları vb. İçeren sayfanın başlık bölümünü tanımlar.
  5. page/template_links: Bu blok, bir bağlantı listesi oluşturmak için kullanılır. Altbilgi ve üstbilgi alanında görünen bağlantılar bu blok türünü kullanır.
  6. core/text_list: Gibi bazı bloklar  contentleftright vb tiptedir  core/text_list. Bu bloklar işlendiğinde, tüm alt blokları, getChildHtml() yöntemi çağırmaya gerek kalmadan otomatik olarak oluşturulur .
  7. page/html_wrapper: Bu blok, alt bloklarını eylem tarafından belirlenen bir HTML etiketi içinde işleyen bir sarmalayıcı bloğu oluşturmak için kullanılır  setHtmlTagName. Varsayılan etiket,  <div> herhangi bir öğe ayarlanmadıysa olur.
  8. page/html_breadcrumbs: Bu blok, sayfadaki kırıntıları tanımlar.
  9. page/html_footer: Altbilgi bağlantıları, telif hakkı mesajı vb. İçeren sayfanın altbilgi alanını tanımlar.
  10. core/messages: Bu blok hata / başarı / uyarı mesajlarını oluşturur.
  11. page/switch: Bu blok, dil veya mağaza değiştirici için kullanılabilir.

Bu, yalnızca yaygın olarak kullanılan blok türlerinin bir listesidir. Gelişmiş tema uygulamalarında kullanılan birçok başka blok türü vardır.


Peki ya: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Zaten yanıtta bahsedildi: Bu, yalnızca yaygın olarak kullanılan blok türlerinin bir listesidir. Gelişmiş tema uygulamalarında kullanılan birçok başka blok türü vardır.
Kamesh Jungi

Teşekkürler. Gerçekten yardımcı oldu.
arqam

8
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

sayfa bir FrontendName etc/config.xmldosyasında tanımlıdır html bir blok sınıfı adıdır

daha fazla detay:

bu satırda type(type="page/html"), sizin template(template="example/view.phtml">)ve adınızla ilgili blok sınıfı adını tanımlayın , her blok için benzersizdir.

önce klasör yapısını görün

uygulama> yerel> ad alanı> modulename> etc> config.xml

ayarladık FrontendName = 'mymodule'

app> local> ad alanı> modulename> Block > hello.php

merhaba.php'de bir işlev oluşturdunuz

   class namespace_modulename_Block_Data extends Mage_Core_Block_Template
   {
    public function mydata()
        {
            $data = "Block is called";
            return $data;
         }     
}   

ve şimdi düzen xml sayfanıza gelin:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> Burada verilerim ön uç adıdır

ve şimdi şablonunuza gelin

şablon / örnek / görünüm.phtml sayfası

burada doğrudan mydata () işlevini çağırabilirsiniz

sevmek

<div>
<?php echo $this->mydata(); ?>
</div>

artık çıktınızı tarayıcınızda "Blok denir" alabilirsiniz


Bloğa hello.php adını verdiniz, ancak blok sınıfının adı 'namespace_modulename_Block_Data', adın sonunda Merhaba olması gerekmez mi?
Rai Ehtisham

5

"B" türünü bilmiyorum, ancak "A", config.xml'deki config.xml örneğindeki modül adı etiketinize atıfta bulunuyor:

<A><!-- script --></A>

Hayır, yanılmıyorsun. Ancak "<!-- script -->"kafa karıştırıcı olabilir. Açıklığa kavuşturalım: yukarıdaki cevaplarda belirtildiği gibi, bu iki bölümden oluşan bir takma addır, birinci bölüm ("A") modülünüzdeki modül sınıflarınız için tanımladığınız takma addır config.xml, ikincisi ise düğümün değeri. Bunlar birlikte ("A" + büyük harfle yazılmış "B"), ilk bölümü ("A" düğümünün değeri) tam olarak sizin tanımladığınız şekilde (saat istemiyorsanız büyük / küçük harfe dikkat edin) kullanılarak bir sınıf adına çevrilecektir. acı) ve ikinci kısım her alt çizgiden sonra büyük harfle yazılır. Öyleyse, bir blok ve bu yapılandırmayla A / B örneğiyle başlayın:

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>

Çalışma zamanında A/BMagento yapılandırma tarafından çözüldü olur Vendor_Module_Block_Bsonra aşağıdaki yoldan autoload tarafından dahil hangi: public/app/local/Vendor/Module/Block/B.php. Daha iyi bir anlayış ben tavsiye almak için bakmak için Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()ve Varien_Autoload::autoload().


3

"B" türünü bilmiyorum ama "A", config.xml'deki modül adı etiketinize atıfta bulunuyor

Config.xml dosyasındaki bir örnek:

<A><!-- script --></A>

nb: Umarım yanılmıyorumdur ..

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.