12

Magentoシステムで、多数の属性の保存がまったく機能しないか、部分的にしか機能しないという問題が発生しています。これはJavaScriptに関連する問題のようで、Stack Overflowの誰かがこの状況に対処するための「既知の科学」を持っているか、正しい方向を示すことができると期待していました。

基本的な問題は、問題のMagentoシステムに250を超えるカラー属性オプションラベルがあることです。管理者ユーザーが次のようにしてこれらを管理しようとした場合

  • [カタログ]->[属性]->[属性の管理]に移動します
  • 色属性の選択
  • [ラベル/オプションの管理]タブをクリックします
  • 最後のラベルオプションの編集
  • [保存して編集を続行]をクリックします

2つのうちの1つが起こります。

OSX上のGoogleChromeでは、ボタンが「押された」状態のままになり、しばらくすると、GoogleChromeの「このページは応答しません」という強制終了ダイアログが表示されます。

OS X上のMozillaベースのブラウザでは、ボタンをクリックするとブラウザが少し「考え」ますが、最終的にはフォームを送信します。 ただし、属性ラベルのリストの一部のみが管理コントローラーに送信されます。つまり、他のラベルは送信されないため、ユーザーは最初の75〜100個のラベルしか編集できません。

2番目の動作についても説明しているWindowsユーザーからのレポートがあります(ブラウザーは非特定です)

明らかな答えは、パフォーマンスの低いjavascriptを調査するか、(Grouch Marxスタイルで)「それを行わない」ことです。そのページのJavaScriptのプロファイリング/発掘に時間を費やす前に、これに対する既知の修正、または問題の原因に関する特定の知識があることを期待していました。

Magento CE 1.7.x、それが重要な場合。

更新: Javascriptのパフォーマンスの問題は問題です。これらは、で繰り返される膨大な数の入力フィールドが原因です。

js/prototype/validation.js

特にこのtrycatchブロックでは

    try {
        if(this.options.stopOnFirst) {
            result = Form.getElements(this.form).all(function(elm) {
                if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                    return true;
                }
                return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
            }, this);
        } else {
            result = Form.getElements(this.form).collect(function(elm) {
                if (elm.hasClassName('local-validation') && !this.isElementInForm(elm, this.form)) {
                    return true;
                }
                return Validation.validate(elm,{useTitle : useTitles, onElementValidate : callback});
            }, this).all();
        }
    } catch (e) {
    }

ただし、これを短絡して関数をtrueに戻しても、すべてのラベルを保存しないという動作は持続します。

4

6 に答える 6

18

変数max_input_vars(PHP 5.3.9で導入)を試すことができます。デフォルトでは1000なので十分ですが、構成で使用する量が少ない場合があります。しかし、私はあなたが経験している主要なパフォーマンスの問題のためにフォームがうまくいかないことを想像します。

オプションラベルについて:変更により、属性画像のアップローダーがありますか?300を超えるメーカーオプションがあるショップにGoMageAdvancedNavigation拡張機能をインストールしたときにもまったく同じ問題が発生しました(拡張機能はMagentoの組み込みFlashアップローダーを使用します)。

その機能の拡張機能がなかったので、アップローダーを無効にしましたが、ロードされている300のFlashムービーで、パフォーマンスが大幅に低下したことは間違いありません。ムービーの代わりにボタンまたはリンクを挿入することで、オプションごとにアップローダーを遅延読み込みしてみることができます。

これがあなたを正しい(または正確な)方向に向けることを願っています。

于 2012-11-29T21:42:44.640 に答える
12

[実用的なソリューション]

こんにちは、Alan Stormが述べたように、この使用法は、オプションラベル入力の検証を処理するJSロジックに関連しています。私は自分のクレントの1つのプロジェクトでこの問題を抱えていて、それを解決する簡単な拡張機能を作成しました。

ここで拡張機能をダウンロードできます:https ://github.com/Jarlssen/Jarlssen_FasterAttributeOptionEdit

基本的に、拡張機能は元のオプションテンプレートを私のテンプレートに置き換えます。私のテンプレートでは、テンプレートの下部にあるJSのほとんどを書き直し、フォーム入力をdiv要素(疑似入力)に置き換えたため、管理者が疑似入力をクリックすると、実際の入力に置き換えられました。このようにして、すべての入力の検証を回避し、編集されたエントリと新しく追加されたエントリのみを検証します。この拡張機能は、チャンクにオプションを追加する場合にうまく機能します。たとえば、属性の保存ごとに500エントリです。

