摘要:本次要做的就是,撰寫一個模塊,讓該模塊跑完整個的流程。創建模型,需要啟用模型,啟用資源模型,在資源模型中添加實體,再為資源模型設置讀寫適配器。
很多時候,不知道Magento模塊到底該怎么寫,比如ThinkPHP,YII框架,它是直接將控制器Controller中的所取得相關數據直接傳遞到視圖層View,而Magento雖然也是MVC三層,但是在中間多了布局對象Layout與區塊Block之間的關系,記錄下在學習Magento過程中的一些片段,以便共同學習。
本次要做的就是,撰寫一個magento模塊,讓該模塊跑完整個magento的流程。即通過config.xml配置文件,找到相應控制器xxxxController,再到相應方法xxxxAction,從控制器中實例化Model,查詢數據庫,實例化Mysql4資源對象,通過布局layout下的xxx.xml配置,找到相應的Block文件,在block中查收數據,最后在template模板文件,調用Block中得到的數據,顯示到前臺頁面。
1.新建目錄結構
app |-code |-----local |----------Test |--------------News |------------------Block |------------------controllers |------------------etc |----config.xml |------------------Helper |------------------Model
2.為magento加載該模塊,在etc/modules下添加配置文件Test_News.xml
true local
3.查看magento是否加載到該模塊:
4.編寫配置文件etc/config.xml
0.1.0 Test_News news
5.寫控制器controllers/IndexController.php
通過url訪問,local.magento.com/news/index/index
可以看到:hello world。
6.接下來,我們的目的是要從數據庫中查詢出數據,這里,我們可以先不通過magento自帶的sql文件寫入,可以自己先在數據庫建個測試表,填充兩條記錄來進行測試。
CREATE TABLE `blog_posts` ( `blogpost_id` int(11) NOT NULL AUTO_INCREMENT, `title` text, `post` text, `date` datetime DEFAULT NULL, `timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`blogpost_id`) ); INSERT INTO `blog_posts` VALUES (1,"My New Title","This is a blog post","2009-07-01 00:00:00","2009-07-02 23:12:30"); INSERT INTO `blog_posts` VALUES (2,"My Second Time","This is a blog post22","2019-11-01 00:10:03","2012-07-02 23:12:30");7.創建模型,需要啟用模型,啟用資源模型,在資源模型中添加實體,再為資源模型設置讀、寫適配器。
依次建立好Model下的文件。
這里在配置文件config.xml中添加如下代碼:Test_News_Model news_mysql4 Test_News_Model_Mysql4 blog_posts
Test_News Model文件夾的目錄結構如下
Model |----News.php |----Mysql4 |----News.php |----News |---Collection.php為什么要這么創建,參見《深入理解Magento 第二章》
我們來填充下各個文件里面的代碼:
/Model/News.php_init("news/news"); } }/Model/Mysql4/News.php
_init("news/news","blogpost_id"); } }/Model/Mysql4/News/Collection.php
_init("news/news"); } }8.創建好Model后,繼續添加Helper和Block,在配置文件config.xml中添加
Test_News_Block Test_News_Helper /Helper/Data.php
9.這里,我們其實已經可以查詢到數據庫中的內容了,來測試下,在控制中添加如下代碼:
public function indexAction(){ $read = Mage::getSingleton("core/resource")->getConnection("core_read"); $sql = "select * from `blog_posts`"; $result = $read->fetchAll($sql); print_r($result); }得到一個二維數組。
但是,我們的目的不是從控制器中返回,而是從模板頁面,所以,注釋掉控制器中的方法,我們在Block中添加上述代碼。
/Block/News.phpgetConnection("core_read"); $sql = "select * from `blog_posts`"; $result = $read->fetchAll($sql); return $result; //print_r($result); } }10.這里遇到的問題是,得到了數據,但是如何才能將數據傳遞到Template的phtml頁面,TP有$this->assign(),$this->display()來傳遞,magento是如何傳遞的呢?是否想過這個問題?我也在這里卡了很久,一直在說Magento的配置文件很強大,之前一直沒有體現,這里的解決方式,還是magento的配置文件。
在design/frontend/rwd/default/layout文件夾下,新建local.xml,添加如下代碼:這里解釋下含義:
news_index_index:表示news模塊下的IndexController下的indexAction;表示引入模塊,name=“root”表示替換掉默認的以name=“root”的模塊; 表示新建一個模塊,
type="news/news",表示從news模塊下,找block下的news.php文件,
template="news/blog_posts.phtml",表示在Template文件夾下,找到news/blog_posts.phtml文件。
11.在template文件夾下新建blog_posts.phtmlUntitled blog_posts Table
blogposts());?>//調用block中的blogposts方法12.這里需要修改上面的indexAction控制器中的內容,內容如下:
class Test_News_IndexController extends Mage_Core_Controller_Front_Action { public function indexAction() { //echo "hello world"; // $read = Mage::getSingleton("core/resource")->getConnection("core_read"); // $sql = "select * from `blog_posts`"; // $result = $read->fetchAll($sql); // print_r($result); $this->loadLayout(); $this->renderLayout(); } }13.再次刷新頁面,到此為止,一個簡單的模塊就跑通了,備注,開發過程中,最好在后臺將緩存關掉。
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/21336.html
摘要:的版本中如何開啟調試模式呢在前面,寫了一篇有關如何開啟調試模式來顯示前臺的路徑信息,便于在學習的時候,能快速的找到各個對應的文件。但是,現在這個項目用的,在的版本中如何開啟調試模式呢兩種方法供參考方法一通過后臺控制臺來操作,選擇也選擇。 magento1.x的版本中如何開啟調試模式呢? 在前面,寫了一篇有關Magento2.0如何開啟調試模式來顯示前臺的路徑信息,便于在學習magent...
摘要:概述是一款遵循規范協議的模塊加載器,不但能在瀏覽器端充分利用,同樣能在其他的運行時環境,比如和。使用像這樣的模塊加載器能提高代碼的質量和開發速度。一般放在頁面的入口出,用來加載其他的模塊。 RequireJS概述 RequireJS是一款遵循AMD規范協議的JavaScript模塊加載器, 不但能在瀏覽器端充分利用,同樣能在其他的JavaScript運行時環境, 比如Rhino和No...
摘要:簡易模塊加載器示例點來了接下來我們先來看一段建議模塊加載器的示例代碼以上是加載器的實現,再來看看如何使用吧你好啊要去杭州玩了章煒今天天氣不錯噢在以上代碼中,我們定義了三個模塊,分別名為。 前端模塊化 關注前端技術發展的各位親們,肯定對模塊化開發這個名詞不陌生。隨著前端工程越來越復雜,代碼越來越多,模塊化成了必不可免的趨勢。 各種標準 由于javascript本身并沒有制定相關標準(當然...
摘要:五子棋游戲博客官網示例實現源碼之前一直在用,前幾天看了下的官方文檔,寫了個加強對的理解,歡迎指正。五子棋游戲該模塊實現了五子棋和井字游戲兩個游戲。五子棋游戲只記錄了最近步的數據,步以前的數據不會記錄,故悔棋只可悔步以內的棋。 五子棋游戲 + 博客 demo + React官網示例實現 github 源碼:https://github.com/moshang-xc/react-demo ...
閱讀 809·2021-11-25 09:43
閱讀 1673·2021-09-29 09:42
閱讀 1893·2019-08-30 15:55
閱讀 3413·2019-08-30 15:54
閱讀 2618·2019-08-30 13:20
閱讀 3500·2019-08-29 13:25
閱讀 908·2019-08-28 18:03
閱讀 1778·2019-08-26 13:44