2009-07-16 10 views
15

में निर्यात सीएसवी मैं ब्राउज़र से एक .csv डाउनलोड करने योग्य के रूप में डेटाबेस तालिका निर्यात करने की कोशिश कर रहा हूं। मेरे कोड Zend आधारित ढांचा है और मैं निम्नलिखित कार्रवाई के साथ लगभग वहाँ हूँ:ज़ेन फ्रेमवर्क

public function exportTableAction() 
{ 
    $this->_helper->layout->disableLayout(); 
    $this->_helper->viewRenderer->setNoRender(); 

    $fileName = $this->_getParam('fileName'); 
    $tableName = $this->_getParam('tableName');  

    header('Content-type: application/octet-stream'); 
    header('Content-Disposition: attachment; filename="'.$fileName.'"'); 

    echo $this->getCsv($tableName, $fileName); 
} 

मैं अपने .csv मान्य डेटा युक्त फ़ाइल डाउनलोड कर सकते हैं। हालांकि, भले ही मैंने लेआउट और रेंडरर को अक्षम कर दिया हो, फिर भी मुझे अपने .csv फ़ाइल के अंत में हेडर, साइडबार और मेरे पेज के पाद लेख का आउटपुट मिलता है। क्या मेरे exportTableAction में जेनरेट किए गए किसी भी HTML आउटपुट को अक्षम करने का कोई तरीका है? या क्या मैं हेडर जानकारी और सीएसवी स्ट्रिंग को ब्राउज़र में एक अलग तरीके से भेज सकता हूं?

Btw: मैं इस प्रकार मुझे हैडर और साइडबार प्रस्तुत करना मदद करने के लिए कार्रवाई ढेर प्लगइन का उपयोग कर रहा:

... 
$actionStack = $front->getPlugin('Zend_Controller_Plugin_ActionStack'); 
$actionStack->pushStack($userlogAction); 
$actionStack->pushStack($rightcolAction); 

चीयर्स, एड्रियन

+0

आप अपने शीर्षक, साइडबार, और पाद लेख के लिए ActionStack प्लगइन का उपयोग कर रहे हैं? –

+0

हां, वास्तव में। मेरे bootstrap.php में निम्न पंक्ति है: $ frontController-> registerPlugin (नया Project_Controller_Plugin_ActionSetup()); क्या मैं इसे अपने exportTableAction में अक्षम कर सकता हूं? – aimfeld

+1

हे - कोई भी मौका आप अपने getCsv ($ tableName, $ fileName) के कार्यान्वयन को पोस्ट कर सकते हैं; तरीका? – emeraldjava

उत्तर

7

हम समस्या का समाधान मिल गया। setNeverRender() प्रयोग किया जाता है, कोई दृश्य (प्लगइन न से) गाया रहे हैं, तो मैं

$this->_helper->viewRenderer->setNeverRender(); 

द्वारा निम्न पंक्ति

$this->_helper->viewRenderer->setNoRender(); 

बदल दिया।

0
public function getCsv($tableName, $fileName) 
{ 
    $content = new $tableName(); 

    $content_arr = array();  
    $content_arr = $content->fetchAll('1=1','id ASC'); 

    $csv_terminated = "\n"; 
    $csv_separator = ","; 
    $csv_enclosed = '"'; 
    $csv_escaped = "\\";   

    $schema_insert = ""; 

    $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, 
    stripslashes("Email Address")) . $csv_enclosed; 
    $schema_insert .= $l; 
    $schema_insert .= $csv_separator; 

    $l = $csv_enclosed . str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, 
    stripslashes("Add Date")) . $csv_enclosed; 
    $schema_insert .= $l; 
    $schema_insert .= $csv_separator; 

    $out = trim(substr($schema_insert, 0, -1)); 
    $out .= $csv_terminated; 

    if(count($content_arr) > 0) 
    {    
     foreach($content_arr as $content) 
     { 
      $schema_insert = ''; 

      if ($content->email != '' || $content->add_date != '') 
      {       
        $schema_insert .= $csv_enclosed . 
        str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $content->email) . $csv_enclosed; 

        $schema_insert .= $csv_separator; 

        $schema_insert .= $csv_enclosed . 
        str_replace($csv_enclosed, $csv_escaped . $csv_enclosed, $content->add_date) . $csv_enclosed; 
        $schema_insert .= $csv_separator; 

      }   

      $schema_insert .= $csv_separator; 
      $out .= $schema_insert; 
      $out .= $csv_terminated; 

     } 
    } 
    return $out; 
}` 
6

आप संदर्भ स्विच एक्शन हेल्पर का उपयोग कर सकते हैं।

public $contexts = array(
    'test'  => array('csv') 
); 

public function testAction() 
{ 
    $filename = time() . '.csv'; 
    $this->_helper->contextSwitch()->addContext('csv', 
      array('suffix' => 'csv', 
        'headers' => array('Content-Type' => 'application/csv', 
            'Content-Disposition' => 'attachment; filename="'. $filename.'"')))->initContext('csv'); 
    ........................ 
    ........................ 
} 
1
$this->_helper->viewRenderer->setNoRender(); 
$this->view->layout()->disableLayout(); 

$response = $this->getResponse(); 
$response->setHeader('Content-type', 'application/octet-stream'); 
$response->setHeader('Content-Disposition', 'attachment; filename="contatos.csv"'); 

echo $your_csv_content; 
संबंधित मुद्दे