En utilisant le module de groupe dans D8, j'ai la vue ci-dessous avec le nom de la machine: group_members_per_group
Nom de la machine :
field_user_full_name
field_user_phone_number
La vue ci-dessus a les résultats suivants:
Lors de l'exécution cron, et en parcourant toutes les lignes des résultats de la vue, je veux obtenir for each
ramer le field_user_phone_number
valeur pour que je puisse l'utiliser avec un autre code.
J'ai donc écrit:
function my_module_cron() {
// Get and loop through the View `group_members_per_group`
//$args = [$gid];
$view = \Drupal\views\Views::getView('group_members_per_group');
//$view->setArguments($args);
$view->setDisplay('default');
$view->execute();
// Get the results of the view.
$view_result = $view->result;
// Check if the view is not empty and return results.
if (!empty($view_result)) {
// If the view returns results...
foreach ($view->result as $row) {
// Get the full name value.
$name = $row->field_user_full_name;
// check the result output for testing only.
\Drupal::messenger()->addMessage(t($name));
}
}
}
Cependant, lors de l'exécution de cron, je reçois l'erreur ci-dessous:
Remarque: propriété non définie: Drupal\views\ResultRow :: $ field_user_full_name dans my_module_cron () (ligne 103 de modules\custom\my_module\my_module.module). my_module_cron (Object) call_user_func ('my_module_cron', Object) (Ligne: 316) Drupal\ultimate_cron\Entity\CronJob-> invokeCallback () (Ligne: 459) Drupal\ultimate_cron\Entity\CronJob-> run (Object) (Line: 24) Drupal\ultimate_cron\Controller\JobController-> runCronJob (Object) call_user_func_array (Array, Array) (ligne: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> Drupal\Core\EventSubscriber {fermeture} () (ligne 58) ……
La ligne 103 dans l'erreur est:
$name = $row->field_user_full_name;
Vous ne pouvez pas obtenir la valeur du champ directement à partir du résultat de la ligne.
Vous pouvez l'obtenir en accédant à l'entité comme suit:
Option1
foreach ($view->result as $id => $result) {
$node = $result->_entity;
// Get the full name value.
$name = $node->get('field_user_full_name')->value;
// check the result output for testing only.
\Drupal::messenger()->addMessage(t($name));
}
Ou en boucle à travers les champs comme suit:
Option2:
foreach ($view->result as $id => $row) {
foreach ($view->field as $fid => $field) {
if ($fid == 'field_user_full_name') {
//Get the full name value.
$name = $field->getValue($row);
// check the result output for testing only.
\Drupal::messenger()->addMessage(t($name));
}
}
}
Dans mon cas, l'entité '$ result -> _' était vide, j'ai donc dû obtenir la valeur de '$ result -> _ object':
function YOUR_THEME_preprocess_views_view__YOUR_VIEW_ID(array &$variables): void {
foreach ($variables['view']->result as $result) {
$node = $result->_object->getEntity();
$title = $node->get('title')->getValue()[0]['value'];
$body = $node->get('body')->getValue()[0]['value'];
}
}