Получение функциональности batch_action в Symfony 1.0 - PullRequest
1 голос
/ 19 марта 2010

В настоящее время я работаю над веб-приложением, написанным на Symfony.Я должен добавить функцию «экспорт в CSV» в бэкэнд / администрирование приложения для некоторых модулей.В представлении списка должна быть кнопка «Экспорт», которая должна предоставить пользователю csv-файл отображаемых элементов (с учетом критериев фильтрации).

Я создал метод в классе действиймодуля, который берет разделенный запятыми список идентификаторов и генерирует 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.

В настоящее время я работаю над этим с помощью Javascript (я анализирую DOM, чтобы получить числовые идентификаторы (из таблицы отображения)а затем создать ссылку для кнопки. Я действительно думаю, что может быть лучший способ для этого.

Ответы [ 3 ]

1 голос
/ 19 марта 2010

Как вы уже упоминали, добавьте это к вашим list параметрам:

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

Создайте действие executeExportToCsv() в модуле action.class.php file, и все готово. Если вы хотите хороший значок для кнопки, вы можете добавить:

      icon: /images/icons/page_excel.png

или что-то вроде параметров действия.

1 голос
/ 19 марта 2010

Если вы хотите сохранить его в генераторе администратора, то вам нужно «пакетное действие» (см. документацию Symfony ). В основном это появится в выпадающем меню (если вы используете тему администратора по умолчанию) и позволит вам отметить интересующие вас строки, выберите опцию в выпадающем меню и нажмите «Перейти».

Ваш 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
...

, и это будет искать метод executeBatchExportcsv() в вашем actions.class.php. Он передает вашему методу массив идентификаторов в объекте sfWebRequest, так что вы сможете довольно легко вставить его в существующий код.

0 голосов
/ 21 марта 2010

В конце концов мне удалось добиться того, чего я хотел.

Проблема с решением 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

Это решение практически можно использовать повторно :), не говоря уже о том, что оно действительно работает как задумано.Есть небольшие накладные расходы в его адаптации для других модулей.

Спасибо всем за помощь.

Ура!
Алекс

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...