Magento 新闻模块开发教程 (九) 建立Block

① Django手把手从零开发个人博客-前言 手把手教你从零开始玩转手把手教你从零开始玩转Django,全面学习并了解django的运行机制、开发全流程及线上部署。Django,全面学习并了解django的运行机制、开发全流程及线上部署。 专栏介绍 本套教程遵循Django的设计思想,开门见山,快速切入主题,拒绝拖沓,在实战中学习每一个知识点,提高学习的趣味性以及个人成就感,并且能快速将所学运用到实际项目中。 将从零手把手带着你一步步完成博客的每一个功能,通过实现博客文章列表页、文章详情页、作者页面等功能来学习和了解django的视图查询模块相关知. 阅读详情

前面八章中我们已经先后建立了文件骨架,激活文件,前后端控制器,配置文件,辅助类,模型,SQL,模板,新闻模块开发的最后一步是创建block

在app\code\local\Voodoo\News\Block中创建News.php文件:

<?php
class Voodoo_News_Block_News extends Mage_Core_Block_Template
{
	public function _prepareLayout()
	{
		return parent::_prepareLayout();
	}
	public function getNews()
	{
		if (!$this->hasData('news')) {
			$this->setData('news', Mage::registry('news'));
		}
		return $this->getData('news');
	}
	public function getNewsList()
	{
		if (!$this->hasData('list')) {
			$this->setData('list', Mage::registry('list'));
		}
		return $this->getData('list');
	}
	function limitCharacter($string, $limit = 20, $suffix = ' . . .')
    {
		$string = strip_tags($string);
		if (strlen($string) < $limit) {
			return $string;
		}
		for ($i = $limit; $i >= 0; $i--) {
		$c = $string[$i];
		if ($c == ' ' OR $c == "\n") {
			return substr($string, 0, $i) . $suffix;
		}
		}
		return substr($string, 0, $limit) . $suffix;
	}
}

同样在app\code\local\Voodoo\News\Block\Adminhtml下,建立News.php文件:

class Voodoo_News_Block_Adminhtml_News extends Mage_Adminhtml_Block_Widget_Grid_Container
{
	public function __construct()
	{
		$this->_controller = 'adminhtml_news';
		$this->_blockGroup = 'news';
		$this->_headerText = Mage::helper('news')->__('Item Manager');
		$this->_addButtonLabel = Mage::helper('news')->__('Add Item');
		parent::__construct();
	}
}

app\code\local\Voodoo\News\Block\Adminhtml\News中建立Edit.php文件:

<?php
class Voodoo_News_Block_Adminhtml_News_Edit extends Mage_Adminhtml_Block_Widget_Form_Container
{
public function __construct()
{
parent::__construct();
$this->_objectId = 'id';
$this->_blockGroup = 'news';
$this->_controller = 'adminhtml_news';
$this->_updateButton('save', 'label', Mage::helper('news')->__('Save Item'));
$this->_updateButton('delete', 'label',Mage::helper('news')->__('Delete Item'));
$this->_addButton('saveandcontinue', array('label' => Mage::helper('adminhtml')->__('Save And Continue Edit'),
'onclick' => 'saveAndContinueEdit()',
'class' => 'save',
), -100);
$this->_formScripts[] = "function toggleEditor() {
if (tinyMCE.getInstanceById('news_content') == null) {
tinyMCE.execCommand('mceAddControl', false, 'news_content');
} else {
tinyMCE.execCommand('mceRemoveControl', false, 'news_content');
}
}
function saveAndContinueEdit(){
editForm.submit($('edit_form').action+'back/edit/');
}
";
}
public function getHeaderText()
{
if (Mage::registry('news_data') && Mage::registry('news_data')->getId()) {
return Mage::helper('news')->__("Edit Item '%s'", $this->htmlEscape(Mage::registry('news_data')->getTitle()));
} else {
return Mage::helper('news')->__('Add Item');
}
}
}

同样目录下继续建立Grid.php文件:

