web-dev-qa-db-fra.com

Obtenir par programme des soumissions de formulaire Web d'un formulaire Web de nœuds spécifiques

Dans Drupal 8 il n'y a pas de fonction webform_get_submissions () à ce jour).

Les formulaires Web peuvent être attachés aux nœuds. Comment obtenir toutes les soumissions d'un formulaire Web qui appartiennent à un nœud spécifique (par exemple, ID de nœud = 15):

webform_get_submissions_by_node_id () ... est la fonction recherchée.

Il y a des questions similaires ici, mais le code PHP pour obtenir uniquement les soumissions qui ont été créées sur un nœud spécifique est différent. Et pour cela, il y a encore maintenant une réponse à trouver.

7
drupalfan

Merci 4k4. Voici maintenant le code correct et complet à utiliser dans le fichier mytheme.theme (nous avons besoin de la fonction getData ():

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$webform_submission = $storage->loadByProperties([
  'entity_type' => 'node',
  'entity_id' => $variables['node']->id(),
]);
$submission_data = array();
foreach ($webform_submission as $submission) {
  $submission_data[] = $submission->getData();
}
8
drupalfan

Toutes les réponses actuelles sont correctes mais le chargement des soumissions par un formulaire Web, une entité source et/ou un compte devrait être un peu plus facile, j'ai donc créé Problème # 2954515: Ajouter la méthode WebformSubmissionStorage :: loadByEntities ce qui vous oblige à avoir les entités entièrement chargées pour charger les soumissions associées.

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$webform_submissions = $storage->loadByEntities($webform, $node);
3
jrockowitz

Dans la version Drupal 8, les soumissions de formulaires Web sont stockées dans une entité et vous pouvez les récupérer comme n'importe quel autre droit, par exemple en utilisant loadByProperties():

$storage = \Drupal::entityTypeManager()->getStorage('webform_submission');
$submissions = $storage->loadByProperties([
  'entity_type' => 'node',
  'entity_id' => '123',
]);
3
4k4

Vous pouvez également utiliser la entityQuery() de Drupal pour créer des filtres/conditions avancés:

$query = \Drupal::entityQuery('webform_submission')
                ->condition('entity_type', 'node')
                ->condition('entity_id', 123, '='); // optional operator
$results = $query->execute();

Notez que $results ne contiendra que SID (id de soumission), vous devrez peut-être les charger via son chargeur d'entité:

\Drupal\webform\Entity\WebformSubmission::loadMultiple($results)
1
Geolim4