2012-11-29 42 views
11

屬性選項標籤我遇到一個問題,Magento的系統中,節省了大量的屬性,要麼完全不工作,或僅部分工程的大的多。它似乎是一個javascript相關的問題,我希望Stack Overflow上的某些人有處理這種情況的「已知科學」,或者可以指出我的方向是正確的。節能問題在Magento

的基本問題是,Magento的系統問題,有超過250色屬性選項標籤。如果管理員用戶嘗試通過執行以下操作

  • 導航到目錄來管理這些 - >屬性 - >管理屬性
  • 選擇顏色屬性
  • 點擊管理標籤/選項標籤
  • 編輯最後一個標籤選項
  • 點擊「保存並繼續編輯」

兩種情況之一發生。

在谷歌瀏覽器的OS X,在「鬱悶」狀態的按鈕條,並在一段時間的谷歌Chrome瀏覽器後,「此頁無響應」殺對話框出現。

在OS X上的Mozilla的基於瀏覽器,點擊按鈕可以使瀏覽器的「思考」了一下,但最終提交表單。 但是,只有屬性標籤的部分列表被髮布到管理控制器。這意味着用戶只能編輯前75-100個標籤,因爲其他標籤從不提交。

我從windows用戶描述第二行爲,以及報告(瀏覽器爲非特異性)

最明顯的答案是要麼調查業績不佳的JavaScript或(格勞奇馬克思樣式)「不做那」。在我花時間分析/挖掘該頁面上的JavaScript之前,我希望有一些已知的修復方法或具體的知識來解決導致問題的原因。

Magento的CE 1.7.x,如果它事宜中。

更新: JavaScript的性能問題是一個紅鯡魚。他們通過輸入字段的數量龐大導致正在通過迭代在

js/prototype/validation.js 

特別是在這個try catch塊

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,不保存所有標籤的行爲仍然存在。

回答

17

您可以嘗試變量max_input_vars(在PHP 5.3.9中引入),默認情況下它是1000,所以應該足夠了,但也許你的配置使用較低的數量。但是我認爲,由於您遇到的主要性能問題,表單無法完成。

關於選項標籤:他們通過任何改變都有一個屬性圖像的上傳?當我們在一家擁有300多個製造商選項的商店安裝GoMage高級導航擴展時,我們遇到了完全相同的問題(該擴展使用Magento內置的Flash上​​傳器)。

我們沒有該功能的擴展功能,所以我禁用了上傳器,但是在加載的300部Flash動畫中,性能明顯下降。也許你可以嘗試通過插入按鈕或鏈接而不是電影來按照每個選項來延遲上傳器。

希望這可以幫助你向正確的方向發展。

+0

看起來像這是問題。如果我扁平化POST數組並計算它,它恰好有1000個元素。未來的人也應該閱讀這個錯誤報告,因爲max_input_vars的文檔稍微不準確。 https://bugs.php.net/bug.php?id=62921&edit=1 –

+0

這也解決了我的問題(與Alan Storm的問題相同)。 max_input_vars已經被設置爲1000,但是沒有使用我的380屬性值。當設置爲3000時,按鈕仍然按下,但值保存正確。 –

3

我正是這個問題(POST截斷),它來自一個suhosin補丁,具有太少的POST限制。 (或標準的PHP post_max_size)

在你的php。INI檢查這些值,並根據需要增加它們的值(和重新啓動Apache):

post_max_size 
suhosin.post.max_vars 
suhosin.request.max_vars 

關於你的第二probleme(JS性能問題),我不能幫你

+0

+1有價值的信息,但它並不像了Suhosin或的post_max_size是這裏的罪魁禍首。雖然謝謝! –

+0

我也碰到這個suhosin問題幾次。注意它也殺死更長的GET線,有時用於Magento – macki

+0

是的,仔細檢查所有的phpinfo()變量,你應該找到相關的東西 –

11

[工作溶液]

你好如阿倫風暴提到的,這ussue與JS邏輯,用於處理的選項標籤輸入的驗證有關。我在一個項目中遇到了這個問題,我寫了一個簡單的擴展,解決了這個問題。

您可以下載中心的exntesion這裏: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> 
+1

這項工作就像一個魅力形式,像2000選項值這樣的修復緩慢保存問題完美。 – Guerra

+0

@Guerra太棒了!如果您發現使用此修復程序的任何問題,請在github中打開問題。 – ceckoslab

+1

另一個開心的用戶! 4000+項目,沒問題。 Magento默認應該使用這種方法。 –

0

對不起!

我經歷了同樣的問題,解決方案如下。

問題的解釋

問題

一位顧客身上也有很多車添加到同一,從而遷移輪胎和車輛只有255個字符的屬性之間的繫泊輪胎非常大基地的ID被插入表中,導致遷移錯誤。

Magento的插入與分離ID的字符串,

發生在值字段的默認情況下,如果是255個字符我把文本和解決表「catalog_product_entity_varchar」問題。

注:我知道你修改數據庫並不好,但不幸的是不得不執行這個操作。

實施例產物

輪胎175/65R14

- >使(+ - 200個選項)
- >模型(+ - 4密耳選項)
- >系列(+ - 15密耳的選項)
- >年 - > ...

ATT,

1

打開服務器的php.ini文件,搜索max_input_vars並將其值設置爲大於2500將解決您的問題

; How many GET/POST/COOKIE input variables may be accepted 
max_input_vars = 5000 
+0

這對我來說是簡單的解決方案。 –