Override Gin local actions block to render links in a dropbutton.

This commit is contained in:
Michael Stenta 2021-09-08 16:05:48 -04:00
parent 118250db66
commit ee21d1e38d
2 changed files with 58 additions and 0 deletions

View File

@ -60,4 +60,24 @@ function farm_ui_theme_install() {
],
];
Block::create($values)->save();
// Modify the block.block.gin_local_actions config to use our class.
$local_actions_block = \Drupal::configFactory()->getEditable('block.block.gin_local_actions');
$local_actions_block->set('plugin', 'farm_local_actions_block');
$local_actions_block->set('settings.id', 'farm_local_actions_block');
$local_actions_block->set('settings.provider', 'farm_ui_theme');
$local_actions_block->save();
}
/**
* Implements hook_uninstall().
*/
function farm_ui_theme_uninstall() {
// Revert changes to block.block.gin_local_actions config.
$local_actions_block = \Drupal::configFactory()->getEditable('block.block.gin_local_actions');
$local_actions_block->set('plugin', 'local_actions_block');
$local_actions_block->set('settings.id', 'local_actions_block');
$local_actions_block->set('settings.provider', 'core');
$local_actions_block->save();
}

View File

@ -0,0 +1,38 @@
<?php
namespace Drupal\farm_ui_theme\Plugin\Block;
use Drupal\Core\Menu\Plugin\Block\LocalActionsBlock;
/**
* Provides a block to display the local actions.
*
* @Block(
* id = "farm_local_actions_block",
* admin_label = @Translation("Primary farm admin actions")
* )
*/
class FarmLocalActionsBlock extends LocalActionsBlock {
/**
* {@inheritdoc}
*/
public function build() {
// Render local actions as a dropbutton.
$local_actions = parent::build();
$links = [];
foreach ($local_actions as $local_action) {
if (!empty($local_action['#link']) && $local_action['#access']->isAllowed()) {
$links[] = $local_action['#link'];
}
}
return [
'#type' => 'dropbutton',
'#dropbutton_type' => 'standard',
'#links' => $links,
'#cache' => $local_actions['#cache'],
];
}
}