<?php
class Voodoo_News_Block_Adminhtml_News_Grid extends Mage_Adminhtml_Block_Widget_Grid
{
public function __construct()
{
parent::__construct();
$this->setId('newsGrid');
$this->setDefaultSort('news_id');
$this->setDefaultDir('ASC');
$this->setSaveParametersInSession(true);
}
protected function _prepareCollection()
{
$collection = Mage::getModel('news/news')->getCollection();
$this->setCollection($collection);
return parent::_prepareCollection();
}
protected function _prepareColumns()
{
$this->addColumn('news_id', array(
'header' => Mage::helper('news')->__('ID'),
'align' => 'right',
'width' => '50px',
'index' => 'news_id',
));
$this->addColumn('title', array(
'header' => Mage::helper('news')->__('Title'),
'align' => 'left',
'index' => 'title',
));
$this->addColumn('status', array(
'header' => Mage::helper('news')->__('Status'),
'align' => 'left',
'width' => '80px',
'index' => 'status',
'type' => 'options',
    'options' => array(
1 => 'Enabled',
2 => 'Disabled',
),
));
$this->addColumn('action',
array(
'header' => Mage::helper('news')->__('Action'),
'width' => '100',
'type' => 'action',
'getter' => 'getId',
'actions' => array(
array(
'caption' => Mage::helper('news')->__('Edit'),
'url' => array('base' => '*/*/edit'),
'field' => 'id'
)
),
'filter' => false,
'sortable' => false,
'index' => 'stores',
'is_system' => true,
));
$this->addExportType('*/*/exportCsv',
Mage::helper('news')->__('CSV'));
$this->addExportType('*/*/exportXml',
Mage::helper('news')->__('XML'));
return parent::_prepareColumns();
}
protected function _prepareMassaction()
{
$this->setMassactionIdField('news_id');
$this->getMassactionBlock()->setFormFieldName('news');
$this->getMassactionBlock()->addItem('delete', array(
'label' => Mage::helper('news')->__('Delete'),
'url' => $this->getUrl('*/*/massDelete'),
'confirm' => Mage::helper('news')->__('Are you sure?')
        ));
$statuses = Mage::getSingleton('news/status')->getOptionArray();
array_unshift($statuses, array('label' => '', 'value' =>
''));
$this->getMassactionBlock()->addItem('status', array(
'label' => Mage::helper('news')->__('Change status'),
'url' => $this->getUrl('*/*/massStatus', array('_current'
=> true)),
'additional' => array(
'visibility' => array(
'name' => 'status',
'type' => 'select',
'class' => 'required-entry',
'label' => Mage::helper('news')->__('Status'),
'values' => $statuses
)
)
));
return $this;
}
public function getRowUrl($row)
{
return $this->getUrl('*/*/edit', array('id' => $row->getId()));
}
}

app\code\local\Voodoo\News\Block\Adminhtml\News\Edit下创建Form.php和Tabs.php:

<?php
class Voodoo_News_Block_Adminhtml_News_Edit_Form extends Mage_Adminhtml_Block_Widget_Form
{
protected function _prepareForm()
{
$form = new Varien_Data_Form(array('id' => 'edit_form','action' => $this->getUrl('*/*/save', array('id' =>$this->getRequest()->getParam('id'))),'method' => 'post','enctype' => 'multipart/form-data'));
$form->setUseContainer(true);
$this->setForm($form);
return parent::_prepareForm();
}
}

<?php
class Voodoo_News_Block_Adminhtml_News_Edit_Tabs extends Mage_Adminhtml_Block_Widget_Tabs
{
	public function __construct()
	{
	parent::__construct();
	$this->setId('news_tabs');
	$this->setDestElementId('edit_form');
	$this->setTitle(Mage::helper('news')->__('Item Information'));
	}
	
	protected function _beforeToHtml()
	{
	$this->addTab('form_section', array(
	'label' => Mage::helper('news')->__('Item Information'),
	'title' => Mage::helper('news')->__('Item Information'),
	'content' => $this->getLayout()->createBlock('news/adminhtml_news_edit_tab_form')->toHtml(),));
	return parent::_beforeToHtml();
	}
}

最后在app\code\local\Voodoo\News\Block\Adminhtml\News\Edit\Tab下建立Form.php

<?php
class Voodoo_News_Block_Adminhtml_News_Edit_Tab_Form extends Mage_Adminhtml_Block_Widget_Form
{
	protected function _prepareForm()
	{
		$form = new Varien_Data_Form();
		$this->setForm($form);
		$fieldset = $form->addFieldset('news_form', array('legend'=> Mage::helper('news')->__('Item information')));
		$fieldset->addField('title', 'text', array('label' => Mage::helper('news')->__('Title'),'class' => 'required-entry','required' => true,'name' => 'title',));
		$fieldset->addField('filename', 'file', array('label' => Mage::helper('news')->__('File'),'required' => false,'name' => 'filename',));
		$fieldset->addField('status', 'select', array('label' => Mage::helper('news')->__('Status'),'name' => 'status','values' => array(array('value' => 1,'label' => Mage::helper('news')->__('Enabled'),),array('value' => 2,'label' => Mage::helper('news')->__('Disabled'),),),));
		$fieldset->addField('content', 'editor', array('name' => 'content','label' => Mage::helper('news')->__('Content'),'title' => Mage::helper('news')->__('Content'),'style' => 'width:700px; height:500px;','wysiwyg' => false,'required' => true,));
		if (Mage::getSingleton('adminhtml/session')->getNewsData())
		{
		$form->setValues(Mage::getSingleton('adminhtml/session')->getNewsData());
		Mage::getSingleton('adminhtml/session')->setNewsData(null);
		} elseif (Mage::registry('news_data')) {
		$form->setValues(Mage::registry('news_data')->getData());
	}
		return parent::_prepareForm();
	}
}