願っています、それは助けになります。

追加情報:http ://www.jarlssen.de/blog/2014/05/07/magento-timeout-saving-attribute-options-type-multiple-select-and-dropdown

疑似生成コードをざっと見てみましょう。

<tr class="option-row">
<?php foreach ($this->getStores() as $_store): ?>
    <td>
    <div class="replace-content pseudo-input input-text <?php if($_store->getId()==0): ?> required-option<?php endif; ?>" id="option[value][<?php echo $_value->getId() ?>][<?php echo $_store->getId() ?>]"><?php echo $_value->getData('store' . $_store->getId()) ?></div>
    </td>
    <?php endforeach; ?>
    <td>
        <div class="replace-content pseudo-input" id="option[order][<?php echo $_value->getId() ?>]"><?php echo $_value->getSortOrder() ?></div>
    </td>
    <td class="a-center default-checkbox">
        <div id="option_<?php echo $_value->getId() ?>" class="checkbox-radio-container replace-content">
        <?php if($_value->getChecked()) : ?>
            <input class="input-radio" type="<?php echo $defaultChooserInputType; ?>" name="default[]" value="<?php echo $_value->getId() ?>" checked <?php if ($this->getReadOnly()):?> disabled="disabled"<?php endif;?>/>
        <?php else : ?>
            <?php if('radio' == $defaultChooserInputType) : ?>
                <span class="fake-radio"></span>
            <?php else : ?>
                <span class="fake-checkbox"></span>
            <?php endif; ?>
        <?php endif; ?>
        </div>
    </td>
    <td class="a-left actions-column" id="delete_button_container_<?php echo $_value->getId() ?>">
        <div id="option[delete][<?php echo $_value->getId() ?>]" title="<?php echo $this->__('Delete') ?>" class="scalable left pseudo-delete-option">
        <span class="pseudo-delete-button" option_id="<?php echo $_value->getId(); ?>">
            <span>
                <span><?php echo $this->__('Delete') ?></span>
            </span>
        </span>
        </div>
    </td>
</tr>
于 2014-05-09T12:46:21.633 に答える
3

私はまさにこの問題を抱えていました(POSTが切り捨てられました)。これは、POST制限が少なすぎるsuhosinパッチに起因します。(または標準のPHP post_max_size)

php.iniでこれらの値を確認し、必要に応じて値を増やします(そしてapacheを再起動します):

post_max_size
suhosin.post.max_vars
suhosin.request.max_vars

2番目の問題(JSパフォーマンスの問題)については、私はあなたを助けることができません

于 2012-11-29T20:53:48.593 に答える
1

ごめん!!

私はこれと同じ問題を経験しました、解決策は以下の通りです。

問題の説明

問題

顧客はタイヤのベースが非常に大きく、同じ車に多くの車が追加されているため、タイヤと車の間の係留を移行するために、IDの属性の255文字のみがテーブルに挿入され、移行でエラーが発生しました。

Magentoは、IDが、で区切られた文字列を挿入します

この問題は、値フィールドのテーブル「catalog_product_entity_varchar」で発生しました。テキストを入力して解決した場合、デフォルトでは255文字です。

注:DBを変更するのは適切ではありませんが、残念ながらこの操作を実行する必要がありました。

製品例

タイヤ175/65R14

->
製造(+ --200オプション)->モデル(+-4milオプション)
->シリーズ(+-15milオプション)
->年->..。

att、

于 2015-06-22T18:56:02.807 に答える
1

ここでも同じ問題があります。BELVGモジュール「属性ページ付け」で解決しました:http://blog.belvg.com/attribute-admin-page-pagination-in-magento.html

正しく動作します。

お役に立てば幸いです。

于 2015-06-30T16:07:03.523 に答える
1

サーバーのphp.iniを開き、max_input_varsを検索し、その値を2500より大きい値に設定すると、問題が解決します。

; How many GET/POST/COOKIE input variables may be accepted
max_input_vars = 5000
于 2016-05-19T13:00:12.593 に答える