Magento1.9 Images in Magento widgets

参考文章:http://stackoverflow.com/questions/5077755/images-in-magento-widgets

在创建widget时如果上传文件会发现文件无法上传,因为本页面默认的form不带 enctype= "multipart/form-data";

我的解决办法就是引用magento自带的一个上传图片的编辑器:

1、在myspace/mymodule/etc/widget.xml中添加新的node:

<image translate="label">
    <label>Image</label>
    <visible>1</visible>
    <required>1</required>
    <type>label</type>
    <helper_block>
        <type>widgets/cms_wysiwyg_images_chooser</type>- - - - - >你所建插入图片的的block地址
        <data>
            <button translate="open">
                <open>Insert Image...</open>
            </button>
        </data>
    </helper_block>
</image>

2、在myspace/mymodule/Widgets/Block/Cms/Wysiwyg/Images 下创建一个Chooser.php

<?php
class Stackoverflow_Widgets_Block_Cms_Wysiwyg_Images_Chooser extends Mage_Adminhtml_Block_Template
{
public function prepareElementHtml(Varien_Data_Form_Element_Abstract $element)
{
    $config = $this->getConfig();
    $chooseButton = $this->getLayout()->createBlock(‘adminhtml/widget_button‘)
        ->setType(‘button‘)
        ->setClass(‘scalable btn-chooser‘)
        ->setLabel($config[‘button‘][‘open‘])
        ->setOnclick(‘MediabrowserUtility.openDialog(\‘‘.$this->getUrl(‘*/cms_wysiwyg_images/index‘, array(‘target_element_id‘ => $element->getName())).‘\‘)‘)
        ->setDisabled($element->getReadonly());
    $text = new Varien_Data_Form_Element_Text();
    $text->setForm($element->getForm())
        ->setId($element->getName())
        ->setName($element->getName())
        ->setClass(‘widget-option input-text‘);
    if ($element->getRequired()) {
        $text->addClass(‘required-entry‘);
    }
    if ($element->getValue()) {
        $text->setValue($element->getValue());
    }
    $element->setData(‘after_element_html‘, $text->getElementHtml().$chooseButton->toHtml());
    return $element;
}
}
?>

3、这时候页面基本就出来了如上图  图片默认上传到 media/wysiwyg下面 图片上传之后我们就需要获取他的url然后放到params中

4、在ect/config.xml重写widget model

<global>
    <models>
        <widget>
            <rewrite>
                <widget>Myspace_Mymodule_Model_Widget</widget>
            </rewrite>
        </widget>
    </models>
</global>5、创建重写的model文件:code\local\Myform\Mymodule\Model\Widget.php:
<?php
class Stackoverflow_Widgets_Model_Widget extends Mage_Widget_Model_Widget
{
    public function getWidgetDeclaration($type, $params = array(), $asIs = true)
    {
        foreach($params as $k => $v){
            if(strpos($v,‘/admin/cms_wysiwyg/directive/___directive/‘) !== false){
                $parts = explode(‘/‘,parse_url($v, PHP_URL_PATH));
                $key = array_search(‘___directive‘, $parts);
                if($key !== false){
                    $directive = $parts[$key+1];
                    $src = Mage::getModel(‘core/email_template_filter‘)->filter(Mage::helper(‘core‘)->urlDecode($directive));
                    if(!empty($src)){
                        $params[$k] = parse_url($src, PHP_URL_PATH);
                    }
                }
            }
        }
        return parent::getWidgetDeclaration($type, $params, $asIs);
    }
}
6、这时候我们还需要重写一个东西:widget_instance
<global>
    <models>
        <widget>
            <rewrite>
                <widget>Myspace_Mymodule_Model_Widget</widget>
                <widget_instance>Myspace_Mymodule_Model_Widget_Instance</widget_instance>
            </rewrite>
        </widget>
    </models>
</global>7、创建重写的model文件:code\local\Myform\Mymodule\Model\Widget\Instance.php:
<?php
class Petbarn_Widgets_Model_Widget_Instance extends Mage_Widget_Model_Widget_Instance
{
    protected function _beforeSave()
    {
        if (is_array($this->getData(‘widget_parameters‘))) {
            $params = $this->getData(‘widget_parameters‘);
            foreach($params as $k => $v){
                if(strpos($v,‘/cms_wysiwyg/directive/___directive/‘) !== false){
                    $parts = explode(‘/‘,parse_url($v, PHP_URL_PATH));
                    $key = array_search(‘___directive‘, $parts);
                    if($key !== false){
                        $directive = $parts[$key+1];
                        $src = Mage::getModel(‘core/email_template_filter‘)->filter(Mage::helper(‘core‘)->urlDecode($directive));
                        if(!empty($src)){
                            $params[$k] = parse_url($src, PHP_URL_PATH);
                        }
                    }
                }
            }
            $this->setData(‘widget_parameters‘, $params);
        }
        return parent::_beforeSave();
    }
}8、上传文件调用了几个js我们需要引入:创建app\design\adminhtml\default\default\layout\local.xml
<?xml version="1.0"?><layout version="0.1.0">    <default>        <reference name="head">            <action method="addJs"><script>lib/flex.js</script></action>            <action method="addJs"><script>lib/FABridge.js</script></action>            <action method="addJs"><script>mage/adminhtml/browser.js</script></action>            <action method="addJs"><script>mage/adminhtml/flexuploader.js</script></action>        </reference>    </default></layout>
 