这样就完成了模块的创建。block是Magento的重要部分,这里我们创建了7个新闻模块功能,我们写了一些方法,并且将数据传递到布局。

这样我们便完成了新闻模块的开发,这是后台截图:

这是前台:


好了,新闻模块的教材就到这里,有什么问题可以和我交流,大家共同进步!


华为od 面试八股文_C语言_01_含答案 阅读详情

相关推荐

MICS-6814多气体传感器与ESP32-C3 Mini接口构建空气监测系统

cararenuity C3 Mini的多个ADC引脚,Wi-Fi和蓝牙LE以及紧凑的设计使其成为嵌入式物联网应用的绝佳选择。在这个项目中,我们将把MICS-6814多气体传感器与基于esp32 -C3的开发板cararenuity C3 Mini连接起来。更多模拟引脚:与ESP8266只有一个ADC引脚不同,基于esp32 -C3的cararenuity C3 Mini提供多个ADC引脚,使其成为多传感器应用的理想选择。紧凑可靠:该板的小尺寸使其成为嵌入式应用的理想选择,而不会牺牲性能。

hie98894的博客 770

Magento源码分析–Magento 核心类 Varien_Data_Collections

这节打算介绍一下Magento的Varien_Data_Collections,我从Alanstorm翻译过来的(部分翻译,读者也可以练一下英文能力) Varien Data Collections 这是什么东西?哈哈,你看完下面的文章,你就会知道它在Magento中的核心的作用了。 作为一个PHPer,如果想把一些一组相关的变量集合在一起有两个方法:Array 和自定义的数据结构,Varie

davidliu0327的专栏 1873

滤波算法-呼吸心跳信号检测方法(四)

呼吸心跳信号检测系列文章:信号滤波处理

yjh_2019的博客 6269

magento block controller layout

1. ./code/community/Zendesk/Zendesk/Block/Adminhtml/Dashboard/Grids.php $this-&gt;getLayout()-&gt;createBlock('zendesk/adminhtml_dashboard_tab_tickets_grid_all')-&gt;toHtml(); ./code/community/Zen...

Terry - 专注外贸B2C 862

从零到一:AIC8800 USB-WiFi模块在Linux内核6.x下的驱动适配与避坑指南

本文详细介绍了AIC8800 USB-WiFi模块在Linux内核6.x下的驱动适配全流程,包括环境准备、源码编译、内核API变更处理及常见问题解决方案。重点针对驱动适配中的符号导出、设备ID识别和固件加载等核心挑战提供实用指南,帮助开发者高效完成硬件驱动兼容性调试。

k8l9m0n的博客 1026

从Chiplet到UCIE:D2D互联技术如何重塑半导体设计生态

本文探讨了D2D互联技术在半导体设计中的革命性作用,从Chiplet到UCIE标准的演进如何重塑行业生态。详细分析了D2D互联的技术本质、架构选择及UCIE标准带来的变革,并展望了未来光学D2D和3D集成等趋势。高速互联接口技术的突破为AI加速器和计算芯片提供了更高带宽和能效。

weixin_29292535的博客 931

magento php 所需模块,Magento2创建自定义模块步骤/教程

Magento2模块开发是magento开发人员必备的技能,此片文章中我们将一步一步教您在Magento2中创建一个HelloWorld模块,基本要求在Magento 2中启动模块开发过程之前,请确保满足以下要求:安装最新版本的Magento 2,即2.1(如果您使用的是旧版本)。如果您不想在每次更改编码时从Web存储中删除缓存,则应禁用Magento缓存。这将节省您的时间并加快您的模块开发过程。...

weixin_36139240的博客 610

Python语言在工业控制中的简单应用

