2012-11-29 13 views
11

में बड़ी संख्या में विशेषता विकल्प लेबल सहेजने में समस्याएं मैगेंटो सिस्टम में एक समस्या में भाग ले रहा हूं जहां बड़ी संख्या में गुण सहेजना या तो काम नहीं करता है, या केवल आंशिक रूप से काम करता है। यह एक जावास्क्रिप्ट से संबंधित मुद्दा प्रतीत होता है, और मैं उम्मीद कर रहा था कि स्टैक ओवरफ्लो पर किसी को इस स्थिति से निपटने के लिए कुछ "ज्ञात विज्ञान" था, या मुझे सही दिशा में इंगित कर सकता था।Magento

मूल समस्या यह है कि प्रश्न में Magento सिस्टम में 250 से अधिक रंग विशेषता विकल्प लेबल हैं।/विकल्प टैब>

  • रंग का चयन विशेषताओं की व्यवस्था करें लेबल पर
  • क्लिक करना गुण प्रबंधित
  • संपादन -> गुण - एक व्यवस्थापक उपयोगकर्ता सूची के लिए निम्न

    • नेविगेट करके इन प्रबंधन करने के लिए प्रयास करता है पिछले लेबल विकल्प
    • क्लिक करके "सहेजें और संपादित करें जारी रखें"

    दो बातों में से एक होता है।

    ओएस एक्स पर Google क्रोम में, बटन "उदास" स्थिति में चिपक जाता है, और कुछ समय बाद Google क्रोम का "यह पृष्ठ उत्तरदायी नहीं है" हत्या संवाद आता है।

    ओएस एक्स पर एक मोज़िला आधारित ब्राउज़र में, बटन पर क्लिक करने से ब्राउजर थोड़ा सा सोचता है, लेकिन अंततः यह फ़ॉर्म सबमिट करता है। हालांकि, विशेषता लेबल की केवल आंशिक सूची व्यवस्थापक नियंत्रक को पोस्ट की गई है। इसका मतलब है कि उपयोगकर्ता केवल पहले 75 - 100 लेबल संपादित कर सकता है, क्योंकि अन्य लेबल कभी सबमिट नहीं किए जाते हैं।

    मैं दूसरा व्यवहार का वर्णन के रूप में अच्छी तरह से खिड़कियां उपयोगकर्ताओं की रिपोर्ट (ब्राउज़रों गैर विशिष्ट हैं)

    स्पष्ट जवाब या तो खराब प्रदर्शन कर जावास्क्रिप्ट, या (बड़बड़ाना मार्क्स शैली) की जांच के लिए कर रहे हैं "ऐसा नहीं करते है उस"। उस पृष्ठ पर जावास्क्रिप्ट को प्रोफाइलिंग/खुदाई करने में समय बिताने से पहले, मैं उम्मीद कर रहा था कि इस के लिए कुछ ज्ञात फिक्स था, या विशिष्ट ज्ञान जो समस्या का कारण बन रहा था।

    Magento CE 1.7.x, अगर यह maters।

    अद्यतन: जावास्क्रिप्ट प्रदर्शन समस्याएं लाल हेरिंग हैं। वे इनपुट क्षेत्रों की भारी संख्या की वजह से कर रहे हैं के माध्यम से दोहराया जा रहा

    में
    js/prototype/validation.js 
    

    विशेष रूप से इस कोशिश पकड़ ब्लॉक में

    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) { 
        } 
    

    हालांकि, यहां तक ​​कि अगर मैं शॉर्ट सर्किट इस और समारोह वापसी सच है, सभी लेबलों को सहेजने का व्यवहार बनी रहती है।

  • उत्तर

    17

    आप चर max_input_vars कोशिश कर सकते हैं मदद नहीं कर सकता (PHP 5.3.9 में पेश किया गया), डिफ़ॉल्ट रूप से यह 1000 है, इसलिए पर्याप्त होना चाहिए, लेकिन हो सकता है कि आपकी कॉन्फ़िगरेशन कम राशि का उपयोग करे। लेकिन मुझे लगता है कि आपके द्वारा अनुभव किए जा रहे प्रमुख प्रदर्शन समस्याओं के कारण फॉर्म केवल इसलिए नहीं मिलता है।

    विकल्प लेबल के बारे में: क्या किसी भी बदलाव से वे एक विशेषता-छवि के लिए अपलोडर हैं? जब हमने 300 से अधिक निर्माता विकल्पों के साथ एक दुकान पर गोमेज एडवांस्ड नेविगेशन एक्सटेंशन स्थापित किया था, तो हमारे पास एक ही समस्या थी (एक्सटेंशन Magento के अंतर्निहित फ़्लैश-अपलोडर का उपयोग करता है)।

    हमारे पास उस सुविधा का विस्तार नहीं था इसलिए मैंने अपलोडर को अक्षम कर दिया, लेकिन चरम प्रदर्शन में कमी 300 फ्लैश-फिल्मों में लोड हो रही थी। हो सकता है कि आप मूवी के बजाए बटन या लिंक डालने के द्वारा प्रति-विकल्प आधार पर अपलोडर को आलसी लोड करने का प्रयास कर सकें।

    आशा है कि यह आपको सही (या सटीक) दिशा में इंगित करे।

    +0

    ऐसा लगता है कि इस समस्या थी कुछ खोजना चाहिए। अगर मैं POST सरणी को फ़्लैट करता हूं और इसे गिनता हूं, तो इसमें बिल्कुल 1000 तत्व हैं। भविष्य में आने वाले लोगों को इस बग रिपोर्ट को भी पढ़ना चाहिए, क्योंकि max_input_vars के लिए दस्तावेज़ थोड़ा गलत है। https://bugs.php.net/bug.php?id=62921&edit=1 –

    +0

    यह मेरी समस्या को भी ठीक करता है (एलन स्टॉर्म के समान समस्या)। Max_input_vars पहले से ही 1000 पर सेट किया गया था लेकिन मेरे 380 विशेषता मानों के साथ काम नहीं किया था। 3000 पर सेट करते समय, बटन क्रोम में दबाया गया, लेकिन मान सही ढंग से सहेजे गए। –

    3

    मुझे वास्तव में यह समस्या थी (POST छोटा कर दिया गया) और यह एक सुहोसिन पैच से आता है जिसमें बहुत कम पोस्ट सीमा होती है। (या मानक PHP post_max_size)

    आपके PHP में।आरं इन मूल्यों की जाँच करें और यदि आवश्यक हो तो उनके मूल्यों में वृद्धि (और पुनः आरंभ अपाचे):

    post_max_size 
    suhosin.post.max_vars 
    suhosin.request.max_vars 
    

    अपने दूसरे probleme (जे एस प्रदर्शन मुद्दा) के लिए, मैं आप

    +0

    बहुमूल्य जानकारी के लिए +1 का समाधान होगा, लेकिन यह suhosin या post_max_size की तरह नहीं दिखता है कि कर रहे हैं यहां अपराधी हालांकि धन्यवाद! –

    +0

    मैं इस सुहोसिन मुद्दे को दो बार भी चलाता हूं। नोट यह भी लंबे समय तक मारता है लाइनों है कि कभी कभी Magento – macki

    +0

    हां में किया जाता है मिलता है, ध्यान से सभी अपने phpinfo जाँच() वार्स, आप संबंधित –

    11

    [कार्य समाधान]

    हैलो एलन तूफान के रूप में उल्लेख किया है, इस ussue जे एस तर्क, उस विकल्प लेबल आदानों की मान्यता संभालती से संबंधित है। मुझे अपने क्लिप में से एक की परियोजना पर यह समस्या थी और मैंने सरल विस्तार लिखा, जो इसे हल करता है।

    आप यहाँ के लिए exntesion Editor का उपयोग कर सकते हैं: https://github.com/Jarlssen/Jarlssen_FasterAttributeOptionEdit

    मूल रूप से विस्तार मेरा टेम्पलेट के साथ मूल विकल्प टेम्पलेट बदल देता है। मेरे टेम्पलेट में मैंने टेम्पलेट के निचले भाग में अधिकांश जेएस को फिर से लिखा और 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

    @ गुएरा महान! यदि आप इस फिक्स का उपयोग कर किसी भी मुद्दे को देखते हैं, तो कृपया जिथब में समस्या खोलें। – ceckoslab

    +1

    एक और खुश उपयोगकर्ता! 4000+ आइटम, कोई समस्या नहीं है। Magento डिफ़ॉल्ट रूप से इस विधि का उपयोग करना चाहिए। –

    0

    क्षमा करें !!

    मैं इसी समस्या से गुजर गया, समाधान नीचे दिया गया है। समस्या का

    स्पष्टीकरण

    समस्या

    एक ग्राहक टायर कि भी कई कारें एक ही में शामिल किया है, जिससे टायर और वाहनों विशेषताओं में से केवल 255 अक्षरों के बीच लंगर विस्थापित करने के लिए की एक बहुत बड़ी आधार है आईड्स के तालिका में डाला गया था जिसके कारण माइग्रेशन में त्रुटि आई थी।

    Magento द्वारा अलग आईडी के साथ एक स्ट्रिंग,

    समस्या मान फ़ील्ड जो डिफ़ॉल्ट रूप से 255 अक्षरों अगर मैं पाठ रखा और संकल्प लिया है में तालिका "catalog_product_entity_varchar" में घटित हुआ सम्मिलित करता है।

    नोट: मैं आप संशोधित डीबी अच्छा नहीं है पता है लेकिन दुर्भाग्य से यह कार्रवाई करने के लिए किया था।

    उदाहरण उत्पाद

    टायर 175/65R14

    -> बनाओ (+ - 200 विकल्प)
    -> मॉडल (+ - 4mil विकल्प)
    -> श्रृंखला (+ - 15mil विकल्प)
    -> वर्ष -> ...

    att,

    1

    , अपने सर्वर की php.ini खोलें max_input_vars के लिए खोज और अधिक से अधिक से अधिक 2500 के लिए अपनी मान सेट आपकी समस्या

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

    यह मेरे लिए आसान समाधान था। –

     संबंधित मुद्दे