Magento Block設計分析(深入分析)

Magento中Block是一個很重要的組件,它在Block中充當非常重要的角色,下面我們來分析一下Magento中Block是怎樣設計的,我們應該怎樣使用這個重要的角色。
1、Magento Block類圖:
圖1:

繼承Varien_Object的對象都有一個_data類變量,用來收集數據,其收集的形式為:set屬性名(屬性值), 如:setCustomerId(4)或者setData(屬性名,屬性值)如:setData(‘customer_id’,4),以上兩種形式意義一 樣,但要注意屬性命名的不同.

2、Magento Block的分類

從圖1可以看到,block在繼承是明顯分成兩個分支,一個分支為繼承Mage_Core_Block_Template的用戶用戶自定義Block,一個分支為Magento系統都我們自定義的Mage_Core_Block_Text,一般我們不再繼承擴展。

從有無Template文件進行分類

一、無template文件的block。這一為類Block又稱作純容器Block(右邊部份).如在page.xml中default節點下定義的 left、content等,這一類型的block不需要template文件,他只能包含子block.他收集所有直接子的html,作為自己的輸出。 在他的父Block的template文件中使用如下語句進行輸出如:在3columns.phtml中使用:<?php echo $this->getChildHtml(‘left’) ?>和<?php echo $this->getChildHtml(‘content’) ?>在他自己的位置輸出html內容.
二、必須要有template文件的block( 圖1中左邊部份)。這一類型下的Block可以分為兩類:
第一類:容器Block,此類型的block有自已的template文件,也就是說有自已的html內容,這一部份內容可以是布局的,也可以是直接內 容,同時這一類型的block包括子block,在它自己的template文件中可以使用<?php echo $this->getChildHtml(‘子block的別名‘) ?>,輸出子block的內容,作為自已template文件內容的一部份。
第二類:純內容Block,此類型的block有自已的template文件,也就是說有自已的html內容,但是html只能有直接內容,它不包含子block,也就是說這個block是一個葉子節點。

按是否cms block劃分。

圖2:

圖中有色調部份為cms block,白色部份為非block.cms block其實也為一種不需要template文件的block,但是它不能包含子block.它的應用一般如下兩種方式
在xml中使用:

1 <block type=”cms/block” name=”test_cms_block” as=”testCmsBlock”>
2 <action method=”setBlockId”><block_id>cms_block_id</block_id></action>
3 </block>

?

然后在他的父block的template文件中這樣輸出:<?php echo $this->getChildHtml(‘testCmsBlock‘) ?>
在php代碼中直接使用:

$cmsBlock = Mage::getSingleton(‘core/layout’)->createBlock(‘cms/block’, ‘test_cms_block’)->setBlockId(‘cms_block_id’);
$cmsBlock->toHtml()

按是否有output輸出來分類

所有的block都有一個toHtml方法,進行自己的html輸出,他會調用template文件生成html內容,template內容中如果有 echo $this->getChildHtml語句將會調用他子block進行內容輸出,放到自己放echo $this->getChildHtml語句的地方,子block會調用自己的template文件生成html內容,template內容中如果 有echo $this->getChildHtml語句將會調用他子block進行內容輸出,放到自己放echo $this->getChildHtml語句的地方……直到沒有子block內容為止,也就是純內容block為止。也就是說只要最頂層的 block調用一次toHtml方法,它將發生一連串反應,最終生成一個完成的html輸出,那么誰是這個最頂層的block,它就是page.xml中 定義的<block type=”page/html” name=”root” output=”toHtml” template=”page/3columns.phtml”>這個block.大家發現這個block,有一個output=”toHtml” ,同時他的模塊文件是一個完整的html頁面。其它所有的block都沒有此句.(請參考<<如何利用和擴展cms/email模板中的指令>> 中對layout指令的解釋),您也可以在<block type=”core/text_list” name=”content” as=”content” output=”toHtml”/> 在content中加一個output,看前臺發生什么現像(內容塊會輸出兩次)。記住:一個layout實例,只會在頂層的block中有一個 output定義,不然會出現多輸出的問題。

按前后臺進行分類

前臺和后臺(admin)都是用戶自定義Block,只不過由于后臺的不同所以所有后臺模塊的block都繼承Mage_Adminhtml_Block_Template,前臺block都繼承Mage_Core_Block_Template

以下分析的如無特別說明,都是指有Template文件的block