在工业控制中,经常需要对采集到的数据进行分析和处理,Python的这些库可以简化这一过程。传统的工业控制系统多依赖于专用的控制硬件和软件,但随着技术的发展,开放性和灵活性成为了新的需求焦点。还有,Python社区活跃,提供了大量的开源代码和模块,这对于工业控制领域来说是一个巨大的资产。Python作为一种高级编程语言,因其简洁的语法、强大的库支持和广泛的社区资源而在工业界获得了快速的发展和广泛的应用。在工业控制领域,Python的应用日益增多,这得益于其跨平台性、脚本语言的灵活性以及与硬件设备交互的能力。

2303_78014702的博客 1721

magento 创建block create structural blocks

Step 1: Name the structural block Open the file layout/page.xml in your active theme folder. Inside you will find lines like: &lt;block type="core/text_list" name="left" as="left"/&gt; &lt;block ty...

Just Code 204

AutoSAR EcuM系列01- EcuM模块的功能概述和变体类型

在【ECU的软硬件架构】文章中我们了解ECU的功能和组成,那么ECU具体是怎么启动的呢?我们知道,AutoSAR标准架构有三层,即APPL应用层、RTE层和BSW层。而这些层又被进一步划分为更多单独的组件,如BSW层可能有80多个组件。在ECU启动时,这些组件必须相互交互,有时也必须以某种顺序交互。这些组件的启动顺序由ECU管理器模块或EcuM处理。EcuM负责整个ECU的初始化和去初始化,包括对一些系统模块如。......

1766

国社科基金申报书“选题与说明依据”用AI怎么写?借助Gemini 3 Pro一次理清研究演进逻辑

研究进展部分要明确指出已有研究的不足与局限,比如方法不足、数据或材料受限、研究视角单一等等局限,之后要找准研究切入点,自然引申出自己的研究问题。为提升课题申报书的质量,学术史梳理要遵循述评结合、中外结合、新老结合的原则,不仅“述”,更要“评”,兼顾国内研究与国际学术动态,统筹经典研究与最新成果。它是对选题的整体概述,需阐明研究的具体问题、视角以及核心概念。2)存在问题或争议:结合已有研究或实践现状,指出该领域在理论建构、测量工具、实践应用或研究结论方面仍存在的不足、空白或争议,明确研究的必要性;

智能AI让学术科研更容易 941

magento 开发 得到block的方法

开发文档:https://devdocs.magento.com/guides/m1x/magefordev/mage-for-dev-4.html   1. 在controller部分直接通过createBlock()的方式,直接创建得到$block public function indexAction() { //Get current layout state $this-&gt;...

Terry - 专注外贸B2C 1041

【毕业设计】基于雷达与深度学习的摔倒检测——雷达数据集的建立

运动物体的微多普勒效应为人体动作识别提供了可能,基于雷达的居家检测具有良好的隐私保护性,且不易受环境因素影响(如光照、温度等),近年来已受到国内外学者的广泛关注。基于雷达与深度学习的摔倒检测使用自建的雷达数据集进行人体摔倒检测的研究。雷达数据集的建立分为雷达数据采集和雷达数据处理两部分工作。

洋洋Young的博客 3403

magento新闻模块开发(二)

Magento提供了强大的Grid Widget使我们能够方便的创建数据表格,现在我们为新闻模块创建后台数据表格。 修改config.xml配置文件,添加admin路由 <config> <admin> <routers> ...

chuoban7047的博客 154

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

magento新闻模块开发(一)

