2010-10-12 15 views
5

मैंने ग्राहक के लिए अतिरिक्त विशेषता संग्रहीत करने के लिए Magento के ग्राहक जानकारी फ़ॉर्म को बढ़ाया है। आइए इसे 'customer_referrer_id' कहें।व्यवस्थापक के लिए ग्राहक ग्रिड में दिखाए जाने वाले eav_attribute तालिका से किसी इकाई (उदाहरण के लिए ग्राहक) के लिए डेटा कैसे प्राप्त करें

मेरे पास एक भूमिका 'रेफरर' है जिसकी ग्राहक ग्रिड और ऑर्डर ग्रिड तक पहुंच है। लेकिन, मैं केवल उन ग्राहकों को ग्रिड में देखने के लिए एक रेफरर को प्रतिबंधित करना चाहता हूं, जिनके पास ग्राहक_रेफरर_आईडी है जो लॉग इन करने वाले रेफरर आईडी के रूप में सेट है। इसी प्रकार ऑर्डर के लिए, लॉग इन रेफरर केवल उन ग्राहकों द्वारा किए गए ऑर्डर देख पाएगा जो ग्राहक_referrer_id = login_referrer_id है।

मैं पहले से ही कैसे एक मॉड्यूल ओवरराइड करने के लिए जानते हैं और मैं मुख्य रूप से Adminhtml/ब्लॉक/ग्राहक/ग्रिड :: _ prepareCollection और Adminhtml/ब्लॉक/बिक्री/आदेश/ग्रिड :: _ prepareCollection

मैं Magento उपयोग कर रहा हूँ ओवरराइड करने के लिए है कि/MyProject/Adminhtml/etc/इस प्रकार है 1.4.1.1

इस एप्लिकेशन को/etc/मॉड्यूल/Myproject_Adminhtml

<?xml version="1.0"?> 

<config> 
    <modules> 
     <Myproject_Adminhtml> 
      <active>true</active> 
      <codePool>local</codePool> 
      <depends> 
       <Mage_Sales /> 
      </depends> 
     </Myproject_Adminhtml> 
    </modules> 
</config> 

और स्थानीय में मेरे मॉड्यूल config.xml में मेरी मॉड्यूल घोषणा फ़ाइल के रूप में:

<config> 
    <modules> 
     <Myproject_Adminhtml> 
      <version>1.0.0</version> 
     </Myproject_Adminhtml>  
    </modules> 

    <global> 
      <blocks> 
      <adminhtml> 
       <rewrite> 
       <sales_order_grid>Myproject_Adminhtml_Block_Sales_Order_Grid</sales_order_grid> 
       <customer_grid>Myproject_Adminhtml_Block_Customer_Grid</customer_grid> 
       </rewrite> 
      </adminhtml> 
     </blocks> 
    </global> 
</config> 

और

class Myproject_Adminhtml_Block_Customer_Grid extends Mage_Adminhtml_Block_Customer_Grid 
{ 
    protected function _prepareCollection() 
    { 
     $collection = Mage::getResourceModel('customer/customer_collection') 
     ->addNameToSelect() 
     ->addAttributeToSelect('email') 
     ->addAttributeToSelect('created_at') 
     ->addAttributeToSelect('group_id') 
     ->joinAttribute('billing_postcode', 'customer_address/postcode', 'default_billing', null, 'left') 
     ->joinAttribute('billing_city', 'customer_address/city', 'default_billing', null, 'left') 
     ->joinAttribute('billing_telephone', 'customer_address/telephone', 'default_billing', null, 'left') 
     ->joinAttribute('billing_region', 'customer_address/region', 'default_billing', null, 'left') 
     ->joinAttribute('billing_country_id', 'customer_address/country_id', 'default_billing', null, 'left');  

     $this->setCollection($collection); 

     $referrer_id = Mage::getSingleton('admin/session')->getUser()->getId(); 
     Mage::log('Logged in admin has id: ' . $referrer_id); 

     return parent::_prepareCollection(); 
    } 
} 
+0

संग्रह-> getSelect() -> joinLeft() का उपयोग करने की कोशिश करने के अलावा, मैंने इस मामले के लिए कुछ भी नहीं किया है। लेकिन मैं यह पता लगाने में सक्षम नहीं हूं कि इसके लिए कौन से पैरामीटर की आवश्यकता है। इसके अलावा मैंने joinAttribute ('order', 'main_entity.entity_id = order.entity_id', 'customer_group_id') का उपयोग करके sales_flat_order तालिका से sales_flat_order तालिका से ग्राहक ग्रिड में प्राप्त करने का प्रयास किया है, लेकिन यह मेरे लिए भी काम नहीं करता है। –