4、從MVC架構層次來看Block設計

圖3:

從圖3中可以看出,在block的設計中:
M:由model和helper充當,block類中會調用到這些類的業務處理方法。這些類會與數據庫進行交互(helper要與數據庫交互,也是通過model實現的)
V:由template文件,也就是phtml文件充當,他會利用$this來調用block中的方法得到數據,并轉化成html.
C:由block的類充當,block中的類會調用M得到數據.
Block中的VC兩部份從模念上來說是屬于一體的,他們都是Block的一部份,只不過一個用來得到數據,一個用來展示數據。但是從物理上來看他們分屬 不同的文件。在Mage_Core_Block_Template中的fetchView方法中有一句話說明這一點:include $this->_viewDir.DS.$fileName; 也就是說block類文件會include屬于他自己的模板文件,從而組裝成一個整體,這也是為什么在模塊文件中可以$this來調用block類中的方 法的原因。有時我故意把block分成block類文件和模塊文件,這樣有助我們理解Block的設計。

轉載于:https://www.cnblogs.com/zhengyanbin2016/p/5741156.html

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/271181.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/271181.shtml
英文地址,請注明出處:http://en.pswp.cn/news/271181.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JAVA輸出x和y和z_JAVA實例:輸入三個整數x,y,z,請把這三個數由小到大輸出-吾愛編程網...

今天為大家分享一個java經典實例輸入三個整數x,y,z,請把這三個數由小到大輸出&#xff0c;相信很多初學者都會學到這道題目&#xff0c;接下來吾愛編程為大家介紹一下程序的相關寫法&#xff0c;有需要的小伙伴可以參考一下:1、題目&#xff1a;輸入三個整數x,y,z&#xff0c;請…

軟件項目管理相關概念介紹筆記

1、成本估算由于軟件項目具有可見性差、難定量化的特點&#xff0c;一般情況下很難在項目完成前準確的評估軟件項目開發的工作量和費用。通常會根據以往開發類似項目的經驗來進行成本估算。也可以將整個項目劃分為若干個子系統或按照軟件的生命周期的各個階段分別進行費用估算&…

python爬取微博熱搜_Python 超簡單爬取微博熱搜榜數據

微博的熱搜榜對于研究大眾的流量有非常大的價值。今天的教程就來說說如何爬取微博的熱搜榜。 熱搜榜的鏈接是&#xff1a;用瀏覽器瀏覽&#xff0c;發現在不登錄的情況下也可以正常查看&#xff0c;那就簡單多了。使用開發者工具(F12)查看頁面邏輯&#xff0c;并拿到每條熱搜的…

LeetCode14 Longest Common Prefix

題意&#xff1a; Write a function to find the longest common prefix string amongst an array of strings. (Easy) 這兩天實驗室項目太忙了&#xff0c; 老板各種活&#xff0c;只能挑著先水幾道easy題&#xff0c;這兩個題是昨天做的沒來得及寫總結。 分析&#xff1a; 暴…

類加載器ClassLoader的角色

類加載器ClassLoader的角色

軟件項目管理:進度管理相關概念介紹

軟件項目管理當中&#xff0c;項目進度的合理安排是如期完成軟件項目的重要基礎&#xff0c;也是合理分配資源的重要依據。項目進度安排是項目管理工作當中非常重要的組成部分。軟件開發項目進度安排的方式&#xff1a;1、系統最終交付日期已經確定&#xff0c;軟件開發部門必須…

ios開發 多人語音聊天_手游語音市場的現狀、機遇與挑戰

文/手游那點事小魚原創2014年持續火熱的手游市場成就了一大批企業的上市夢&#xff0c;同時也在大環境下產生了對系列手游增值服務的需求。基于玩家對手游社交性的需求&#xff0c;以及借鑒傳統端游&#xff0c;頁游中成功的社交體系&#xff0c;手游市場逐步出現了對手游語音的…

linux 下運行 tomcat

一開始找不到表名&#xff0c;原來mysql 表名區分大小寫。 修改參數 lower_case_table_names1 成功運行后不能通過瀏覽器訪問&#xff01; 開啟8080端口 一、關閉防火墻 firewall-cmd --state 查看狀態 [rootVM_7_88_centos /]# firewall-cmd --state running [rootVM_7_88…

軟件項目管理:軟件工具與開發環境相關知識介紹

1、軟件工具相關名詞概念軟件工具&#xff1a;用來輔助軟件開發、運行、維護、管理等過程中的活動軟件。軟件開發環境&#xff1a;是指支持軟件產品開發的軟件系統&#xff0c;它由軟件工具集和環境集成機制構成。軟件工具集&#xff1a;包括支持軟件開發相關過程、活動、任務的…

apollo java客戶端_攜程配置中心Apollo的Java客戶端API的使用

一、SpringBoot集成1.發布配置信息設置本機為DEV環境&#xff1a;Linux在/opt/settings/server.properties增加配置envDEV&#xff0c;windows在c:\opt\settings\server.properties圖1 在apollo portal上新建項目后&#xff0c;默認就有了application命名空間。在DEV環境下新建…

JNI----Native本地方法接口

Native本地方法接口 JNI&#xff1a;Java Native Interface 本地接口的作用是融合不同的編程語言為Java所用&#xff0c;它的初衷是融合C/C程序 native&#xff1a;凡是帶native關鍵字的&#xff0c;說明java的作用范圍達不到了&#xff0c;會去調用底層c語言的庫&#xff01…

python的flag是什么意思_網上老說的flag是什么意思

近些年&#xff0c;國內的網絡發展速度還是很快的&#xff0c;大家可以通過網絡了解很多的東西&#xff0c;因此網絡上也有很多熱詞開始流行起來&#xff0c;其中flag算是十分流行的一個詞匯&#xff0c;網上老說的flag是什么意思?立個flag是什么梗?可能還有一些朋友并不是很…

項目管理基礎:系統分析相關概念介紹

1、系統分析的主要任務系統分析主要任務是對現行的系統進一步詳細調查&#xff0c;將調查得到的資料集中&#xff0c;對組織內部整體管理狀況和信息處理過程進行分析&#xff0c;為系統開發提供所需要的資料&#xff0c;并提交系統方案說明書。2、系統分析的主要階段系統分析主…

java線程池和線程實例化_淺談Java 線程池原理及使用方式

一、簡介什么是線程池&#xff1f;池的概念大家也許都有所聽聞&#xff0c;池就是相當于一個容器&#xff0c;里面有許許多多的東西你可以即拿即用。java中有線程池、連接池等等。線程池就是在系統啟動或者實例化池時創建一些空閑的線程&#xff0c;等待工作調度&#xff0c;執…

線性代數及其應用_線性代數入門——行列式的簡單應用選講

系列簡介&#xff1a;這個系列文章講解線性代數的基礎內容&#xff0c;注重學習方法的培養。線性代數課程的一個重要特點(也是難點)是概念眾多&#xff0c;而且各概念間有著千絲萬縷的聯系&#xff0c;對于初學者不易理解的問題我們會不惜筆墨加以解釋。在內容上&#xff0c;以…

RocketMQ 使用及常見問題

前言 本文檔是針對RocketMQ使用及常見問題的說明。 一&#xff0e;獲取項目、安裝包及文檔 1. alibaba/RocketMQ https://github.com/alibaba/RocketMQ 2. Download the latest release package https://github.com/alibaba/RocketMQ/releases 3.…

系統開發基礎:UML相關知識筆記

1、UML概念統一建模語言&#xff08;Unified Modeling Language UML&#xff09;是面向對象軟件的標準建模語言。由于簡單、統一&#xff0c;又能夠表達軟件設計中的動態和靜態信息。目前UML已經成為可視化建模語言的工業標準。2、UML的組成UML三要素&#xff1a;構造塊、規則、…

java中什么是運行異常_在java中最常用的運行時異常是什么?

我從不會拋出NullPointerException。對我來說&#xff0c;它是一個出現在代碼中當出現問題時&#xff0c;需要開發人員看看會發生什么。然后(s)他固定的原因&#xff0c;它不會再次發生。我使用IllegalStateException表示對象配置不正確或調用的順序不正確。但是&#xff0c;我…

迭代器 java_面試必備(含答案):30 個 Java 高頻面試問題

Java集合框架為Java編程語言的基礎&#xff0c;也是Java面試中很重要的一個知識點。這里&#xff0c;我列出了一些關于Java集合的重要問題和答案。1.Java集合框架是什么&#xff1f;說出一些集合框架的優點&#xff1f;每種編程語言中都有集合&#xff0c;最初的Java版本包含幾…