简体   繁体   English

Drupal面板ipe工具栏

[英]drupal panels ipe toolbar

I added custom buttons to the panels ipe toolbar. 我向面板ipe工具栏添加了自定义按钮。 The toolbar only shows when you have the right permissions, and when the page is a panelized page. 仅当您具有正确的权限以及该页面为面板化页面时,才会显示工具栏。 I want to display the ipe toolbar also for other pages, containing that page his tabs (view/edit/devel/translate). 我还想显示其他页面的ipe工具栏,其中包含该页面的选项卡(查看/编辑/开发/翻译)。 Is it possible? 可能吗?

yes, this is possible. 是的,这是可能的。 I had a similar need in one of my projects. 在我的一个项目中,我也有类似的需求。 What I did in a custom module was: 我在自定义模块中所做的是:

  1. Use hook_page_alter to add the ipe toolbar when buttons DON'T exist (Panels IPE adds them when they do exist) 当按钮不存在时,使用hook_page_alter添加ipe工具栏(面板IPE在按钮存在时将其添加)
  2. Use hook_theme_registry_alter to use my own template function instead of the one provided by Panels IPE. 使用hook_theme_registry_alter来使用我自己的模板函数,而不要使用Panels IPE提供的模板函数。
  3. Create a custom theme function that adds my custom buttons 创建一个自定义主题功能,添加我的自定义按钮

In code it is something like this: 在代码中是这样的:

/**
 * Implements of hook_page_alter()
 */
function MYMODULE_page_alter(&$page) {
  // Check if Panels IPE is turned on.
  if (!module_exists('panels_ipe'))
    return;

  // Let Panels IPE add the buttons if they exist > If there are no buttons
  // then we'll still add the toolbar anyway.
  $buttons = &drupal_static('panels_ipe_toolbar_buttons', array());
  if (!empty($buttons)) {
    return;
  }

  $output = theme('panels_ipe_toolbar', array('buttons' => $buttons));

  $page['page_bottom']['panels_ipe'] = array(
    '#markup' => $output,
  );
}

/**
 * Implements hook_theme_registry_alter().
 */
function MYMODULE_theme_registry_alter(&$theme_registry) {
  // Check if Panels IPE is turned on.
  if (!module_exists('panels_ipe'))
    return;
  // Inject our own theme function instead of the one from Panels IPE
  $theme_registry['panels_ipe_toolbar']['function'] = 'theme_MYMODULE_panels_ipe_toolbar';
}

// This function is to be adjusted to add buttons and things.
function theme_MYMODULE_panels_ipe_toolbar($vars) {
  $buttons = $vars['buttons'];

  $output = "<div id='panels-ipe-control-container' class='clearfix'>";
  foreach ($buttons as $key => $ipe_buttons) {
    $output .= "<div id='panels-ipe-control-$key' class='panels-ipe-control'>";

    // Controls in this container will appear when the IPE is not on.
    $output .= '<div class="panels-ipe-button-container clearfix">';
    foreach ($ipe_buttons as $button) {
      $output .= is_string($button) ? $button : drupal_render($button);
    }
    $output .= '</div>';

    // Controls in this container will appear when the IPE is on. It is usually
    // filled via AJAX.
    $output .= '<div class="panels-ipe-form-container clearfix"></div>';
    $output .= '</div>';
  }

  $output .= "</div>";

  return $output;
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM