SUPEEパッチ8788のインストール後の管理パネルの問題


9

私が持っているMagentoのCE 1.9.2.4が一緒にインストールされたパッチ(5377,1533,4788など、ほぼすべてのパッチを)。

この質問は、コアセクションのmagentoの問題だけでなく、カスタムセクションでの画像のアップロードを含むカスタムモジュールで発生する可能性のある問題も明らかにします。

  1. コマンドラインから最新のパッチ8788をインストールした後、カスタムモジュールの[追加/編集]ページを開くことができなくなりました。これは8788のインストール前は問題なく機能していました。

モジュールの「Add New Banner」ページを開こうとすると、以下のエラーが発生します。

致命的なエラー:/home/site_user/public_html/app/code/community/My/Module/Block/Adminhtml/Banner/Add/Tab/Image.phpの57行目の非オブジェクトに対するメンバー関数setUrl()の呼び出し

原因は次のとおりです。

$this->getUploader()->getConfig()->setUrl(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'))
  1. また、管理Catalog > Manage Products > Any product > Imagesセクションにアップロード済みの製品画像が表示されません。

以下は、Mage_Adminhtml_Block_Media_Uploader呼び出されるコアクラスです。

<?php
/**
 * Magento
 *
 * NOTICE OF LICENSE
 *
 * This source file is subject to the Open Software License (OSL 3.0)
 * that is bundled with this package in the file LICENSE.txt.
 * It is also available through the world-wide-web at this URL:
 * http://opensource.org/licenses/osl-3.0.php
 * If you did not receive a copy of the license and are unable to
 * obtain it through the world-wide-web, please send an email
 * to license@magento.com so we can send you a copy immediately.
 *
 * DISCLAIMER
 *
 * Do not edit or add to this file if you wish to upgrade Magento to newer
 * versions in the future. If you wish to customize Magento for your
 * needs please refer to http://www.magento.com for more information.
 *
 * @category    Mage
 * @package     Mage_Adminhtml
 * @copyright  Copyright (c) 2006-2016 X.commerce, Inc. and affiliates (http://www.magento.com)
 * @license    http://opensource.org/licenses/osl-3.0.php  Open Software License (OSL 3.0)
 */

/**
 * Adminhtml media library uploader
 *
 * @category   Mage
 * @package    Mage_Adminhtml
 * @author      Magento Core Team <core@magentocommerce.com>
 */

/**
 * @deprecated
 * Class Mage_Adminhtml_Block_Media_Uploader
 */
class Mage_Adminhtml_Block_Media_Uploader extends Mage_Uploader_Block_Multiple
{
    /**
     * Constructor for uploader block
     */
    public function __construct()
    {
        parent::__construct();
        $this->getUploaderConfig()->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/upload'));
        $this->getUploaderConfig()->setFileParameterName('file');
    }
}

誰でも私に、最小限のコード変更でこれを修正する方法を教えてくれました


getUploaderメソッドの内容を投稿していただけませんか?
デジタルピアニズムでのラファエル、

確認して、質問を更新してください。
Vicky Dev 2016年


1
@TejabhagavanKollepara急いで重複をマークする前に、質問の両方のケースを確認してください。
Vicky Dev 2016年

1
@VickyDevちょうどここでそれを解決しmagento.stackexchange.com/questions/141775/...
Qaisar Satti

回答:


17

Mage_Adminhtml_Block_Media_UploaderSUPEE-8788(および1.9.3)以降は非推奨です。したがって、アップローダーを使用してモジュールを壊す後方互換性のない変更がいくつかあります。

私は最初、小さな変更でそれを修正できると思っていましたが、実際にはもっと多くの方法があります。

1.9.2および1.9.3と互換性のあるギャラリーを使用してモジュールを作成する

したがって、モジュールプロバイダーの場合、1.9.2と1.9.3に2つの異なるバージョンのモジュールを用意する必要はありません。コードを両方に対応させる方法は次のとおりです。

ブロック_prepareLayoutメソッドでは、次のことを行う必要があります。

交換:

 $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));

と:

    if (class_exists("Mage_Uploader_Block_Abstract")) {
        // PATCH SUPEE-8788 or Magento 1.9.3
        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget($url);

        $browseConfig = $this->getUploader()->getButtonConfig();
        $browseConfig
            ->setAttributes(
                array("accept"  =>  $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg'))
            );
    } else {
        $this->getUploader()->getConfig()
            ->setUrl($url)
            ->setFileField('image')
            ->setFilters(array(
                'images' => array(
                    'label' => Mage::helper('adminhtml')->__('Images (.gif, .jpg, .png)'),
                    'files' => array('*.gif', '*.jpg','*.jpeg', '*.png')
                )
            ));
    }

class_existsご覧のとおり、SUPEE-8788またはMagento 1.9.3が適用されているかどうかを確認するために使用しています。

次に、あなたgallery.phtmlが交換する必要があります:

var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);

と:

<?php if (class_exists("Mage_Uploader_Block_Abstract")): ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
<?php else: ?>
    var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php if ($_block->getElement()->getReadonly()):?>null<?php else:?><?php echo $_block->getUploader()->getJsObjectName() ?><?php endif;?>, <?php echo $_block->getImageTypesJson() ?>);
