панель инструментов ipe панели drupal

Я добавил пользовательские кнопки на панель инструментов ipe. Панель инструментов отображается только в том случае, если у вас есть соответствующие разрешения и когда страница представляет собой панельную страницу. Я хочу отобразить панель инструментов ipe также для других страниц, содержащих эту страницу с его вкладками (просмотр/редактирование/разработка/перевод). Является ли это возможным?


person Community    schedule 10.04.2014    source источник


Ответы (1)


да, это возможно. У меня была аналогичная потребность в одном из моих проектов. Что я сделал в пользовательском модуле:

  1. Используйте hook_page_alter, чтобы добавить панель инструментов ipe, когда кнопки НЕ существуют (Panels IPE добавляет их, когда они существуют)
  2. Используйте hook_theme_registry_alter, чтобы использовать мою собственную функцию шаблона вместо той, что предоставляется Panels IPE.
  3. Создайте пользовательскую функцию темы, которая добавляет мои пользовательские кнопки

В коде это примерно так:

/**
 * 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;
}
person Dagomar    schedule 24.06.2014