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  content,  left,  right 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.