如何以编程方式将自定义视图区域处理程序放入视图标题?

时间:2014-10-17 18:08:49

标签: drupal drupal-7 drupal-views

我必须通过创建自定义视图区域处理程序来完成任务。一切正常,我可以通过视图UI将处理程序放入标题区域。不幸的是,由于这个项目的部署结构,我不能只更新与视图相关的代码。我创建自定义区域处理程序的模块还需要更改视图以将区域处理程序放入标题中。

我使用以下代码创建了视图区域处理程序:

/**
 * 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放置这个没问题。我需要将它放入特定视图的标题中。视图在功能中进行管理,但由于客户端部署和repo结构,我无法合理地更改功能。我需要从包含自定义区域的模块内部更改视图。

我试图使用此代码无效:

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 个答案:

答案 0 :(得分: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);

   }
}