<?php endif; ?>

次に、レイアウトファイルに対して、次のように実行できます。

<reference name="head">
    <action method="addJs"><file helper="module/getFlowMin" /></action>
    <action method="addJs"><file helper="module/getFustyFlow" /></action>
    <action method="addJs"><file helper="module/getFustyFlowFactory" /></action>
    <action method="addJs"><file helper="module/getAdminhtmlUploaderInstance" /></action>
</reference>

moduleヘルパークラス識別子に置き換え、モジュールData.phpヘルパーに以下を追加します。

protected function _isNoFlashUploader()
{
    return class_exists("Mage_Uploader_Block_Abstract");
}

public function getFlowMin()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/flow.min.js" : null;
}

public function getFustyFlow()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow.js" : null;
}

public function getFustyFlowFactory()
{
    return $this->_isNoFlashUploader() ? "lib/uploader/fusty-flow-factory.js" : null;
}

public function getAdminhtmlUploaderInstance()
{
    return $this->_isNoFlashUploader() ? "mage/adminhtml/uploader/instance.js" : null;
}

1
ともsetUrl変わりsetTargetます。
Qaisar Satti、2016

Magento 1.9.3.8のcsvファイルアップロードの問題で動作します。すごい!
Igor Revenko

3

@Raphaelの回答を追加するには、3つの修正を追加する必要があります

最初の修正

Spacename_Moduelname_Block_Adminhtml_Modulename_Edit_Tab_Images.php

protected $_uploaderType = 'uploader/multiple';
public function __construct()
{
    parent::__construct();
    $this->setTemplate('moduelname/gallery.phtml');
    ....
}
protected function _prepareLayout()
    {
 $this->setChild('uploader',
            $this->getLayout()->createBlock($this->_uploaderType)
        );

        $this->getUploader()->getUploaderConfig()
            ->setFileParameterName('image')
            ->setTarget(Mage::getModel('adminhtml/url')->addSessionParam()->getUrl('*/*/image'));

        $browseConfig = $this->getUploader()->getButtonConfig();
        $browseConfig
            ->setAttributes(array(
                'accept' => $browseConfig->getMimeTypesByExtensions('gif, png, jpeg, jpg')
            ));
     return parent::_prepareLayout();
    }

adminhtml / default / default / modulename / gallery.phtmlファイルの2番目の修正

 <script type="text/javascript">
//<![CDATA[
var <?php echo $_block->getJsObjectName(); ?> = new Product.Gallery('<?php echo $_block->getHtmlId() ?>', <?php echo $_block->getImageTypesJson() ?>);
//]]>
</script>

3番目に、jsパーツのレイアウト/module.xmlを修正します

<reference name="head">
            <action method="addJs"><file>lib/uploader/flow.min.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow.js</file></action>
            <action method="addJs"><file>lib/uploader/fusty-flow-factory.js</file></action>
            <action method="addJs"><file>mage/adminhtml/uploader/instance.js</file></action>
</reference>

動きを修正するファイル

最初の修正 app / code / core / Mage / Adminhtml / Block / Catalog / Product / Helper / Form / Gallery / Content.php

2番目の修正 app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml


修正用のファイルについても言及すると、非常に役立ちます。
Vicky Dev 2016年

@VickyDevもファイル名を追加しました。
Qaisar Satti、2016

回答ありがとうございます。ただし、これはCore Magento製品の画像で発生するため、最初の2つの変更をどこで行う必要がありますか?パッチ8788がインストールされたMagento ce 1.9.2.4。
Vicky Dev 2016年

1
しかし、ここにチャット表示に移動するためのリンクはありません。
Vicky Dev 2016年

1
@QaisarSattiは、コードが1.9.2と1.9.3の両方と互換性があるようにコードを更新したことを確認しています;)
デジタルピアニズムのラファエル

2

修正済み-MagentoバージョンCE 1.7.0.2-1.9.2.4のPATCH 8788インストール後の画像アップロードの問題。

I was able to fix it,Please Follow following instruction.

手順>> 1:セキュリティパッチ8788が正常にインストールされたら、管理パネルに移動してすべてのMagentoキャッシュフラッシュしてください。次に、管理パネルからログアウトし、管理パネル再ログインします。

ステップ>> 2:インデックス管理に移動し、すべてのMagentoキャッシュをもう一度フラッシュした後、すべてのデータのインデックスを選択します。

ステップ>> 3:この非常に重要なステップである 、ブラウザーのキャッシュを削除(Ctrl + Shift + Delete)履歴は、Cookieを含むブラウザーからすべての閲覧データを消去します。

ステップ>> 4:カタログに移動>>製品管理、任意の製品の新しい画像を追加します。これで、すべてが正常に機能していることがわかります。


0

私は同じ問題のケース2を経験していました。私の場合、それはこのファイルがカスタムモジュールによって上書きされたことが原因でした:

app / design / adminhtml / default / default / template / catalog / product / helper / gallery.phtml

そのブロックのテンプレートを上書きする同様のテンプレートがあるかどうかを確認しMage_Adminhtml_Block_Catalog_Product_Helper_Form_Gallery_Content、そうである場合はSupee-8788、上書きするファイルにパッチを適用することをお勧めします。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.