In / admin / people möchte ich den Anzeigenamen ausblenden (dh der Anzeigename darf nicht in der Benutzerliste erscheinen), sondern nur für eine bestimmte Rolle.
In meiner .module-Datei habe ich folgende Hooks ausprobiert:
function hook_views_data_alter(array &$data) {
kint($data['users']);die;
}
function hook_views_pre_render(\Drupal\views\ViewExecutable $view) {
if($view->id() == 'myview'){
print_r($view->result);die;
// kint($value->_entity->get('title')->value);
}
}
function hook_views_post_render(\Drupal\views\ViewExecutable $view) {
if ($view->id() == 'viewid') {
// Set the view title.
$field_name = $view->getFields();
}
}
function hook_field_views_data_views_data_alter(array &$data, \Drupal\field\FieldStorageConfigInterface $field) {
$field_name = $field->getName();
echo 'hjsjhwd';
print_r($field_name);die;
}
Keiner von ihnen hat mir geholfen. Ich habe darüber nachgedacht, Felder der Ansicht "Benutzer" zu erhalten, und danach werde ich sie für eine bestimmte Rolle deaktivieren. In der Liste der Ansichten wird das Feld Name weiterhin angezeigt. Wie kann ich es für eine bestimmte Rolle ausblenden?
Gibt es eine Möglichkeit, dies zu erreichen?
display name
/ admin / page, ich möchte diese bestimmte Spalte tatsächlich ausblenden. Wenn ich ein Feld ausblende, wird diese Spalte möglicherweise auch für meine bestimmte Rolle ausgeblendet.Antworten:
Am effizientesten wäre die Verwendung von hook_views_pre_view (), mit der Sie eine Ansicht zu Beginn des Prozesses ändern können, dh bevor eine Abfrage erstellt / ausgeführt wird und bevor ein Rendering stattfindet. Sie können den Feldhandler 'Name' basierend auf der gewünschten Logik aus der Ansicht entfernen.
Bei dieser Lösung wird davon ausgegangen, dass Sie nur an diesem speziellen Anwendungsfall interessiert sind. Entfernen Sie das Feld nur aus dieser speziellen Ansicht. Benutzer können möglicherweise weiterhin die Anzeigenamen von Benutzern in anderen Bereichen der Website anzeigen.
quelle
$views->id() ===
?$views->id()
? Sollte es sein$view->id()
?if (empty(array_intersect($userRoles, $userRolesAllowed)))
. Weitere Informationen zuarray_intersect
Sie können Felder mit hook_entity_field_access ausblenden . Sie können Felder basierend auf dem Benutzerkonto (Rolle ist eine seiner Eigenschaften), der Operation und der Entität, die das Feld enthalten, ausblenden.
Sie können das Feld Berechtigungen auch verwenden , um ein Feld vor bestimmten Rollen auszublenden.
quelle
Wenn Sie den Tabellenkopf <td> und auch die Zeilen <td> löschen müssen, können Sie template_preprocess_views_view_table verwenden
Hinweis: Versuchen Sie bei solchen Anforderungen, nicht mehr als zwei Haken zu verwenden, um Ihre Anforderungen zu erfüllen. Da Drupal immer alles macht, was Sie wollen, verwenden Sie nicht mehr einen oder zwei Haken.
Update: Für Drupal 7 wird auch derselbe Hook-Name für diese URL verwendet. Template_preprocess_views_view_table
quelle