Я только что сделал это, добавив языковой фильтр к существующему представлению программно. Вот как я подошел к нему.
В интерфейсе views_ui (admin / build / views) выберите свой вид и добавьте фильтр через веб-интерфейс. После того, как вы настроите его правильно, экспортируйте ваш вид. Вы получите большой массив в PHP-коде. Найдите свой фильтр в массиве и скопируйте его во временный текстовый файл для дальнейшего использования.
Теперь, в коде, сделайте это:
// Load the view by specifying its name (as displayed at admin/build/views
$view = views_get_view('name_of_view');
// Specify the display you are editing - you can see this at admin/build/views/edit/name_of_view.
// Usually it's something like 'page' or 'block' or 'default'
$display = 'default';
$view->view_set_display($display);
// Now load up an available filter. You must do this step - it's the equivalent of
// clicking 'add' in the interface.
// filter_name is the same as what is specified in your export from before.
$filter_name = 'language';
$filter = $view->get_item($display, 'filter', $filter_name);
// Now set the arguments. This will need to match what is in your export from before...
$filter['value']['***CURRENT_LANGUAGE***'] = '***CURRENT_LANGUAGE***';
// ...and save the filter.
$view->set_item('default', 'filter', 'language', $filter);
Это хорошо сработало для меня. Для справки вот соответствующая выдержка из моего экспорта просмотров:
'language' => array(
'operator' => 'in',
'value' => array(
'***CURRENT_LANGUAGE***' => '***CURRENT_LANGUAGE***',
),
'group' => '0',
'exposed' => FALSE,
'expose' => array(
'operator' => FALSE,
'label' => '',
),
'id' => 'language',
'table' => 'node',
'field' => 'language',
'override' => array(
'button' => 'Override',
),
'relationship' => 'none',
),