时间: 2024-08-02 17:53:42

Magento1.9 Images in Magento widgets的相关文章

Magento打印(配送单、退款单、发票)时PDF中的乱码问题

我使用Magento1.4.2,在其自带的TTF文件不能很好地解析中文字符,TTF文件的位置在网站根目录下的/lib/LinLibertineFont/中.打印的中文字符都是这样的 解决方法: 1.在Windows下复制一个MSYHBD.TTF(微软雅黑)至网站根目录下的/lib/LinLibertineFont/中 2.修改app\code\core\Mage\Sales\Model\Order\Pdf\Abstract.php [php] view plaincopy protected f

magento常用插件

magento插件插件集锦: 1. 删除订单:BoutikCircus_DeleteOrders URL:http://www.magentocommerce.com/e ... 4562/em_deleteorder 另一个同类插件: URL:http://www.magentocommerce.com/m ... yomind_orderseraser 2. 后台管理产品显示图片:TBT_Enhancedgrid URL:http://www.magentocommerce.com/m ..

magento 多域名多店铺

事前指导 我们使用的就是parked domain ,将你要添加的域名指向你的现有magento 文件根目录. 就像预习中提到的,我们有个magento站域名为one.com ,添加新的域名two.com.设置two.com的根目录为one.com的根目录. 此文章是基于magento1.2版本,其它的版本见本篇文章结尾处的提示. 实践 我们假设你的magento 原有的域名是 one.com ,想要实现magento多店的域名是two.com.首先你先安装好 one.com 的magento网

收集Magento FAQ常见问题处理办法

问题:Magento如何下载? 解答:Magento的英文官方下载地址为:http://www.magentocommerce.com/download 注意:需要注册后才可以下载,而且请下载完整版本(Full Release). 也可以通过SVN等方式下载. 问题:Magento如何安装? 解答:安装想必这个比较简单,就不解答了.或查看:http://www.magentochina.org/bbs/viewthread.php?tid=568&extra=page%3D1 问题:Magent

Magento(社区版)自带模块解析以及在国内的使用建议二

11.CatalogIndex 跟商品相关的几种索引(价格.属性等等)的处理模块,商品是系统的核心组件,处理商品索引相关的模块自然也是核心模块,必须是开启状态. 12.CatalogInventory 核心模块之一的"库存"模块,管理者Magento的商品库存相关的功能. Magento的库存逻辑,主要通过两个字段来控制:库存数量(Qty)和库存状态(Stock Availability),理论上只有该商品库存数量大于0并且库存状态是In Stock时,这个商品才是前台真正可以售卖的.

解决magento后台无法登陆/登陆没有反应的方法

安装过magento的几个版本,安装好后在登陆后台的时候都遇到了点问题,用户名和密码都输入正确,就是登陆不了后台,经过研究发现,登陆不了后台的主要是因为magento自身缓存设置的问题,最模板解决方法如下: magento登陆不了后台可以尝试以下几种方法解决: 方法一,用FF登陆后台,在 System—Configuration-Web-Session Cookie management….timeout 改为:86400 如果方法一不行,就用方法二 方法二:仍不能登陆请打开文件 app/cod

Magento 0元订单 支付方式 -- Magento 0 Subtotal Payment Method

需求 现有购物网站支持2种支付方式,但是考虑到会出现如下情况: 在一个优惠活动中,假如有一些订单的总金额为0, 那么这些订单就不必跳转到支付网关,现有支付方式无法处理此种情况. 分析 当customer输入订单的收货信息后,点击确认按钮,页面就会跳转到选择支付方式页面,默认流程是直接给出所有支付方式供customer选择,但是对于上面需求中提到的情况:假如订单总金额为0,那么就不应该直接给出所有支付方式,因为根本没有支付需求嘛.修改后的流程应该是先检测订单总金额,假如订单总金额等于0,则只提供一

Magento(社区版)自带模块解析以及在国内的使用建议一

本章开始逐个解析Magento1自带的模块,根据模块复杂度和重要性的不同,描述的方式也会有所区别,有些仅使用文字,有些会配上截图. 1.Admin 如字面意思,Admin模块是跟后台管理员相关的,具体来说,主要就是后台用户(admin_user表)和后台用户的权限管理(admin_role和admin_rule表).到1.9.2.3版本, 出于安全考虑新增了permission_variable和permission_block功能,这个就不细讲了,详见1.9.2.3的release-notes

修正magento快速搜索返回结果不准确

有时候发现用magento的mini 快速搜索搜出来的结果一点都不准确,跟实际结果相差甚大,这里发现修改一个地方即可修复这个问题. 打开app/code/core/Mage/CatalogSearch/Model/Resource/Fulltext.php 找 有时候发现用magento的mini 快速搜索搜出来的结果一点都不准确,跟实际结果相差甚大,这里发现修改一个地方即可修复这个问题. 打开app/code/core/Mage/CatalogSearch/Model/Resource/Ful