2011-12-16 8 views
15

मैं डेटाबेस तालिका की सामग्री प्रदर्शित करने के लिए Magento व्यवस्थापक (Mage_Adminhtml_Block_Widget_Grid का विस्तार) में एक ग्रिड का उपयोग कर रहा हूं। मैं कुछ अन्य मॉड्यूल में देखा था वहाँ पुन: लोड निर्माता पृष्ठ के बजाय ajax पुनः लोड का उपयोग करने के लिए सेट किया जा करने के लिए एक विकल्प है कि
यह मेरा निर्माता है:Magento - AJAX का उपयोग करके ग्रिड फ़िल्टर पूरे पृष्ठ को पुनः लोड करता है

public function __construct() { 
    parent::__construct(); 
    $this->setId('myGrid'); 
    $this->setSaveParametersInSession(true); 
    $this->setVarNameFilter('my_filter'); 
    $this->setUseAjax(true); 
} 

लेकिन जब मैं ग्रिड के फिल्टर क्लिक करें और क्लिक खोज बटन, यह ग्रिड div के अंदर WHOLE पृष्ठ (हेडर, पाद लेख, ... सहित) को फिर से लोड करता है।
कोई विचार क्यों यह मामला है?

+0

यकीन नहीं है, लेकिन शायद कुछ जावास्क्रिप्ट भी ग्रिड से लागू किया जाता है ... कुछ अन्य ग्रिडों के लिए .phtml फ़ाइल पर एक नज़र डालें शामिल हैं। – usoban

उत्तर

19

मैं समाधान नहीं मिला:
सबसे पहले मैं ग्रिड वर्ग

public function getGridUrl() 
{ 
    return $this->getUrl('*/*/grid', array('_current'=>true)); 
} 

प्रत्येक ajax कॉल तो इस यूआरएल (और इसी नियंत्रक कार्रवाई) को भेजा जाएगा के लिए निम्न समारोह को जोड़ने के लिए किया था बल्कि उसके बाद पेज यूआरएल।

<module_controller_grid> 
    <reference name="root"> 
    <block type="package/gridblockname" name="root" output="toHtml" /> 
    </reference> 
</module_controller_grid> 

इस मूल तत्व और प्रदर्शित करता है केवल ग्रिड ब्लॉक अधिलेखित कर देता है:
तो मैं लेआउट एक्सएमएल फ़ाइल के लिए निम्न बिट गयी। इसलिए मेरी ajax कॉल केवल अद्यतन ग्रिड में ही लोड हो जाएगा और शीर्ष, पादुका, आदि शामिल नहीं होगा

+4

मुझे समस्या है कि AJAX लोडिंग विंडो अगले पृष्ठ पर सफल मोड़ के बाद बंद नहीं होती है।मेरे नियंत्रक कार्रवाई में मैंने वापसी की कोशिश की; वापसी 1; सच वापसी; गूंज 1; आदि कुछ भी काम नहीं किया। मैं AJAX विंडो को कैसे बंद कर सकता हूं? – tester

+0

स्पिनर गायब होने के साथ भी वही समस्या थी। यह मेरे 'Vendor_Module_Block_Adminhtml_Model_Grid.php' के कारण हुआ था- यह सेट '$-> setId (" some_id ") सेट नहीं किया गया;' '__construct()' function – Patchee

13

आप भी अपने व्यवस्थापक नियंत्रक के लिए एक "gridAction" विधि के बजाय एक लेआउट एक्सएमएल

public function gridAction() 
{ 
    $this->loadLayout(); 
    $this->getResponse()->setBody(
      $this->getLayout()->createBlock('{Namespace}/adminhtml_{Module}/grid')->toHtml() 
    ); 
} 
बनाने की जोड़ सकता है

मान लिया जाये:

ब्लॉक पथ: /app/code/local/{Namespace}/{Module}/Block/Adminhtml/{Module}/Grid.php

+0

Thx के अंदर, यह काम कर रहा है! –

13

__construct में कोड follwing जोड़ें() फ़ंक्शन में:

app/code/local/[Name_Space]/[Module_Name]/Block/Adminhtml/[Module_Name]/Grid.php file.

$this->setUseAjax(true); 

अब इस फ़ाइल के अंत में निम्नलिखित समारोह जोड़ें।

app/code/local/[Name_Space]/[Module_Name]/controllers/Adminhtml/[Module_Name]Controller.php file.

public function gridAction() 
    { 
     $this->loadLayout(); 
     $this->getResponse()->setBody(
       $this->getLayout()->createBlock('[Module_Name]/adminhtml_[Module_Name]_grid')->toHtml() 
     ); 
    } 

सौजन्य::

public function getGridUrl() 
    { 
     return $this->getUrl('*/*/grid', array('_current'=>true)); 
    } 

अब में पिछले पर निम्नलिखित जोड़ें कार्य नीरव Kadiya

3

नीरव Kadiya लगभग मेरे लिए काम करता है, लेकिन मैं gridAction बनाने व्यवस्थापक नियंत्रक में इस तरह कार्य करें:

public function gridAction() 
    { 
     $this->loadLayout(); 
     $this->getResponse()->setBody(
       $this->getLayout()->createBlock('[Module_Name]_Block_Adminhtml_[Model_Name]_Grid')->toHtml() 
     ); 
    } 

और डी ग्रिड में इस फ़ाइल

public function getGridUrl() 
    { 
      return $this->getUrl('*/*/grid', array('_current'=>true)); 
    } 
संबंधित मुद्दे