Memahami Blok Magento dan Jenis Blok


105

Saya hanya ingin memahami artinya

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

Saya mendapat banyak referensi dari Google dan memahami banyak hal tentangnya tetapi saya masih belum dapat memahami type="page/html"bagaimana cara membentuk suatu tipe untuk modul kustom saya.

Tolong jelaskan

type="A/B"

Beri tahu saya dari mana A dan B ini berasal?

Jawaban:


126

The Aadalah modul alias . Dalam hal ini pageadalah kependekan dari Mage_Page_Block(didefinisikan app/code/core/Mage/Page/etc/config.xmljika Anda ingin melihat).

The Badalah nama kelas relatif alias, huruf awal dari setiap kata dikapitalisasi. Dalam hal ini htmlmenjadi Htmldan ditambahkan ke alias diselesaikan, jadi itu Mage_Page_Block_Html. Ini mungkin ditemukan di file app/code/core/Mage/Page/Block/Html.phpkarena nama kelas diterjemahkan langsung ke lokasi di Magento.

Jika Anda menggunakan alias model dan bukan alias blok maka pageakan menjadi Mage_Page_Modelgantinya. Hal yang sama juga terjadi untuk model sumber daya dan pembantu. Modul Anda sendiri perlu mendefinisikan ini dalam konfigurasinya jika ingin memiliki blok, model dan pembantu.


@ clockworkgeek terima kasih banyak. jawaban Anda sangat membantu saya.
Anup_Tripathi

Anda menyelamatkan saya satu ton. Terima kasih.
Sumit Malik


Bagaimana jika itu adalah blok rewrited / overrided, bagaimana saya bisa mendefinisikan dan menggunakan tipe blok?
Vicky Dev

@VickyDev Anda tidak perlu melakukan sesuatu yang berbeda karena blok baru akan menjadi turunan dari blok lama dan kompatibel. Anda bisa, dan harus, berpura-pura tidak ada.
clockworkgeek

158

Untuk memahami lebih lanjut tentang tipe blok magento berikut ini adalah beberapa tipe blok bawaan yang banyak digunakan dalam tata letak.

  1. core/template: Blok ini membuat template yang ditentukan oleh  template atributnya. Mayoritas blok yang ditentukan dalam tata letak memiliki tipe atau subtipe  core/template.
  2. page/html: Ini adalah subtipe dari  core/template dan mendefinisikan blok root. Semua blok lainnya adalah blok anak dari blok ini.
  3. page/html_head: Mendefinisikan bagian kepala HTML dari halaman yang berisi elemen termasuk JavaScript, CSS, dll.
  4. page/html_header: Mendefinisikan bagian header dari halaman yang berisi logo situs, link atas, dll.
  5. page/template_links: Blok ini digunakan untuk membuat daftar tautan. Tautan yang terlihat di footer dan area header menggunakan tipe blok ini.
  6. core/text_list: Beberapa blok seperti  contentleftright dll adalah dari jenis  core/text_list. Saat blok ini dirender, semua blok turunannya dirender secara otomatis tanpa perlu memanggil getChildHtml() metode tersebut.
  7. page/html_wrapper: Blok ini digunakan untuk membuat blok pembungkus yang merender blok anaknya di dalam tag HTML yang disetel oleh tindakan  setHtmlTagName. Tag default adalah  <div> jika tidak ada elemen yang disetel.
  8. page/html_breadcrumbs: Blok ini mendefinisikan remah roti di halaman.
  9. page/html_footer: Mendefinisikan area footer halaman yang berisi link footer, pesan hak cipta, dll.
  10. core/messages: Blok ini membuat pesan kesalahan / sukses / pemberitahuan.
  11. page/switch: Blok ini dapat digunakan untuk bahasa atau pengalih toko.

Ini adalah daftar jenis blok yang umum digunakan. Ada banyak tipe blok lain yang digunakan dalam implementasi tema lanjutan.


Bagaimana dengan: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Sudah disebutkan dalam jawaban bahwa: Ini adalah daftar jenis blok yang umum digunakan. Ada banyak tipe blok lain yang digunakan dalam implementasi tema lanjutan.
Kamesh Jungi

Terima kasih. Sangat membantu.
arqam

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

halaman adalah FrontendName didefinisikan dalam etc/config.xmlfile html adalah nama kelas blok

keterangan lebih lanjut:

di baris ini type(type="page/html")tentukan nama kelas blok yang terkait dengan Anda template(template="example/view.phtml">)dan nama unik untuk setiap blok.

lihat dulu struktur foldernya

app> local> namespace> modulename> etc> config.xml

kami mengatur FrontendName = 'mymodule'

app> local> namespace> modulename> Block > hello.php

di hello.php Anda membuat sebuah fungsi

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

dan sekarang masuk ke halaman xml layout Anda:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> di sini mydata adalah nama frontend

dan sekarang datang ke template Anda

template / contoh / view.phtml halaman

di sini Anda dapat memanggil langsung fungsi mydata ()

Suka

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

sekarang Anda bisa mendapatkan output Anda di browser "Blokir disebut"


Anda menamai blok tersebut hello.php tetapi nama kelas blok adalah 'namespace_modulename_Block_Data', bukankah seharusnya Halo di akhir nama?
Rai Ehtisham

5

saya tidak tahu tentang tipe "B", tetapi "A" merujuk ke tag nama modul Anda di contoh config.xml di config.xml:

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

Tidak, Anda tidak salah. Tapi "<!-- script -->"mungkin membingungkan. Mari kita perjelas: seperti jawaban yang dinyatakan di atas, ini adalah alias, yang terdiri dari dua bagian, bagian pertama ("A") itu sendiri adalah alias yang Anda tentukan untuk kelas modul Anda di modul Anda config.xml, yang kedua adalah jalur yang berhubungan dengan nilai node. Ini bersama-sama ("A" + huruf besar "B") akan diterjemahkan ke nama kelas, menggunakan bagian pertama (nilai node "A") persis seperti yang Anda definisikan (perhatikan huruf besar / kecil jika Anda tidak menginginkan jam penderitaan) dan bagian kedua ditulis dengan huruf kapital setelah setiap garis bawah. Jadi, mulailah dengan contoh A / B dengan blok dan konfigurasi ini:

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

Dalam runtime A/Bakan diselesaikan oleh config Magento untuk Vendor_Module_Block_Byang kemudian akan dimasukkan oleh autoload dari lintasan berikut: public/app/local/Vendor/Module/Block/B.php. Untuk mendapatkan pemahaman yang lebih baik, saya menyarankan Anda untuk melihat Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()dan Varien_Autoload::autoload().


3

Saya tidak tahu tentang tipe "B", tetapi "A" merujuk ke tag nama modul Anda di config.xml

Contoh di file config.xml:

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

nb: saya harap saya tidak salah ..

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.