class JsExampleController
Same name in other branches
- 3.x modules/js_example/src/Controller/JsExampleController.php \Drupal\js_example\Controller\JsExampleController
- 8.x-1.x js_example/src/Controller/JsExampleController.php \Drupal\js_example\Controller\JsExampleController
Controller for JavaScript Example description page.
This class uses the DescriptionTemplateTrait to display the module description we put in the templates/description.html.twig file.
Hierarchy
- class \Drupal\js_example\Controller\JsExampleController uses \Drupal\examples\Utility\DescriptionTemplateTrait, \Drupal\Core\StringTranslation\StringTranslationTrait
Expanded class hierarchy of JsExampleController
File
-
modules/
js_example/ src/ Controller/ JsExampleController.php, line 14
Namespace
Drupal\js_example\ControllerView source
class JsExampleController {
use DescriptionTemplateTrait;
use StringTranslationTrait;
/**
* {@inheritdoc}
*/
protected function getModuleName() {
return 'js_example';
}
/**
* Weight demonstration.
*
* We demonstrate how to attach a number of scripts to the render array via
* a library.
*
* In this controller, on the Drupal side:
* - We create a container with an ID the scripts uses to identify the
* container.
* - We attach some scripts which generate color-coded content. We use the
* 'weight' attribute to set the order in which the scripts are included in
* the library declaration.
* - We add values to drupalSettings, which is used to pass data from PHP to
* JavaScript.
*
* The order in which the color scripts are executed will end up being the order
* of the content.
*
* The 'weight' attribute in the .libraries.yml file determines the order in
* which a script is added to the page. To see this in action:
* - Uncheck the "Aggregate Javascript files" setting on
* admin/config/development/performance.
* - Visit examples/js_example/colors and examine the page source.
* You will see that the color scripts have been added to <head> following
* the weight order.
*
* @return array
* A render array.
*/
public function showColors() {
$colors = [
'red' => $this->t('I am red.'),
'blue' => $this->t('I am blue.'),
'green' => $this->t('I am green.'),
'cyan' => $this->t('I am cyan.'),
'magenta' => $this->t('I am magenta.'),
'yellow' => $this->t('I am yellow.'),
];
// We give use an ID so that to target the HTML markup we added.
$build['content'] = [
'#markup' => '<div id="js-example-colors"></div>',
];
// Attach the library.
$build['#attached']['library'][] = 'js_example/colors';
// Attach the JavaScript settings.
$build['#attached']['drupalSettings']['javaScriptExample']['colors'] = $colors;
return $build;
}
/**
* Accordion page implementation.
*
* We're allowing a twig template to define our content in this case,
* which isn't normally how things work, but it's easier to demonstrate
* the JavaScript this way.
*
* @return array
* A render array.
*/
public function showAccordion() {
// We get all the page content from a theme hook. This is not a good
// practice, though: Theme hooks should just theme the content they obtain.
$build['accordion'] = [
'#theme' => 'js_example_accordion',
'#title' => $this->t('Click on sections to expand or collapse them.'),
];
// The usual way to attach a library to a page is adding it to the render
// array via the #attached property. In this case, we added it via the
// template file we use. This is why the following lines are commented out.
//
// $build['accordion']['#attached']['library'][] = 'js_example/accordion';
return $build;
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title | Overrides |
---|---|---|---|---|---|
DescriptionTemplateTrait::description | public | function | Generate a render array with our templated content. | ||
DescriptionTemplateTrait::getDescriptionTemplatePath | protected | function | Get full path to the template. | ||
DescriptionTemplateTrait::getDescriptionVariables | protected | function | Variables to act as context to the twig template file. | 1 | |
JsExampleController::getModuleName | protected | function | Name of our module. | Overrides DescriptionTemplateTrait::getModuleName | |
JsExampleController::showAccordion | public | function | Accordion page implementation. | ||
JsExampleController::showColors | public | function | Weight demonstration. | ||
StringTranslationTrait::$stringTranslation | protected | property | The string translation service. | 3 | |
StringTranslationTrait::formatPlural | protected | function | Formats a string containing a count of items. | ||
StringTranslationTrait::getNumberOfPlurals | protected | function | Returns the number of plurals supported by a given language. | ||
StringTranslationTrait::getStringTranslation | protected | function | Gets the string translation service. | ||
StringTranslationTrait::setStringTranslation | public | function | Sets the string translation service to use. | 2 | |
StringTranslationTrait::t | protected | function | Translates a string to the current language or to a given language. |