2014-10-17 3 views
0

Мне пришлось выполнить задачу, создав обработчик области пользовательского вида. Все работает отлично, и я могу разместить обработчик в области заголовка через интерфейс представления. К сожалению, из-за структуры развертывания в этом проекте я не могу просто обновить код, относящийся к представлению. Мой модуль, создающий обработчик настраиваемой области, также должен изменить представление, чтобы поместить обработчик области в заголовок.Как разместить обработчик области пользовательских представлений в заголовках представлений программно?

Я создал вид зоны обработчика штраф следующим кодом:

/** 
* Implements hook_views_data(). 
* 
* Purpose: Establish a views area handler for displaying. 
*/ 
function custom_shipping_notification_views_data() { 
    // Initialize data array. 
    $data = array(); 

    // Define a handler for an area used to display if qualifies for free ship. 
    $data['commerce_order']['free_shipping_message'] = array(
    'title' => t('Free Shipping Notification'), 
    'help' => t('Displays the free shipping notification on cart form.'), 
    'area' => array(
     'handler' => 'custom_shipping_notification_handler', 
    ), 
); 

    // Return data. 
    return $data; 
} 

Это все работает, так что я не попасть в сам обработчик. Я могу разместить это через представление UI без проблем. Мне нужно поместить это в заголовок определенного вида. Управление видом осуществляется в функциях, но из-за развертывания клиентов и структуры репо я не могу изменить эту функцию. Мне нужно изменить представление изнутри моего модуля, содержащего настраиваемую область.

Я попытался использовать этот код без толка:

function custom_shipping_notification_views_pre_build(&$view){ 
    if ($view->name == 'commerce_cart_form') { 
    $id = $view->add_item('default', 'header', 'views', 'free_shipping_message'); 
    } 
} 

Кто-нибудь есть какие-нибудь идеи? Я, очевидно, попадаю в туманную территорию, так как метод add_item имеет однострочное описание и примеры кодирования. Большая часть документации по этой области также не разработана.

ответ

1
function YOURMODULENAME_views_pre_view(&$view, &$display_id, &$args) { 
    if($view->name == 'YOURVIEWNAME' && $display_id == 'YOURDISPLAYID') { 
     $footer = "This is the text that I want in my footer!!!!"; 
     $options = array(
     'id' => 'area', 
     'table' => 'views', 
     'field' => 'area', 
     'empty' => FALSE, 
     'content' => $footer, 
     'format' => 'filtered_html', 
     'tokenize' => 0, 
    ); 
    $view->set_item('YOURDISPLAYID', 'footer', 'area', $options); 

    } 
} 
Смежные вопросы