View source
<?php
use Drupal\Core\Routing\RouteMatchInterface;
use Drupal\Component\Utility\NestedArray;
function context_help($route_name, RouteMatchInterface $route_match) {
switch ($route_name) {
case 'help.page.context':
$output = '';
$output .= '<h3>' . t('About') . '</h3>';
$output .= '<p>' . t('The Context module lets users define conditions for when certain reactions should take place.') . '</p>';
$output .= '<p>' . t('An example of a condition could be when viewing a certain node type and blocks should be placed as a reaction when viewing a page with this node type.') . '</p>';
$output .= '<h3>' . t('Uses') . '</h3>';
$output .= '<dl>';
$output .= '<dt>' . t('Managing context') . '</dt>';
$output .= '<dd>' . t('Users with <em>Administer contexts</em> permission can add contextual conditions and reactions for different portions of their site. For each context, they can choose the conditions that trigger this context to be active and choose different aspects of their site that should react to this active context.') . '</dd>';
$output .= '<dt>' . t('Adding new custom reactions') . '</dt>';
$output .= '<dd>' . t('Reactions for the context module are defined trough the new <a href=":link">Drupal 8 Plugin API</a>.', array(
':link' => 'https://www.drupal.org/developing/api/8/plugins',
)) . '</dd>';
$output .= '<dd>' . t('The Context module defines a plugin type named ContextReaction that users can extend when creating their own plugins.') . '</dd>';
$output .= '<dd>' . t('A context reaction requires a configuration form and execute method. The execution of the plugin is also something that will have to be handled by the author of the reaction.') . '</dd>';
$output .= '</dl>';
return $output;
}
}
function context_preprocess_html(&$variables) {
$context_manager = \Drupal::service('context.manager');
foreach ($context_manager
->getActiveReactions('body_class') as $reaction) {
$variables['attributes'] = NestedArray::mergeDeep($variables['attributes'], $reaction
->execute());
}
}
function context_theme_suggestions_page_alter(array &$suggestions, array $variables) {
$context_manager = \Drupal::service('context.manager');
foreach ($context_manager
->getActiveReactions('page_template_suggestions') as $reaction) {
$template_suggestions = explode(PHP_EOL, $reaction
->execute());
$suggestions = array_merge($suggestions, $template_suggestions);
}
}
function context_preprocess_page(&$variables) {
$current_theme = \Drupal::service('theme.negotiator')
->determineActiveTheme(Drupal::routeMatch());
$context_manager = \Drupal::service('context.manager');
foreach ($context_manager
->getActiveReactions('regions') as $region_reaction) {
$configuration = $region_reaction
->getConfiguration();
if (isset($configuration['regions'][$current_theme])) {
foreach ($configuration['regions'][$current_theme] as $region) {
unset($variables['page'][$region]);
}
}
}
}