PageManager.php in Bootstrap Layouts 8.4        
                          
                  
                        
  
  
  
  
File
  src/Plugin/BootstrapLayouts/PageManager.php
  
    View source  
  <?php
namespace Drupal\bootstrap_layouts\Plugin\BootstrapLayouts;
use Drupal\bootstrap_layouts\BootstrapLayout;
class PageManager extends BootstrapLayoutsHandlerBase {
  
  public function loadInstances(array $entity_ids = NULL) {
    $layouts = [];
    $properties = [
      'variant' => 'panels_variant',
    ];
    if ($entity_ids) {
      $properties['id'] = $entity_ids;
    }
    
    $entity_type_manager = $this->container
      ->get('entity_type.manager');
    
    $config_entities = $entity_type_manager
      ->getStorage('page_variant')
      ->loadByProperties($properties);
    foreach ($config_entities as $entity_id => $config_entity) {
      if (($info = $config_entity
        ->get('variant_settings')) && isset($info['layout']) && isset($info['blocks'])) {
        $id = $info['layout'];
        
        $regions = [];
        foreach ($info['blocks'] as $uuid => $block) {
          $regions[$block['region']][$uuid] = $block;
        }
        
        $settings = isset($info['layout_settings']) ? $info['layout_settings'] : [];
        
        $layouts[$entity_id] = new BootstrapLayout($id, $regions, $settings);
      }
    }
    return $layouts;
  }
  
  public function saveInstances(array $layouts = []) {
    
    $entity_type_manager = $this->container
      ->get('entity_type.manager');
    
    $config_entities = $entity_type_manager
      ->getStorage('page_variant')
      ->loadByProperties([
      'variant' => 'panels_variant',
      'id' => array_keys($layouts),
    ]);
    
    foreach ($layouts as $entity_id => $layout) {
      $config_entity = $config_entities[$entity_id];
      $info = $config_entity
        ->get('variant_settings');
      $info['layout'] = $layout
        ->getId();
      
      $info['blocks'] = [];
      foreach ($layout
        ->getRegions() as $region => $blocks) {
        foreach ($blocks as $uuid => $block) {
          $block['region'] = $region;
          $info['blocks'][$uuid] = $block;
        }
      }
      $info['layout_settings'] = $layout
        ->getSettings();
      $config_entity
        ->set('variant_settings', $info)
        ->save();
    }
  }
}
 
Classes
        
  
  
      
      
         
      
                  | Name   | Description | 
    
    
          
                  | PageManager | Handles Display Suite specific layout implementations. |