1.20.x layout.class.inc Layout::setBlockPosition($block_uuid, $region_name, $position = NULL)

Move an existing block from its current region to a new one.

Parameters

string $block_uuid: The UUID of the block whose position is being retrieved.

string $region_name: The name of the region to which the block will be moved.

File

modules/layout/includes/layout.class.inc, line 596
Class for loading, modifying, and executing a layout.

Class

Layout
@file Class for loading, modifying, and executing a layout.

Code

function setBlockPosition($block_uuid, $region_name, $position = NULL) {
  // Set to the last position if position is greater than available places.
  if (empty($this->positions[$region_name]) || $position > count($this->positions[$region_name])) {
    $position = NULL;
  }

  // Find the current region.
  if ($current_region = $this->getBlockPosition($block_uuid)) {
    $current_position = array_search($block_uuid, $this->positions[$current_region]);
    // Remove the block from the current region.
    if ($current_position !== FALSE) {
      unset($this->positions[$current_region][$current_position]);
      $this->positions[$current_region] = array_values($this->positions[$current_region]);
    }
  }

  // Add the block to the new region in the correct position.
  if (isset($region_position)) {
    $new_positions = array();
    foreach (array_values($this->positions[$region_name]) as $region_position => $existing_uuid) {
      if ($region_position === $position) {
        $new_positions[] = $block_uuid;
      }
      $new_positions[] = $existing_uuid;
    }
    $this->positions[$region_name] = $new_positions;
  }
  else {
    $this->positions[$region_name][] = $block_uuid;
  }
}