3 namespace Drupal\bootstrap_layouts\Plugin\BootstrapLayouts;
5 use Drupal\bootstrap_layouts\BootstrapLayout;
6 use Drupal\Core\Entity\Entity\EntityViewDisplay;
9 * Handles Display Suite specific layout implementations.
11 * @BootstrapLayoutsHandler("ds")
13 class Ds extends BootstrapLayoutsHandlerBase {
18 public function loadInstances(array $entity_ids = NULL) {
20 /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $display */
21 foreach (EntityViewDisplay::loadMultiple($entity_ids) as $entity_id => $display) {
22 if (($info = $display->getThirdPartySettings('ds')) && isset($info['layout']['id'])) {
23 $id = $info['layout']['id'];
24 $regions = $info['regions'];
25 $settings = $info['layout']['settings'];
26 $path = isset($info['layout']['path']) ? $info['layout']['path'] : '';
27 $layouts[$entity_id] = new BootstrapLayout($id, $regions, $settings, $path);
36 public function saveInstances(array $layouts = []) {
37 $displays = EntityViewDisplay::loadMultiple(array_keys($layouts));
38 /** @var \Drupal\bootstrap_layouts\BootstrapLayout[] $layouts */
39 foreach ($layouts as $entity_id => $layout) {
40 /** @var \Drupal\Core\Entity\Display\EntityDisplayInterface $display */
41 $display = $displays[$entity_id];
42 $info = $display->getThirdPartySettings('ds');
43 $info['layout']['id'] = $layout->getId();
44 $info['regions'] = $layout->getRegions();
45 $info['layout']['settings'] = $layout->getSettings();
46 $info['layout']['path'] = $layout->getPath();
48 // Unfortunately, there is no "setThirdPartySettings" method, so each
49 // property must be iterated over manually, set and then saved.
50 foreach ($info as $key => $value) {
51 $display->setThirdPartySetting('ds', $key, $value);