+0

मुझे /var/log/system.log –

उत्तर

5

मेरा पहला प्रयास (दोनों फ़ाइलों के लिए उल्लेख किया है) किया जाएगा,

$collection->addAttributeToFilter('customer_referrer_id', $referrer_id); 

कहाँ $referrer_id मूल्य आप उपयोगकर्ता के प्रवेश से पुनः प्राप्त करना चाहिए। चूंकि आप व्यवस्थापक उपयोगकर्ताओं का उपयोग कर रहे हैं - जो ग्राहकों से अलग इकाइयां हैं - यह पुनर्प्राप्त करने का एक तरीका है;

$referrer_id = Mage::getSingleton('admin/session')->getUser()->getId(); 

नोट करें कि वर्तमान में लॉग इन व्यवस्थापक उपयोगकर्ता अकेले डेटाबेस से स्पष्ट नहीं है, इसलिए यह तालिका में शामिल नहीं हो सकता है।

एक और बिंदु पर मैं व्यवस्थापक के बजाय रेफरर्स के लिए अग्रभाग का उपयोग करूंगा। मेरे पास नए ग्राहक और उनके ऑर्डर रेफरर के ग्राहक खाते में दिखाए जाएंगे, जो कि उनके "माई ऑर्डर" पृष्ठ के समान होंगे। बेशक मुझे नहीं पता कि आपको किस अन्य आवश्यकताओं में भाग लेना है।

दूसरा हिस्सा

अवहेलना Mage_Adminhtml_Block_Sales_Order_Grid::_prepareCollection() इस तरह देखने के लिए:

protected function _prepareCollection() 
{ 
    $collection = Mage::getResourceModel('customer/customer_collection'); 
    $collection->getSelect()->reset('columns'); // remove all customer columns 
    $collection->addAttributeToFilter('entity_id', $referrer_id); 
    $collection->joinTable('sales/order_grid', 'customer_id=entity_id', array('*')); 

    $this->setCollection($collection); 
    return parent::_prepareCollection(); 
} 

क्योंकि मूल तालिका sales/order_grid फ्लैट, नहीं एक इकाई संग्रह है, और इसलिए साथ शामिल हो गए नहीं किया जा सकता यह आवश्यक है जिम्मेदार बताते हैं। उपरोक्त कार्यों को ग्राहक संग्रह से शुरू करके और उसके बाद फ्लैट तालिका में शामिल होने से उलट होता है।

एक संभावित रूप से नीदर विधि sales/order_grid_collection को अपने स्वयं के संग्रह वर्ग के साथ ओवरराइड करना होगा जो यह सब करता है। यद्यपि यह बेहतर कोडिंग सम्मेलनों का पालन करता है, यह अधिक काम है और अंत में और अधिक कार्यात्मक नहीं है।

+0

में "HURRAY" संदेश दिखाई देता है, इससे पहले कि मैंने देखा कि प्रश्न उदाहरण के साथ अद्यतन किया गया था, इससे पहले पोस्ट किया गया था। अब मैं देखता हूं कि आप पहले से ही कुछ ऐसा करने की कोशिश कर चुके हैं। – clockworkgeek

+0

ठीक है, ग्राहकों को अभी ठीक से फ़िल्टर किया जा रहा है। और, भले ही यह स्पष्ट प्रतीत होता है कि ऑर्डर टेबल फ़िल्टर करने के लिए एक ही दो पंक्तियां काम नहीं करतीं, मैंने पहले ही उन पंक्तियों को Sales_Order_Grid :: _ readyCollection में जोड़ने का प्रयास किया है। मुझे उन ग्राहकों द्वारा किए गए ऑर्डर को कैसे फ़िल्टर करना चाहिए जिनके ग्राहक_referrer_id = login_referrer_id –

+0

मैंने _prepareColumn ओवरराइड को भी हटा दिया, जो मेरे मूल प्रश्न में है, जो केवल सही परिणामों को सत्यापित करने के लिए मान्य था। –

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

  • कोई संबंधित समस्या नहीं^_^