后台菜单显示点击后404,如果adminhtml.xml配置正确,那是config.xml的问题
Magento Grid关联了多表后,表与表之间有相同字段出现。在后台点查询时出现报错解决用filter_index
$this->addColumn('name', array( 'header' => '返利商家', 'align' => 'right', 'width' => '50px', 'index' => 'vname', 'filter_index' =>'v.name', )); $this->addColumn('type', array( 'header' => '返利规则名', 'align' => 'right', 'width' => '50px', 'index' => 'name', 'filter_index' =>'main_table.name', ));
1.在后台管理界面加入菜单
1.1添加新菜单
<?xml version="1.0"?> <config> <menu> <!--子菜单标识符--> <dcatalog translate="title"> <title>推荐位管理</title> <sort_order>110</sort_order> <children> <recommend_product translate="title"> <title>商品推荐</title> <action>adminhtml/recommend_product</action> </recommend_product> <recommend_jifen translate="title"> <title>积分商户推荐</title> <action>adminhtml/recommend_jifen</action> </recommend_jifen> <recommend_image translate="title"> <title>图片推荐</title> <action>adminhtml/recommend_image</action> </recommend_image> </children> </dcatalog> </menu> <acl> <resources> <admin> <children> <dcatalog translate="title"> <title>推荐位管理</title> <children> <recommend_product translate="title"> <title>商品推荐</title> <sort_order>0</sort_order> </recommend_product> <recommend_jifen translate="title"> <title>商品推荐</title> <sort_order>0</sort_order> </recommend_jifen> <recommend_image translate="title"> <title>图片推荐</title> <sort_order>0</sort_order> </recommend_image> </children> </dcatalog> </children> </admin> </resources> </acl> </config>
1.2在已有菜单下添加:在模块的Glamour/CustomerMessage/etc目录下增加adminhtml.xml配置文件,用于加入自定义的菜单项。文件内容如下:
<?xml version="1.0"?> <config> <menu> <!-- 父菜单项标识,此处是在标题为Customers的菜单下加入子菜单--> <!-- Magento一级管理菜单标识和显示标题--> <!-- dashboard =>Dashboard catalog=>Catalog sales=>Sales customer=>Customers newsletter=>Newsletter cms=>CMS report=>Reports --> <customer> <children> <!--子菜单标识符--> <customermessage translate="title"> <title>Customer Message</title> <!--点击菜单时执行的动作,此处将执行controller/adminhtml目录下的messageController默认的action--> <action>adminhtml/message</action> <sort_order>120</sort_order> </customermessage > </children> </customer> </menu> <!--加入权限列表--> <acl> <resources> <admin> <children> <customer> <children> <customermessage translate="title"> <title>Customer Message</title> </customermessage> </children> </customer> </children> </admin> </resources> </acl> </config>
可以在后台,系统-》权限-》角色-》角色资源-》自定义 查看
2开发后台Controller
在模块的controllers目录下创建Adminhtml目录,新建一个Controller类。
<?php class Glamour_CustomerMessage_Adminhtml_MessageController extends Mage_Adminhtml_Controller_Action { public function indexAction() { $this->loadLayout() ->_setActiveMenu('customer') ->_addBreadcrumb('Customer Message', 'Customer Message') ->renderLayout(); } protected function _initData() { $id = $this->getRequest()->getParam('id', 0); $model = Mage::getModel('news/news'); if ($id > 0) { $model = $model->load($id); } Mage::register('form_data', $model); return $formdata; } public function editAction() { //页面回显 if (!$formdata = $this->_initData()) { return; } try{ $this->loadLayout(); $this->_setActiveMenu('customer/message'); $this->_addContent($this->getLayout()->createBlock('news/adminhtml_news_edit')) ->_addLeft($this->getLayout()->createBlock('news/adminhtml_news_edit_tabs')); $this->renderLayout(); } catch(Exception $e) { Mage::getSingleton('adminhtml/session')->addError('记录不存在'); $this->_redirect('*/*/'); } } public function newAction() { $this->_forward('edit'); } public function deleteAction() { $id = $this->getRequest()->getParam('id'); if ($id > 0) { try { $this->doDelete($id); Mage::getSingleton('adminhtml/session')->addSuccess('删除成功'); $this->_redirect('*/*/'); } catch (Exception $e) { Mage::getSingleton('adminhtml/session')->addError('删除失败'); $this->_redirect('*/*/edit', array('id' => $this->getRequest()->getParam('id'))); } } $this->_redirect('*/*/'); } public function saveAction() { if ($data = $this->getRequest()->getPost()) { try { $model = Mage::getModel('news/news'); $model->setData($data); $model->save(); Mage::getSingleton('adminhtml/session')->addSuccess('保存成功'); // check if 'Save and Continue' if ($this->getRequest()->getParam('back')=='edit') { $this->_redirect('*/*/edit', array('id' => $model->getId())); return; } $this->_redirect('*/*/'); } catch (Exception $e) { Mage::getSingleton('adminhtml/session')->addError($e->getMessage()); $this->_redirect('*/*/edit', array('id' => $model->getId())); return; } } $this->_redirect('*/*/'); } public function massDeleteAction() { $ids = $this->getRequest()->getParam('news'); if (!empty($ids)) { try { $this->doDelete($ids); Mage::getSingleton('adminhtml/session')->addSuccess(sprintf('删除 %d条成功', count($ids))); } catch (Exception $e) { Mage::getSingleton('adminhtml/session')->addError('删除失败'); } } $this->_redirect('*/*/'); } private function doDelete($id) { if (is_array($id)) { foreach ($id as $id) { $this->doDelete($id); } } else { Mage::getModel('news/news')->load($id)->delete(); } } public function exportCsvAction() { $fileName = 'fanli.csv'; $grid = $this->getLayout()->createBlock('rebates/adminhtml_order_grid'); $this->_prepareDownloadResponse($fileName, strip_tags($grid->getCsv())); //string 方式 // $this->_prepareDownloadResponse($fileName, $grid->getCsvFile($fileName)); //读export/xml方式导出,先写文件再读文件,性能不好 } }
后台的Controller类继承自Mage_Adminhtml_Controller_Action,在etc/config.xml加入:
</frontend> <admin> <routers> <adminhtml> <args> <modules> <customermessage before="Mage_Adminhtml">Glamour_CustomerMessage_Adminhtml</customermessage> </modules> </args> </adminhtml> </routers> </admin>
这样就可以使用和Magento自带的后台模块类似的url .../index.php/admin/message/来访问自定义模块的后台controller,也可以实现rewrite后台controller。
3开发后台Block
在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'; //block路径 $this->_blockGroup = 'news';//module name $this->_headerText = '管理'; $this->_addButtonLabel = '添加'; parent::__construct(); //$this->_removeButton('back');//reset save add } }
同样目录下继续建立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' => 'ID', 'align' => 'right', 'width' => '50px', 'index' => 'news_id', )); $this->addColumn('action', array( 'header' => '操作', 'width' => '100', 'type' => 'action', 'getter' => 'getId', 'actions' => array( array( 'caption' => '修改', 'url' => array('base' => '*/*/edit'), 'field' => 'id' ) ), 'filter' => false, 'sortable' => false, 'index' => 'stores', 'is_system' => true, )); $this->addExportType('*/*/exportCsv', 'CSV'); return parent::_prepareColumns(); } protected function _prepareMassaction() { $this->setMassactionIdField('news_id'); //checkbox value 需要_prepareMassactionColumn $this->getMassactionBlock()->setFormFieldName('news'); //checkbox name $this->getMassactionBlock()->addItem('delete', array( 'label' => '删除', 'url' => $this->getUrl('*/*/massDelete'), 'confirm' => '确认删除?' )); return $this; } protected function _prepareMassactionColumn() { $columnId = 'massaction'; $massactionColumn = $this->getLayout()->createBlock('adminhtml/widget_grid_column') ->setData(array( 'index' => $this->getMassactionIdField(), 'type' => 'massaction', 'name' => $this->getMassactionBlock()->getFormFieldName(), 'align' => 'center', 'disabled_values' => array(1, 3), // checkbox disabled values 'is_system' => true, //系统自带导出csv/excel中不显示 'use_index' =>true // 关联setMassactionIdField )); if ($this->getNoFilterMassactionColumn()) { $massactionColumn->setData('filter', false); } $massactionColumn->setSelected($this->getMassactionBlock()->getSelected()) ->setGrid($this) ->setId($columnId); $oldColumns = $this->_columns; $this->_columns = array(); $this->_columns[$columnId] = $massactionColumn; $this->_columns = array_merge($this->_columns, $oldColumns); return $this; } public function getRowUrl($row) //点击tr进入edit,去掉后显示# { return $this->getUrl('*/*/edit', array('id' => $row->getId())); } }
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 { //protected $_mode = 'edit';//form.php目录名 public function __construct() { parent::__construct(); $this->_objectId = 'id'; $this->_blockGroup = 'news'; $this->_controller = 'adminhtml_news'; $this->_updateButton('save', 'label', '保存'); $this->_updateButton('delete', 'label', '删除'); $this->_addButton('saveandcontinue', array( 'label' => Mage::helper('adminhtml')->__('Save and Continue Edit'), 'onclick' => 'saveAndContinueEdit()', 'class' => 'save', ), -100); $this->_formScripts[] =<<<JS function toggleEditor() { if (tinyMCE.getInstanceById('block_content') == null) { tinyMCE.execCommand('mceAddControl', false, 'block_content'); } else { tinyMCE.execCommand('mceRemoveControl', false, 'block_content'); } } function saveAndContinueEdit(){ editForm.submit(\$('edit_form').action+'back/edit/'); } JS; } public function getHeaderText() { if (Mage::registry('form_data') && Mage::registry('form_data')->getId()) { return ("Edit Item '%s'", $this->htmlEscape(Mage::registry('news_data')->getTitle()); } else { return 'Add Item'; } } public function _prepareLayout() { //add js css 需要添加此方法,其他可以删除 $this->getLayout()->getBlock('head') ->addJs('extjs/ext-tree.js') ->addJs('extjs/ext-tree-checkbox.js') ->addItem('js_css', 'extjs/resources/css/ext-all.css'); return parent::_prepareLayout(); } }
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(); } }
下面的是tab选项卡带form,可以不要。将$fieldset的内容放到上面去
<?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('News Information'); } protected function _beforeToHtml() { $this->addTab('form_section', array( 'label' => 'News Information', 'title' => 'News 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 { /*public function __construct() { parent::__construct(); $this->setTemplate('news/news/tab/form.phtml'); //用setTemplate时不需要用_prepareForm }*/ protected function _prepareForm() { $form = new Varien_Data_Form(); $fieldset = $form->addFieldset('news_form', array('legend' => 'Item information')); $fieldset->addField('title', 'text', array('label' => 'Title', 'class' => 'required-entry', 'required' => true, 'name' => 'title')); $model = Mage::registry('form_data'); $form->setValues($model->getData()); $this->setForm($form); return parent::_prepareForm(); } }
这样就完成了模块的创建。block是Magento的重要部分,这里我们创建了7个新闻模块功能,我们写了一些方法,并且将数据传递到布局。
这样我们便完成了新闻模块的开发,这是后台截图:
相信留心的人已经在看Mage_Widget模块了,对的就是从这里学到的。像这种例子还可以参考Mage_Centinel。目前我只能向大家讲些框架的理论,具体里面的业务逻辑,还要靠自己多看、多理解。学习Magento绝对是个体力活,希望大家能够少走些弯路。
相关推荐
"Magento添加后台管理addColumn"这个主题主要涉及的是如何在Magento的后台管理面板自定义添加新的数据列,以展示更多店铺运营的相关信息。这通常涉及到对Magento的MVC(Model-View-Controller)架构的理解,以及对...
首先,我们需要在Magento的后台管理界面的商品编辑页面添加一个新的按钮。这通常涉及到修改或者扩展相应的adminhtml模板文件,比如`app/design/adminhtml/default/default/template/catalog/product/edit.phtml`。在...
在后台管理插件中,你将创建一个或多个控制器来处理管理界面的交互,如添加、编辑、删除等操作。 4. **块(Block)**:块是用于渲染视图的类,它们处理数据并将其传递给模板文件。在后台管理插件中,你可能需要创建...
Magento 后台操作手册涵盖了 Magento 后台的基本操作、产品上传、分类管理、产品价格设置、图片上传、库存管理、商店设置、货币设置、首页基本信息修改等多个方面的内容,旨在帮助用户更好地使用 Magento 电子商务...
Magento是一款强大的开源电子商务平台,它的后台管理系统非常灵活且可扩展。在Magento的后台菜单中插入动态菜单是一项常见的自定义需求,这有助于商家根据自身业务需求定制管理界面。本篇文章将详细解析如何在...
标题提到的“magento 订单管理直接数据”意味着我们要探讨的是如何在Magento后台直接获取和操作订单的所有相关信息,而无需跳转到每个订单的单独详情页面。 在Magento的订单管理系统中,商家可以查看订单状态、客户...
在Magento后台,用户可以添加新产品,编辑现有产品,包括产品名称、描述、价格、库存信息、分类等。同时,也可以上传产品图片,确保商品信息的完整性和吸引力。在填写完所有必要信息后,用户需要点击“保存”按钮,...
在Magento的后台管理系统中,商家可以处理各种订单、管理产品、跟踪库存等。然而,原生的Magento系统并未提供在后台订单详情页面直接查看商品图片的功能。"magento 后台订单显示图片插件"就是为了弥补这个不足而设计...
此插件可能也对Magento的后台管理界面进行了优化,使得添加和编辑客户属性更加直观和便捷。管理员可以轻松地创建新属性,设置属性的可见性(例如,是否显示在注册表单上),以及决定哪些属性是必填的。此外,还可以...
- 在Magento后台,管理员可以在特定的管理面板查看日志,根据日期、操作类型或管理员ID筛选日志条目。 - 为了保证系统的正常运行,定期检查和清理日志是必要的,避免日志文件过大影响网站性能。 - 如遇到日志显示...
这个“zh_CN”文件很可能是Magento的中文语言包,包含所有界面文本的翻译,覆盖后台管理界面、前端展示、错误提示等所有部分。安装此汉化包后,无论是商家进行后台操作,还是顾客浏览前端页面,都能看到清晰的中文...
在电子商务系统中,为了提高工作效率以及方便管理人员查看订单详情,通常需要在后台管理系统中展示与订单相关的商品图片。Magento是一款非常流行的开源电子商务平台,它提供了丰富的功能来满足各种电商需求。本文将...
### Magento后台模块开发知识点 #### 一、概览 在Magento平台进行二次开发时,创建自定义后台模块是一项常见需求。这不仅可以扩展系统的功能,还能根据业务特定需求定制管理界面。本文将详细介绍如何从零开始构建一...
总结,Magento中文开发教程涵盖了Magento的基本操作、后台管理、界面定制、模块开发、API接口、性能优化和安全维护等多个方面。通过学习这个教程,无论是初学者还是经验丰富的开发者,都能更深入地理解和运用Magento...
7. **与Magento集成**:与Magento的后台管理界面无缝对接,不影响原有系统的其他功能,如分类管理、订单处理等。 在压缩包中的`package.xml`文件是Magento插件的标准配置文件,它定义了插件的元数据,包括版本信息...
6. **后台功能和表单元素**:Magento的后台管理界面允许管理员配置商店的各种设置。`后台功能列表.mmap`和`后台表单元素.txt`可能包含了关于如何创建和自定义后台功能及表单元素的信息。 7. **运行流程**:`运行...
然而,根据描述,这款插件目前仅支持省份的添加,省市区三级联动的功能还在开发中。这意味着虽然可以输入省份,但城市和区县的自动填充功能尚未实现。用户可能需要手动输入这些详细信息,这在一定程度上降低了填写...