Magento模块开发的简单示例 开发模式下开启日志记录,方便调试。 System->Developer magento/var 要开启777权限,/var/log目录下能看到(exception.log,system.log)。 模块文件 (Xinson为Packag...

chuoban7047的博客 174

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

magento模块 -重写某个magento模块的某个controller

重写某个magento模块的某个controller 当你需要对magento的某个功能进行修改时,创建新的模块重写现有模块的某个controller是必然的,因为你只是想修改其中的某个方法,而不需要动其它的controller,其它的类。 以重写checkout 模块的 OnepageController.php 为例子: step one:创建新并注册新的模块 

magento网站建设,magento模板开发,magento支付模块 2912

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

php magento 开发,Magento二次开发:一个简单的Magento模块示例

电商二次开发,Magento的市场份额一定是不容忽视的,但是magento的学习难度想对较大,很多都在学习的路上迷失了。作为入门级文章,刚开始上手,不知道Magento模块到底该怎么写,也许你熟悉ThinkPHP,YII框架,它是直接将控制器Controller中的所取得相关数据直接传递到视图层View的方法,而Magento虽然也是MVC三层,但是在中间多了布局对象Layout与区块Block之...

weixin_34521351的博客 933

Magento的block重写规则

<br />Magento的block重写规则是帮助和模型覆盖相似。Magento的遵循MVC模式,但在Magento块是额外的一层。块类特定模板块呈现数据。Magento的介绍伟大的模板设计系统block制度。<br />块是一个途径,使Magento的区分系统中的功能阵列,并创建一个模块化的方式来管理,从视觉和功能的观点来看它。magento有两种类型的块,他们共同创造的视觉输出。<br />* Structural Blocks<br /> <br />* Content Blocks<br /> <

rogerbakerpeng的专栏 3208

Magento2.x 插件 Module(模块) 开发实战

Magento2.x 插件 Module(模块) 开发实战 一、基本简介 1、开发的插件模块代码同一放在 : app/code/ 目录下; 2、模块的文件命名规则: app/code/namespace/module a. namespace:这里我用的 Plugin 命名 b. module :这里我用的 Test 命名 3、测试

小周 4733

magento中的block

接着上一篇magento创建了控制器后,这里接着在控制器中指定布局文件: 1 Test>News>Block>Hello>Hello.php,创建一个类,写一个简单函数: class Test_News_Block_Hello_Hello extends Mage_Core_Block_Template{ public function hello(){ return " hello wor

Chengliangyao的博客 583

Magento2创建自定义模块步骤/教程

Magento2模块开发是magento开发人员必备的技能,此片文章中我们将一步一步教您在Magento2中创建一个HelloWorld模块, 基本要求 在Magento 2中启动模块开发过程之前,请确保满足以下要求: 安装最新版本的Magento 2,即2.1(如果您使用的是旧版本)。 如果您不想在每次更改编码时从Web存储中删除缓存,则应禁用Magento缓存。这将节省您的时间并加快您的模块开...

lemonminer的博客 1154

magento Block

1、直接在HomePage中调用(只限首页): 修改layout中的xml代码 block_id 通过修改reference 中的name属性值调整主体位置,通过block中的before或after属性值调整相对顺序 CMS 页以及static block还可以通过如下方法调用: {{block type=”cms/block”  name=”user-block”

yuxiaoqing19871003的专栏 809

magento php 所需模块,Magento二次开发:一个简单的Magento模块示例

电商二次开发,Magento的市场份额一定是不容忽视的,但是magento的学习难度想对较大,很多都在学习的路上迷失了。作为入门级文章,刚开始上手,不知道Magento模块到底该怎么写,也许你熟悉ThinkPHP,YII框架,它是直接将控制器Controller中的所取得相关数据直接传递到视图层View的方法,而Magento虽然也是MVC三层,但是在中间多了布局对象Layout与区块Block之...

weixin_30583711的博客 349

如何重写或者扩展magento内置Block

<br /> <br />如何重写或者扩展magento内置Block<br />Block是magento中一个很重要的组长部份,在安装了magento后,magento自身带了很多的模块,模块中有很多的Block,一般一个Block对应一个模板文件表示html的输出.<br />如果我们要修改magento增加其功能适应自己的需求,一般都会涉及到要扩展原来的magento.下面我们通过一个例子说明怎么扩展Block<br />如在上面的图中我们增加了‘打印’按钮<br /> <br />(1):新建好如

滴水穿石的专栏 1297

magento -- magento 左右列block的定位问题

magento的block可以说是magento世界中的分子了.每个block代表一个功能.block本身也可以说是采用了MVC模式设计,所以使用和删除都是比较容易的,独立性也是不错的.当然是相对而言的.如果把magento的block译成砖头的话,每一个magento的页面,其实都是由一系列的"magento 砖头"组成的. magento的block分成两种,一种是用来定位的,一种是用

magento网站建设,magento模板开发,magento支付模块 1373

magento缓存系列详解:如何缓存一个block

magento是基于zend framework的,所以cache的使用基本也继承了他的一些特性。我们要知道缓存中有几个重要的概念: 数据本身;数据的标识;缓存生命期;缓存操作接口; Zend_Cache 的使用比较简单, 它可以把数据保存到 File, Memcache, SQLite 等介质(称为后端, Backend)中. 还有前端(Frontend), 主要用来对要缓存的数据进行转换,

jonas的magento博客 4520
上一篇: Magento 新闻模块开发教程 (八) 建立模板文件
下一篇: Magento前台只有产品的缩略图不显示?
ddjohn
博客等级 码龄17年 36粉丝 135原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值