2010-03-19 44 views
1

我目前正在使用Symfony編寫的Web應用程序。我應該在某些模塊的應用程序的後端/管理部分中添加「導出爲CSV」功能。在列表視圖中,應該有一個「導出」按鈕,它應該爲用戶提供顯示元素的csv文件(考慮過濾標準)。在Symfony 1.0中獲取batch_action功能

我創建了一個方法在課堂上,需要一個逗號模塊的行爲分隔的編號列表,並生成CSV,但我真的不知道如何將鏈接添加到它在視圖中。問題是視圖在任何地方都不存在,它是根據generator.yml配置文件中的數據實時生成的。我已經發布了以下文件的相關部分。

我是新來的Symfony,所以任何幫助將不勝感激:)。

謝謝,
亞歷

更新


list: 
    display: [id, =name, indemn, _status, _participants, _approved_, created_at] 
    title: Lista acţiuni 
    object_actions: 
    _edit: ~ 
    _delete: ~ 
    actions: 
    _create: ~ 
    export_csv: 
     name: Export to CSV 
     action: CSVExport 
     params: id=csvActionSubmit 
    filters: [name, county_id, _status_filter, activity_id] 
    fields: 
    id: 
     name: Nr. crt. 
    ... 

感謝你的建議,我已經成功地添加鏈接到我的行動按鈕。問題是我還需要發送一些參數給動作,因爲我可能不需要所有的元素 - 過濾器可能已被使用。不幸的是,該項目使用Symfony 1.0,它不支持batch_actions。我正在解決這個問題(我解析DOM以獲得數字ID(從顯示錶),然後建立按鈕的鏈接。我真的認爲這可能是一個更好的方法

+0

我很感謝你的決心,但我真的不認爲你有另一種選擇。如果您對從可訪問性的角度使用JS感到困擾,那麼請考慮這是一個管理界面,您可能會對面向互聯網的網站施加更嚴格的要求。這些限制在symfony的新版本中得到了解決,如果你不能升級,那麼這個框架就不會被指責(特別是v1.0)。我已經將幾個1.0項目升級到1.3,沒有任何問題 - 我強烈建議您學習該過程。 – Raise 2010-03-20 23:53:58

+0

我沒有責怪框架,我意識到我正在做的事情可以用更優雅的方式解決。問題是我無法升級,因爲我不想冒任何風險破壞網站。我只是簽約添加了一些功能,所以升級和隨後的測試和調試失去了幾天的前景並不讓我感到高興:)。我同意,維護(d?)網站的人應該保持最新的框架。 – 2010-03-21 12:08:45

回答

0

我已經成功地實現了我到底想要的。

使用JavaScript解決方案的問題是,我可以只導出頁面上顯示的結果。如果需要分頁,則僅導出顯示的結果(當前頁面)。

添加以下到佈局模板:

<?php 
if (isset($filters['csv-export-link'])) { 
    echo '<a href="'$filters['csv-export-link']).'">Export to CSV</a>'; 
} 
?> 

我修改了已經重寫addFiltersCriteria

public function addFiltersCriteria($c) { 
    // [...] 
    parent::addFiltersCriteria($c); 

    if (isset($this->filters['csv-export'])) { 
     $idList = array(); 
     $results = ActionnPeer::doSelect($c); 
     foreach ($results as $result) { 
      $idList[] = $result->getId(); 
     } 
     $this->filters['csv-export-link'] = '[...]/CSVExport/idList/'.implode(',', $idList); 
    } 
} 

最後,但並非最不重要:),我刪除了 「一般」 行動因爲它不再需要,並將csv-export「過濾器」添加到generator.yml。

filters: [..., _csv_export_filter] 

過濾模板有以下內容:

<input type="hidden" name="filters[csv-export]" value="true" /> Active 

該解決方案是可重複使用的幾乎:),無一提的是它的實際工作按預期。在適應其他模塊方面沒有多少開銷。

謝謝大家的幫助。

乾杯!
Alex

+0

嗨亞歷克斯,我做了它和工作時過濾的結果小於400,當URL有更多的THANN 400個IDS我得到這個錯誤:紫禁城 您沒有權限訪問/backend.php/Inscription/出口/ 1569,448,1444,1445,1446,1447,1441,141416,1413,1414,1415,1411,1412,1409,1410,1406,1405,1403697,693,694,2,213,210 ....這個server.6,109 ,11 – 2013-04-12 11:25:56

1

如果你想保持它在管理生成器中,那麼你正在尋找的是一個「批處理操作」(詳見the Symfony docs)基本上這將出現在下拉菜單中(如果你的「重新使用默認的管理主題),並讓你勾選你感興趣的行,從下拉菜單中選擇選項並點擊'開始'。

你的generator.yml看起來像下面這樣:

list: 
    display: [=name, indemn, _status, _participants, _approved_, created_at] 
    title: Lista acţiuni 
    object_actions: 
    _edit: ~ 
    _delete: ~ 
    batch_actions: 
    exportcsv: 
     label: "Export to CSV 
... 

並且這會在您的actions.class.php中尋找executeBatchExportcsv()方法。它將sfWebRequest對象中的ID數組傳遞給您的方法,因此您應該可以很容易地將它插入到您現有的代碼中。

+0

我不能使用'batch_actions',因爲項目是用Symfony 1.0編寫的,它們不可用。我會嘗試使用'action',看看我能否實現它。 – 2010-03-19 13:31:15

+0

啊,倒黴:-(沒有改變升級它,我想:-)我會有一個想法/外觀,但我從1.2開始,所以我可能會有一段時間;-) – richsage 2010-03-19 13:53:23

1

至於你提的是,添加到您的list PARAMS:

actions: 
    exportToCsv: 
     name: Export to CSV 
     action: exportToCsv 

創建模塊的action.class.php file一個executeExportToCsv()動作,就大功告成了。如果你想要一個漂亮的按鈕圖標,你可以添加:

 icon: /images/icons/page_excel.png 

或某些行動params。

+0

是的,我已經這樣做了,但它仍然不是我所需要的。問題是,我需要過濾列表發送到出口的行動,我還沒有想出一個方法來發送僅使用.yml參數(IDS)。 目前我正在使用JavaScript解決此問題,但我希望我不是:)。 – 2010-03-19 15:53:20

+0

啊,我錯過了過濾標準。是的,我擔心你不能在沒有JS的情況下做到這一點。 – Raise 2010-03-19 16:17:38