web-dev-qa-db-ja.com

ノードから一度に複数の画像を削除する

無限の画像を受け入れるオプションがUNLIMITEDに設定された画像フィールドがあります。基本的には単一の方法で画像を削除できますが、特定のノードから一度に複数の画像を削除することはできますか?

ビューの一括操作と編集可能なビューを使用していくつかのロジックを適用することで試してみましたが、何もうまくいきませんでした。

これについて何か提案はありますか?

5
Hemangi Gokhale

フィールドを空にする方法がないことに少し驚いていますが、それがない場合は、VBOの独自のアクションを作成できます。不自然な(そしておそらく不完全な)例:

function MYMODULE_action_info() {
  return array(
    'MYMODULE_delete_images' => array(
      'type' => 'node',
      'triggers' => array('any'),
      'label' => t('Remove all images'),
      'behavior' => array('changes_property'),
      'configurable' => FALSE,
      'vbo_configurable' => FALSE,

    ),
  );
}

function MYMODULE_delete_images_action($entity, $context) {
  // Pick up pre-batch config entered by user.
  $foo = $context['foo'];

  // Remove all field vals. Using 'changes_property' behavior in the
  // info hook will trigger the entity to be saved, so no need
  // to do so manually.
  $entity->field_FOO[LANGUAGE_NONE] = array();
}

function MYMODULE_delete_images_action_form($context, &$form_state) {
  // Some custom context for the batch op.
  $form['foo'] = array(
    '#type' => 'textfield',
    '#title' => t('Some option'),
  );
}

function MYMODULE_delete_images_action_form_validate($form, &$form_state) {
  // Validate the submission.
  if (bar($form_state['values']['foo'])) {
    form_set_error('foo', t('Blah'));
  }
}

function MYMODULE_delete_images_action_form_submit($form, &$form_state) {
  // Ensure submitted values are passed through to the action callback.
  return array(
    'foo' => $form_state['values']['foo'],
  );
}

明らかに、プレバッチフォームを拡張して、空にするフィールドを選択できるようにし、少しの労力でこれをすべてのフィールドタイプにジェネリックにすることもできます。

1
Clive