it-swarm.com.de

Programmgesteuert die Ergebnisse einer Ansicht abrufen

Unter Verwendung des Gruppenmoduls in D8 habe ich die folgende Ansicht mit dem Computernamen: group_members_per_group

(group members per group

Maschinenname von :

  • (Mitgliedskonto) Benutzer: Vollständiger Name ist: field_user_full_name
  • (Mitgliedskonto) Benutzer: Telefonnummer ist: field_user_phone_number

Die obige Ansicht hat die folgenden Ergebnisse:

(View results

Beim Cron-Lauf und beim Durchlaufen aller Zeilen der Ansichtsergebnisse möchte ich in der Zeile for each Den Wert field_user_phone_number Erhalten, damit ich ihn mit anderem Code verwenden kann.

Also schrieb ich:

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));
  }
 }
}

Beim Cron-Lauf erhalte ich jedoch die folgende Fehlermeldung:

Hinweis: Undefinierte Eigenschaft: Drupal\views\ResultRow :: $ field_user_full_name in my_module_cron () (Zeile 103 von modules\custom\my_module\my_module.module). my_module_cron (Objekt) call_user_func ('my_module_cron', Objekt) (Zeile: 316) Drupal\Ultimate_cron\Entity\CronJob-> invokeCallback () (Zeile: 459) Drupal\Ultimate_cron\Entity\CronJob-> run (Objekt) (Zeile: 24) Drupal\Ultimate_cron\Controller\JobController-> runCronJob (Objekt) call_user_func_array (Array, Array) (Zeile: 123) Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> Drupal\Core\EventSubscriber {Schließung} () (Zeile: 582) ……

Zeile 103 im Fehler lautet:

$name = $row->field_user_full_name;
3
user93333

Sie können den Wert des Feldes nicht direkt aus dem Zeilenergebnis abrufen.
Sie können es erhalten, indem Sie wie folgt auf die Entität zugreifen:
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));
  }

Oder durchlaufen Sie die Felder wie folgt:
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));
        }
      }
    }
4
berramou

In meinem Fall war die '$ result -> _ entity' leer, daher musste ich den Wert aus dem '$ result -> _ object' abrufen:

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'];
  }
}
1
Ahmad Miri