3

出荷の詳細をCSVファイルとして印刷しようとしていますが、これはほぼ完了していますが、ダウンロードのオプションがありません。ファイルが自動的に作成され、上記のディレクトリに保存されます。

_prepareDownloadResponse()関数が欠落していると思いますが、これを実装するにはどうすればよいですか。

私はこのコードを使用しています->

$file_path = 'sample_shipment.csv';
$mage_csv = new Varien_File_Csv();
$mage_csv->saveData($file_path, $content); 

編集:このコードはすべて、indexcontroller.phpの私のindexcontroller.php完全なコードにあります->

class Company_Manifestupload_IndexController extends Mage_Adminhtml_Controller_Action
{        
public function indexAction() {
    echo 'Manifestupload Index!';
}
public function bluedartmanifestuploadAction() {
    $request = $this->getRequest();
    $shipmentIds = $request->getPost('shipment_ids', array());
    $file_path = 'manifest_upload_'.Mage::getSingleton('core/date')->date('d-m-Y_H-i-s').'_csv.csv';
    $mage_csv = new Varien_File_Csv();
    $shipment_csv=array();

            /*  Putting data in $shipment_csv[] */
            $mage_csv->saveData($file_path, $shipment_csv);
            }
4

2 に答える 2

3

csvファイルをダウンロード可能にするには、関連するコントローラーアクション内に次のコードを配置するだけです。

$fileName       = 'filename.csv';
$content        = $csvData; //prepare the csv data and return as string
$this->_prepareDownloadResponse($fileName, $content); //this will make the csv file downloadable with the $content as contents in it.

お役に立てれば。

編集: 更新されたコントローラーアクションコードを見つけてください。

public function bluedartmanifestuploadAction() {
    $request        = $this->getRequest();
    $shipmentIds    = $request->getPost('shipment_ids', array());
    $fileName       = 'manifest_upload_'.Mage::getSingleton('core/date')->date('d-m-Y_H-i-s').'_csv.csv';

    //prepare csv contents
    #prepare header
    $csv = '';
    $_columns = array(
        "field1",
        "field2",
        //...
    );
    $data = array();
    foreach ($_columns as $column) {
        $data[] = '"'.$column.'"';
    }
    $csv .= implode(',', $data)."\n";
    #prepare data
    foreach($dataFromShipmentIds as $_data){ //just dummy loop
        $data = array();
        $data[] = $_data['field1'];
        $data[] = $_data['field2'];
        //...
        $csv .= implode(',', $data)."\n";
    }
    //now $csv varaible has csv data as string

    $this->_prepareDownloadResponse($fileName, $csv); 
}

編集2:上記のコードは理想的な場合にのみ正しく機能します。フィールドに「\ n」と「、」がある場合は適切なCsvを生成しません。正しく機能させるには、varienファイルCSVのコードを使用できます。ここに追加します-

$csv.=implode(',',$data)."\n"最初に上記のように$data[]に値の配列を作成し、次に以下のコードを使用する代わりに使用します。

foreach ($data as $value) {
         if (strpos($value, $delimiter) != false ||
             strpos($value, $enclosure) != false ||
             strpos($value, "\n") != false ||
             strpos($value, "\r") != false ||
             strpos($value, "\t") != false ||
             strpos($value, ' ') != false) {
             $str2 = $enclosure;
             $escaped = 0;
             $len = strlen($value);
             for ($i=0;$i<$len;$i++) {
                 if ($value[$i] == $escape_char) {
                     $escaped = 1;
                } else if (!$escaped && $value[$i] == $enclosure) {
                     $str2 .= $enclosure;
                 } else {
                     $escaped = 0;
                 }
                     $str2 .= $value[$i];
             }
             $str2 .= $enclosure;
             $str .= $str2.$delimiter;
         } else {
             $str .= $enclosure.$value.$enclosure.$delimiter;
         }
     }
            $str = substr($str,0,-1);
            $str .= "\n";
于 2012-08-08T09:23:34.040 に答える
2

注文したアイテムのダウンロード可能なcsvを作成する場合は、次のスクリプトを使用できます。

$orders = Mage::getModel("sales/order")->getCollection();
// prepare CSV header
$csv = '';
$_columns = array(
     "Order Id",
     "Product Name",
     "Sku",
     "Price"
);
$data = array();
// prepare CSV header...
foreach ($_columns as $column) {
       $data[] = '"'.$column.'"';
}
$csv .= implode(',', $data)."\n";
foreach ($orders as $order) {
         $items = $order->getAllItems();
         foreach ($items as $item) {
               $loadProduct = Mage::getModel('catalog/product')->load($item->getProductId());
               //prepare csv contents
                $data = array();
                $data[] = $order->getId();
                $data[] = $loadProduct['name'];
                $data[] = $loadProduct['sku'];
                $data[] = $loadProduct['price'];

                $csv .= implode(',', $data)."\n";
               //now $csv varaible has csv data as string
    }
}

$this->_redirect('*/*/');
$this->_prepareDownloadResponse('file.csv', $csv, 'text/csv');

詳細については、こちらをご覧ください

于 2014-04-22T05:22:47.847 に答える