D8のグループモジュールを使用して、以下のマシン名のビューがあります:group_members_per_group
のマシン名:
field_user_full_name
field_user_phone_number
上記のビューには、以下の結果があります:
Cronを実行し、ビューの結果のすべての行をループしているときに、for each
行のfield_user_phone_number
値を取得して、他のコードで使用できるようにします。
だから私は書いた:
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));
}
}
}
ただし、cronを実行すると、次のエラーメッセージが表示されます。
通知:未定義のプロパティ:my_module_cron()のDrupal\views\ResultRow :: $ field_user_full_name(modules\custom\my_module\my_module.moduleの行103)。 my_module_cron(Object)call_user_func( 'my_module_cron'、Object)(Line:316)Drupal\ultimate_cron\Entity\CronJob-> invokeCallback()(Line:459)Drupal\ultimate_cron\Entity\CronJob-> run(Object)(Line: 24)Drupal\ultimate_cron\Controller\JobController-> runCronJob(Object)call_user_func_array(Array、Array)(Line:123)Drupal\Core\EventSubscriber\EarlyRenderingControllerWrapperSubscriber-> Drupal\Core\EventSubscriber {closure}()(Line:582) ……
エラーの103行目は次のとおりです。
$name = $row->field_user_full_name;
行の結果からフィールドの値を直接取得することはできません。
次のようなエンティティにアクセスすることで取得できます。
オプション1
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));
}
または、次のようなフィールドをループします。
オプション2:
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));
}
}
}
私の場合、「$ result-> _ entity」は空だったので、「$ 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'];
}
}