AJAX

2012-02-09 10 views
5

के माध्यम से PHP क्लास से PHPExcel तक डेटा पास करना मैं ओओपी PHP और जेसन डेटा के साथ अटक गया। मैं ओओपी के लिए बिल्कुल नया नहीं हूं, लेकिन मैं इसके चारों ओर अपना सिर नहीं ले सकता। अगर कोई मुझे समझा सकता है, तो बहुत अच्छा होगा!AJAX

मैं PHP में निम्नलिखित ग्रिड वस्तु है:

Class Grid { 

     var $data; 
     var $joins; 
     var $fields; 
     var $where; 
     var $table; 
     var $groupBy; 
     var $having; 
     var $limit; 
     var $order_by; 
     var $sort; 
     var $security; 
     var $set; 
     var $sql; 

.... 

     // loads data into the grid 
     function load() { 
    ... 
      // setup the sql - bring it all together 
      $sql = " 
       SELECT $post[cols] 
       FROM `$table` 
       $joins 
       $where 
       $groupBy 
       $having 
       ORDER BY $order_by $sort 
       $limit 
      "; 

      $this->sql = $sql; 

      // execute the sql, get back a multi dimensial array 
      $rows = $this->_queryMulti($sql); 

      // form an array of the data to send back 
      $data = array(); 
      $data['rows'] = array(); 
      foreach($rows as $i=>$row) { 
       foreach($row as $col=>$cell) { 
        // use primary key if possible, other wise use index 
        $key = $primaryKey ? $row[$primaryKey] : $i; 
        // primary key has an _ infront becuase of google chrome re ordering JSON objects 
        //http://code.google.com/p/v8/issues/detail?id=164 
        $data['rows']["_".$key][$col] = $cell; 
       } 
      } 

    ...   
      $data['order_by'] = $order_by; 
      $data['sort'] = $sort; 
      $data['page'] = $page; 
      $data['start'] = $startRow + 1; 
      $data['end'] = $startRow + $nRowsShowing; 
      $data['colData'] = $colData; 

      $this->data = $data; 
     } 

और यह AJAX callgrid.php द्वारा कहा जाता है:

$grid->load(); 
     // here we need to add field in data[sql] = sql query, then we can pass it to toExcel() - how? 
     echo json_encode($grid->data); 

मैं क्या पाने के लिए कोशिश कर रहा हूँ वर्तमान निर्यात करने के लिए सक्षम होने के लिए है PHPExcel का उपयोग कर एक्सेल में एसक्यूएल क्वेरी (यह सभी या खोज परिणाम हो सकता है)। तो मुझे फ़ंक्शन toexcel ($ क्वेरी) के साथ Excel.php मिल गया है - जो एक प्रश्न लेगा और इसे एक्सेल करने के लिए निर्यात करेगा।

अब - मैं AJAX के माध्यम से ग्रिड से toexcel तक SQL क्वेरी कैसे पास करूं?

  1. मैं समझता हूँ कि मैं $ करने के लिए डेटा() जोड़ने की जरूरत:

    $ डेटा [ 'एसक्यूएल'] = $ एसक्यूएल;

अगला क्या है?


अद्यतन: मैं निम्नलिखित jQuery ग्रिड का उपयोग कर रहा: http://square-bracket.com/openjs

मैं समझता हूँ कि PHPExcel या तो ग्रिड या jQuery द्वारा शुरू किया जाना चाहिए

+0

क्यों AJAX के माध्यम से के साथ फ़ाइल को प्रदर्शित? PHP के भीतर यह सब क्यों नहीं करते? – Mchl

+2

क्योंकि ग्रिड स्वयं AJAX से लोड होता है। इसलिए एसक्यूएल क्वेरी केवल तभी बनाई जाएगी जब AJAX द्वारा कॉल किया गया हो: '$ ("। grid.digital_edit ")। loadGrid ({...})' – Elen

+0

ठीक है - मुझे AJAX के साथ अटकने की आवश्यकता नहीं है। लेकिन फिर भी कैसे? – Elen

उत्तर

11

आप क्या कर सकते हैं की एक सामान्य विचार:

एक बटन बनाएं उदाहरण के लिए

<a href="#" id="export">export to Excel</a> 

फिर jQuery में आप की तरह कुछ बनाने के लिए:

var grid = $(".grid.digital_edit").loadGrid({...}); //or similar - what you did to load the data into the grid 

$('#export').click(function() { 
    $.ajax({ 
     url: "export_to_excel.php", // the url of the php file that will generate the excel file 
     data: grid.getData(), //or similar - based on the grid's API 
     success: function(response){ 
      window.location.href = response.url; 
     } 
    }) 

}); 

फ़ाइल export_to_excel.php कोड है कि एक्सेल फ़ाइल उत्पन्न शामिल होंगे:

  1. यह तुम कहाँ है ' PHPExcel क्लास शुरू करेंगे और एक फाइल बनायेंगे new_excel.xls
  2. आपकी प्रतिक्रिया सरणी में $ प्रतिक्रिया ['url'] में नव निर्मित फ़ाइल में पूर्ण यूआरएल होगा। (Http://www.example.com/files/new_excel.xls)

यह बहुत जटिल लग सकता है, लेकिन अपने लक्ष्यों को अलग करने और एक समय में एक को प्राप्त करने का प्रयास करें। जैसे

  1. बटन बनाएं।
  2. फिर बटन दबाते समय एक साधारण AJAX कॉल करने का प्रयास करें।
  3. फिर अपनी export_to_excel.php फ़ाइल बनाएं और PHPExcel क्लास के साथ काम करने का प्रयास करें।
  4. एक नमूना बनाएं ट्यूटोरियल पाया के आधार पर फ़ाइल उत्कृष्टता।
  5. एक एक्सेल अपने खुद के आंकड़ों के आधार पर फ़ाइल बनाएँ, लेकिन php फ़ाइल में हार्ड-कोडेड।
  6. सही AJAX कॉल बनाएं जो वांछित डेटा को एक php फ़ाइल में भेजता है।
  7. सही AJAX कॉल को पकड़ें।
  8. AJAX कॉल से डेटा को PHPExcel क्लास में पास करें।
  9. एक्सेल फ़ाइल बनाएं।
  10. एक्सेल फ़ाइल में यूआरएल वापस भेजें।
  11. उपयोगकर्ता को एक्सेल फ़ाइल के यूआरएल पर रीडायरेक्ट करें।

संपादित

आप में थोड़ा और अधिक मदद करने के लिए: आप केवल एक PHP स्क्रिप्ट/फ़ाइल की जरूरत है। वही एक जावास्क्रिप्ट फ़ाइल से AJAX कॉल प्राप्त करेगा, एक्सेल फ़ाइल उत्पन्न करेगा और जावास्क्रिप्ट फ़ाइल (उस क्रम में) फ़ाइल यूआरएल वापस/प्रतिक्रिया देगा। एक सरल उदाहरण होगा:

<?php 
//export_to_excel.php 

$data = $_POST['data']; // get the data from the AJAX call - it's the "data: grid.getData()" line from above 

//... format the received data properly for the PHPExcel class 

// later on in the same file: 
$xls = new PHPExcel(); 
$xls->loadData($formattedData); //I assume that there is a similar loadData() method 
$xls->exportToFile('/vaw/www/example.com/public/files/new_excel.xls'); // I assume that there is an exportToFile() method 

$response = array(
    'success' => true, 
    'url' => 'http://www.example.com/files/new_excel.xls' 
); 

header('Content-type: application/json'); 

// and in the end you respond back to javascript the file location 
echo json_encode($response); 

और फिर जावास्क्रिप्ट में आप इस लाइन

window.location.href = response.url; //response.url is $response['url'] from the PHP script 
+0

धन्यवाद एलेटो - मेरे पास पहले से ही सभी काम कर रहे PHP फाइलें हैं - मेरी समस्या उन्हें एक दूसरे से जोड़ना है। तो आप सुझाव देते हैं कि मैं वर्तमान में AJAX को डेटा के रूप में कॉल करके एसक्यूएल क्वेरी तक पहुंच सकता हूं: grid.getData() - यह getData() मैं खुद को बनाता हूं या आप मानते हैं कि यह फ़ंक्शन पहले से ही ग्रिड के भीतर उपलब्ध होना चाहिए? – Elen

+0

grid.getData() भाग जावास्क्रिप्ट है। ग्रिड को प्रदर्शित करने के लिए आप जावास्क्रिप्ट लाइब्रेरी का उपयोग करते हैं, _should_ ने पहले से ही एक विधि लागू की है ताकि आपको ग्रिड डेटा मिल सके (मैंने इसे GetData कहा है)। यदि नहीं, तो आपको इसे स्वयं करना होगा, लेकिन आम तौर पर प्रत्येक लाइब्रेरी में एक समान विधि होती है जिसका आप उपयोग कर सकते हैं। – aletzo

+0

जावास्क्रिप्ट में आपके पास एसक्यूएल क्वेरी, या PHPExcel क्लास में कोई पहुंच नहीं है। यही कारण है कि आपको AJAX कॉल करना है, जिसका अर्थ है कि जावास्क्रिप्ट (क्लाइंट साइड) कुछ करने के लिए php (सर्वर पक्ष) से ​​पूछ रहा है। PHP PHPExcel क्लास से निपटने के लिए, फ़ाइल जेनरेट करेगा और जावास्क्रिप्ट को बताएगा कि "ठीक है यहां मैंने एक्सेल फ़ाइल का यूआरएल बनाया है"। फिर जावास्क्रिप्ट उपयोगकर्ता को यूआरएल दिखाएगा। – aletzo