class SinglePageSiteController in Single Page Site 8
Same name and namespace in other branches
- 2.x src/Controller/SinglePageSiteController.php \Drupal\single_page_site\Controller\SinglePageSiteController
- 2.0.x src/Controller/SinglePageSiteController.php \Drupal\single_page_site\Controller\SinglePageSiteController
Class SinglePageSiteController.
@package Drupal\single_page_site\Controller
Hierarchy
- class \Drupal\Core\Controller\ControllerBase implements ContainerInjectionInterface uses LoggerChannelTrait, MessengerTrait, LinkGeneratorTrait, RedirectDestinationTrait, UrlGeneratorTrait, StringTranslationTrait
- class \Drupal\single_page_site\Controller\SinglePageSiteController
Expanded class hierarchy of SinglePageSiteController
File
- src/
Controller/ SinglePageSiteController.php, line 21
Namespace
Drupal\single_page_site\ControllerView source
class SinglePageSiteController extends ControllerBase {
protected $manager;
protected $moduleHandler;
protected $renderer;
protected $eventDispatcher;
/**
* SinglePageSiteController constructor.
*
* @param \Drupal\single_page_site\Manager\SinglePageSiteManager $manager
* Manager value.
* @param \Drupal\Core\Extension\ModuleHandler $module_handler
* Module handler value.
* @param \Drupal\Core\Render\RendererInterface $renderer
* Renderer value.
* @param \Symfony\Component\EventDispatcher\EventDispatcherInterface $event_dispatcher
* Event dispatcher value.
*/
public function __construct(SinglePageSiteManager $manager, ModuleHandler $module_handler, RendererInterface $renderer, EventDispatcherInterface $event_dispatcher) {
$this->manager = $manager;
$this->moduleHandler = $module_handler;
$this->renderer = $renderer;
$this->eventDispatcher = $event_dispatcher;
}
/**
* {@inheritdoc}
*/
public static function create(ContainerInterface $container) {
return new static($container
->get('single_page_site.manager'), $container
->get('module_handler'), $container
->get('renderer'), $container
->get('event_dispatcher'));
}
/**
* Sets title.
*/
public function setTitle() {
return $this->manager
->getPageTitle();
}
/**
* Renders single page.
*
* @return array
* Return the array with render.
*/
public function render() {
if ($menu = $this->manager
->getMenu()) {
$items = array();
$current_item_count = 1;
// Collect all drupal messages and store them, we will show them later on.
$messages = drupal_get_messages();
// Now fetch menu tree.
$tree = $this->manager
->getMenuChildren();
foreach ($tree as $menu_item) {
if ($menu_item_details = $this->manager
->isMenuItemRenderable($menu_item)) {
// Get route params.
$params = $menu_item_details['route_parameters'];
// Generate href.
$url = Url::fromRoute($menu_item_details['route_name'], $params);
$href = $url
->toString();
$internalPath = $url
->getInternalPath();
// Generate anchor.
$anchor = $this->manager
->generateAnchor($href);
// At this point we can execute request to render content.
$render = $this->manager
->executeAndRenderSubRequest($internalPath);
$output = is_array($render) ? $this->renderer
->render($render) : $render;
// Let other modules makes changes to $output.
// This alter hook is deprecated and will be removed in next major
// release. Use EventSubscriber.
$this->moduleHandler
->alter('single_page_site_output', $output, $current_item_count);
// Dispatch event to allow other modules to make changes to the
// output.
/** @var EventSinglePageSiteAlterOutput $event */
$event = new EventSinglePageSiteAlterOutput($output, $current_item_count);
$event = $this->eventDispatcher
->dispatch(SinglePageSiteEvents::SINGLE_PAGE_SITE_ALTER_OUTPUT, $event);
// Build renderable array.
$item = array(
'output' => $event
->getOutput(),
'anchor' => $anchor,
'title' => $menu_item->link
->getTitle(),
'tag' => $this->manager
->getTitleTag(),
);
array_push($items, $item);
$current_item_count++;
}
}
// Re-inject the messages.
foreach ($messages as $type => $data) {
foreach ($data as $message) {
drupal_set_message($message, $type);
}
}
// Render output and attach JS files.
$js_settings = array(
'menuClass' => $this->manager
->getMenuClass(),
'distanceUp' => $this->manager
->getDistanceUp(),
'distanceDown' => $this->manager
->getDistanceDown(),
'updateHash' => $this->manager
->updateHash(),
'offsetSelector' => $this->manager
->getOffsetSelector(),
);
$page_content = array(
'#theme' => 'single_page_site',
'#items' => $items,
'#attached' => array(
'library' => array(
'single_page_site/single_page_site.scrollspy',
),
),
);
if ($this->manager
->getSmoothScrolling()) {
// Add smooth scrolling.
$page_content['#attached']['library'][] = 'single_page_site/single_page_site.scroll';
}
$page_content['#attached']['drupalSettings']['singlePage'] = $js_settings;
return $page_content;
}
else {
// If settings aren't set.
return array(
'#markup' => $this
->t('You have to !configure your single page before you can use it.', array(
'!configure' => Link::fromTextAndUrl(t('configure'), Url::fromRoute('single_page_site.config')),
)),
);
}
}
}
Members
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
ControllerBase:: |
protected | property | The configuration factory. | |
ControllerBase:: |
protected | property | The current user service. | 1 |
ControllerBase:: |
protected | property | The entity form builder. | |
ControllerBase:: |
protected | property | The entity manager. | |
ControllerBase:: |
protected | property | The entity type manager. | |
ControllerBase:: |
protected | property | The form builder. | 2 |
ControllerBase:: |
protected | property | The key-value storage. | 1 |
ControllerBase:: |
protected | property | The language manager. | 1 |
ControllerBase:: |
protected | property | The state service. | |
ControllerBase:: |
protected | function | Returns the requested cache bin. | |
ControllerBase:: |
protected | function | Retrieves a configuration object. | |
ControllerBase:: |
private | function | Returns the service container. | |
ControllerBase:: |
protected | function | Returns the current user. | 1 |
ControllerBase:: |
protected | function | Retrieves the entity form builder. | |
ControllerBase:: |
protected | function | Retrieves the entity manager service. | |
ControllerBase:: |
protected | function | Retrieves the entity type manager. | |
ControllerBase:: |
protected | function | Returns the form builder service. | 2 |
ControllerBase:: |
protected | function | Returns a key/value storage collection. | 1 |
ControllerBase:: |
protected | function | Returns the language manager service. | 1 |
ControllerBase:: |
protected | function | Returns the module handler. | 2 |
ControllerBase:: |
protected | function |
Returns a redirect response object for the specified route. Overrides UrlGeneratorTrait:: |
|
ControllerBase:: |
protected | function | Returns the state storage service. | |
LinkGeneratorTrait:: |
protected | property | The link generator. | 1 |
LinkGeneratorTrait:: |
protected | function | Returns the link generator. | |
LinkGeneratorTrait:: |
protected | function | Renders a link to a route given a route name and its parameters. | |
LinkGeneratorTrait:: |
public | function | Sets the link generator service. | |
LoggerChannelTrait:: |
protected | property | The logger channel factory service. | |
LoggerChannelTrait:: |
protected | function | Gets the logger for a specific channel. | |
LoggerChannelTrait:: |
public | function | Injects the logger channel factory. | |
MessengerTrait:: |
protected | property | The messenger. | 29 |
MessengerTrait:: |
public | function | Gets the messenger. | 29 |
MessengerTrait:: |
public | function | Sets the messenger. | |
RedirectDestinationTrait:: |
protected | property | The redirect destination service. | 1 |
RedirectDestinationTrait:: |
protected | function | Prepares a 'destination' URL query parameter for use with \Drupal\Core\Url. | |
RedirectDestinationTrait:: |
protected | function | Returns the redirect destination service. | |
RedirectDestinationTrait:: |
public | function | Sets the redirect destination service. | |
SinglePageSiteController:: |
protected | property | ||
SinglePageSiteController:: |
protected | property | ||
SinglePageSiteController:: |
protected | property |
The module handler. Overrides ControllerBase:: |
|
SinglePageSiteController:: |
protected | property | ||
SinglePageSiteController:: |
public static | function |
Instantiates a new instance of this class. Overrides ControllerBase:: |
|
SinglePageSiteController:: |
public | function | Renders single page. | |
SinglePageSiteController:: |
public | function | Sets title. | |
SinglePageSiteController:: |
public | function | SinglePageSiteController constructor. | |
StringTranslationTrait:: |
protected | property | The string translation service. | 1 |
StringTranslationTrait:: |
protected | function | Formats a string containing a count of items. | |
StringTranslationTrait:: |
protected | function | Returns the number of plurals supported by a given language. | |
StringTranslationTrait:: |
protected | function | Gets the string translation service. | |
StringTranslationTrait:: |
public | function | Sets the string translation service to use. | 2 |
StringTranslationTrait:: |
protected | function | Translates a string to the current language or to a given language. | |
UrlGeneratorTrait:: |
protected | property | The url generator. | |
UrlGeneratorTrait:: |
protected | function | Returns the URL generator service. | |
UrlGeneratorTrait:: |
public | function | Sets the URL generator service. | |
UrlGeneratorTrait:: |
protected | function | Generates a URL or path for a specific route based on the given parameters. |