Ich möchte einige Feldeinstellungen in einer bestimmten Ansicht ändern, die programmgesteuert mit Ansichten erstellt wurde .
Zum Beispiel möchte ich die Einstellungen " Formatierer " und " Bildstil " eines Bildfelds ändern . So sehen die Einstellungen dieses Feldes aus, wenn ich diese Ansicht exportiere:
/* Field: Taxonomy term: Natural images */
$handler->display->display_options['fields']['field_gallery_natural_images']['id'] = 'field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['table'] = 'field_data_field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['field'] = 'field_gallery_natural_images';
$handler->display->display_options['fields']['field_gallery_natural_images']['click_sort_column'] = 'fid';
$handler->display->display_options['fields']['field_gallery_natural_images']['type'] = 'colorbox';
$handler->display->display_options['fields']['field_gallery_natural_images']['settings'] = array(
'colorbox_node_style' => '',
'colorbox_image_style' => '',
'colorbox_gallery' => 'post',
'colorbox_gallery_custom' => '',
'colorbox_caption' => 'auto',
'colorbox_caption_custom' => '',
'display_empty' => '',
'custom_text' => '',
'empty_callback' => 'mymodule_empty_fields_no_data',
);
Ich möchte den "Bildstil" des Colorbox-Formatierers irgendwie so ändern:
$handler->display->display_options['fields']['field_gallery_natural_images']['settings']['colorbox_node_style'] = 'thumbnail';
und speichere das. Wie soll ich das machen
Wie hier:
BEARBEITEN 1.
Vielleicht sollte ich verwenden views_save_view()
:
http://api.drupal.org/api/views/views.module/function/views_save_view/7
Es speichert eine Ansicht - also sollte ich vielleicht die gesamte Ansicht abfragen, diese ändern und diese Funktion verwenden. Aber wie genau?
BEARBEITEN 2.
Ich habe festgestellt, views/includes/admin.inc
dass die angegebene Ansicht folgendermaßen gespeichert wird: $form_state['view']->save();
in views_ui_edit_view_form_submit()
.
Ich weiß bereits, wie man den "Bildstil" eines Bildfelds in einem bestimmten Ansichtsmodus programmgesteuert ändert (wie auf der Registerkarte "Anzeige verwalten" nach dem Klicken auf das Zahnrad) , aber jetzt würde ich mich freuen, wenn ich mit einer bestimmten Ansicht etwas Ähnliches tun könnte .
Antworten:
AKTUALISIERT :
Mit diesem Codefragment können Sie eine Ansicht ändern, ohne
views_alter
:Ändern Sie die
default
Anzeige-ID, wenn Sie eine andere als die Standardanzeige verwenden möchten.Wenn Sie die Ansicht mithilfe
hook_views_default_views()
des Moduls Features oder des Features-Moduls in Code exportiert haben , gibt es einen Hook, mit dem Sie die Ansichten programmgesteuert ändern können:Zum Beispiel:
Denken Sie daran, den Cache zu leeren und die Ansicht zurückzusetzen, um Änderungen zu übernehmen.
quelle
hook_views_default_views_alter()
nur zum Ändern von "Standardansichten, die von anderen Modulen definiert wurden" , was bedeutet, dass Ansichten, die über die Benutzeroberfläche " Ansichten" erstellt (oder sogar überschrieben?) wurden (die nur in der Datenbank gespeichert sind), nicht auf diese Weise geändert werden können, sondern nur die definierten Ansichten im Code, aber jetzt ist mein Zweck, einige bestimmte Ansichten zu ändern, die über die Benutzeroberfläche von Ansichten erstellt wurden, ohne sie zu exportieren. :-( Irgendwelche anderen Ideen?views_ui_edit_form_get_bucket()
, werden Felder hinzugefügt und verknüpftadmin/structure/views/nojs/config-item/$view->name/$display->id/$type/$id
und können geändert werden. Vielleicht sollte ich diesen Weg gehen und diesen nachverfolgen ... Ich habe ihn gestartet, aber immer noch nicht gefunden die wirkliche Lösung.views_get_view()
, ändere die entsprechenden Anzeigeeinstellungen und speichere danach die Ansicht mitviews_save_view()
wirklich gelöst! Vielen Dank, smartinm ! :) Du verdienst das Lob. :) Ich habe auch Ihre Antwort für Ihre Bemühungen positiv bewertet. Ich habe es so getestet: pastebin.com/ukSy0xqM , und es hat wirklich funktioniert.