Hiểu về khối và loại khối Magento


105

Tôi chỉ muốn hiểu ý nghĩa của

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

Tôi đã nhận được nhiều tài liệu tham khảo từ Google và hiểu nhiều điều về nó nhưng tôi vẫn không thể hiểu sự hình thành của type="page/html"cách tạo một loại cho mô-đun tùy chỉnh của mình.

Vui lòng giải thích

type="A/B"

Hãy cho tôi biết A và B này đến từ đâu?

Câu trả lời:


126

Đây Abí danh của mô-đun . Trong trường hợp pagenày là viết tắt của Mage_Page_Block(nó được định nghĩa trong app/code/core/Mage/Page/etc/config.xmlnếu bạn muốn xem).

Đây Blà tên lớp liên quan đến bí danh, các chữ cái đầu tiên của mỗi từ được viết hoa. Trong trường hợp này htmltrở thành Htmlvà được thêm vào bí danh đã giải quyết, vì vậy nó là như vậy Mage_Page_Block_Html. Điều này có thể được tìm thấy trong tệp app/code/core/Mage/Page/Block/Html.phpvì tên lớp dịch trực tiếp đến các vị trí trong Magento.

Nếu bạn đang sử dụng bí danh kiểu mẫu thay vì bí danh khối thì thay vào đó pagesẽ là bí danh Mage_Page_Model. Điều tương tự cũng xảy ra đối với các mô hình tài nguyên và trình trợ giúp. Mô-đun của riêng bạn sẽ cần xác định những điều này trong cấu hình của nó nếu nó có khối, mô hình và trình trợ giúp.


@ clockworkgeek cảm ơn bạn rất nhiều. câu trả lời của bạn là rất hữu ích cho tôi.
Anup_Tripathi

Bạn đã tiết kiệm cho tôi một tấn. Cảm ơn.
Sumit Malik

Giải thích tốt đẹp
Jalpesh Patel

Điều gì sẽ xảy ra nếu nó là một khối được ghi đè / ghi đè, làm cách nào để tôi có thể xác định và sử dụng loại khối sau đó?
Vicky Dev

@VickyDev bạn không cần phải làm gì khác vì khối mới sẽ là hậu duệ của khối cũ và tương thích. Bạn có thể và nên giả vờ như nó không tồn tại.
clockworkgeek

158

Để hiểu thêm về các loại khối magento, sau đây là một số loại khối tích hợp được sử dụng rộng rãi trong bố cục.

  1. core/template: Khối này hiển thị một mẫu được xác định bởi template thuộc tính của nó  . Phần lớn các khối được xác định trong bố cục là kiểu hoặc kiểu con của  core/template.
  2. page/html: Đây là một kiểu con của  core/template và định nghĩa khối gốc. Tất cả các khối khác là khối con của khối này.
  3. page/html_head: Xác định phần đầu HTML của trang chứa các phần tử để bao gồm JavaScript, CSS, v.v.
  4. page/html_header: Xác định phần tiêu đề của trang chứa biểu trưng của trang web, các liên kết hàng đầu, v.v.
  5. page/template_links: Khối này dùng để tạo danh sách các liên kết. Các liên kết hiển thị trong khu vực chân trang và đầu trang sử dụng loại khối này.
  6. core/text_list: Một số khối như  contentleftright vv là các loại  core/text_list. Khi các khối này được hiển thị, tất cả các khối con của chúng được hiển thị tự động mà không cần gọi getChildHtml() phương thức.
  7. page/html_wrapper: Khối này được sử dụng để tạo một khối trình bao bọc hiển thị các khối con của nó bên trong thẻ HTML được đặt bởi hành động  setHtmlTagName. Thẻ mặc định là  <div> nếu không có phần tử nào được đặt.
  8. page/html_breadcrumbs: Khối này xác định đường dẫn trên trang.
  9. page/html_footer: Xác định khu vực chân trang của trang có chứa liên kết chân trang, thông báo bản quyền, v.v.
  10. core/messages: Khối này hiển thị thông báo lỗi / thành công / thông báo.
  11. page/switch: Khối này có thể được sử dụng cho ngôn ngữ hoặc trình chuyển cửa hàng.

Đây là danh sách chỉ các loại khối thường được sử dụng. Có nhiều loại khối khác được sử dụng trong triển khai chủ đề nâng cao.


Còn: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Đã được đề cập trong câu trả lời rằng: Đây là danh sách chỉ các loại khối thường được sử dụng. Có nhiều loại khối khác được sử dụng trong triển khai chủ đề nâng cao.
Kamesh Jungi

Cảm ơn. Thực sự hữu ích.
arqam 10/09/19

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

trang là FrontendName được định nghĩa trong etc/config.xmltệp html là tên lớp khối

biết thêm chi tiết:

trong dòng này type(type="page/html")xác định tên lớp khối liên quan đến của bạn template(template="example/view.phtml">)và tên là duy nhất cho mỗi khối.

lần đầu tiên xem cấu trúc thư mục

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

chúng tôi đặt FrontendName = 'mymodule'

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

trong hello.php, bạn đã tạo một hàm

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

và bây giờ đến trang xml bố cục của bạn:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> ở đây mydata là tên giao diện người dùng

và bây giờ đến với mẫu của bạn

trang template / example / view.phtml

ở đây bạn có thể gọi trực tiếp hàm mydata ()

giống

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

bây giờ bạn có thể lấy đầu ra của mình trong trình duyệt "Khối được gọi là"


Bạn đã đặt tên khối là hello.php nhưng tên của lớp khối là 'namespace_modulename_Block_Data', không phải là Hello ở cuối tên sao?
Rai Ehtisham

5

tôi không biết về loại "B", nhưng "A" đề cập đến thẻ tên mô-đun của bạn trong ví dụ config.xml trong config.xml:

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

Không, bạn không sai. Nhưng "<!-- script -->"có thể là khó hiểu. Hãy làm rõ: như các câu trả lời ở trên đã nêu, đây là một bí danh, bao gồm hai phần, phần đầu tiên ("A") chính là bí danh bạn xác định cho các lớp của mô-đun trong mô-đun của bạn config.xml, phần thứ hai là một đường dẫn liên quan đến giá trị của nút. Chúng cùng nhau ("A" + "B" được viết hoa) sẽ được dịch thành tên lớp, sử dụng phần đầu tiên (giá trị của nút "A") chính xác như bạn xác định nó (xem chữ hoa / thường nếu bạn không muốn giờ của khổ) và phần thứ hai được viết hoa sau mỗi dấu gạch dưới. Vì vậy, hãy bắt đầu với ví dụ A / B với một khối và cấu hình này:

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

Trong thời gian chạy A/Bsẽ giải quyết bằng cách cấu hình Magento để Vendor_Module_Block_Bmà sau đó sẽ bao gồm bởi các autoload từ đường dẫn sau: public/app/local/Vendor/Module/Block/B.php. Để hiểu rõ hơn, tôi khuyên bạn nên xem qua Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()Varien_Autoload::autoload().


3

Tôi không biết về loại "B", nhưng "A" đề cập đến thẻ tên mô-đun của bạn trong config.xml

Một ví dụ trong tệp config.xml:

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

nb: tôi hy vọng tôi không sai ..

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.