diff --git a/core/modules/layout/lib/Drupal/layout/Config/UnboundDisplayStorageController.php b/core/modules/layout/lib/Drupal/layout/Config/UnboundDisplayStorageController.php new file mode 100644 index 0000000..adf4675 --- /dev/null +++ b/core/modules/layout/lib/Drupal/layout/Config/UnboundDisplayStorageController.php @@ -0,0 +1,36 @@ +create($new_config->get()); + $unbound_display->save(); + + // Now, create a corresponding bound display - if one doesn't exist already. + if (!entity_load('display', $name)) { + // @todo need finer-grained control than a single global default + // @todo how do we figure out whether we're doing frontend, admin, or...other? + $layout = drupal_container()->get('plugin.manager.layout') + ->createInstance(config('system.site')->get('default_layout')); + $bound_display = $unbound_display->generateDisplay($layout, $name); + $bound_display->save(); + } + + // @todo consider adding flexibility around which display type to create +// $controller = drupal_container() +// ->get('plugin.manager.entity') +// ->getStorageController('display'); + + // $controller->create(); + return TRUE; + } +} diff --git a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php index 5450e2c..c4bf8c2 100644 --- a/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php +++ b/core/modules/layout/lib/Drupal/layout/Plugin/Core/Entity/UnboundDisplay.php @@ -24,7 +24,7 @@ * id = "unbound_display", * label = @Translation("Unbound Display"), * module = "layout", - * controller_class = "Drupal\Core\Config\Entity\ConfigStorageController", + * controller_class = "Drupal\layout\Config\UnboundDisplayStorageController", * config_prefix = "display.unbound", * entity_keys = { * "id" = "id", @@ -40,6 +40,7 @@ class UnboundDisplay extends DisplayBase implements UnboundDisplayInterface { * @throws \Exception */ public function generateDisplay(LayoutInterface $layout, $id, $entity_type = 'display') { + // @todo might be better to decouple this from the UnboundDisplay class $values = array( 'layout' => $layout->getPluginId(), 'blockInfo' => $this->mapBlocksToLayout($layout), diff --git a/core/profiles/standard/standard.install b/core/profiles/standard/standard.install index 85c818c..de24c4a 100644 --- a/core/profiles/standard/standard.install +++ b/core/profiles/standard/standard.install @@ -21,6 +21,8 @@ function standard_install() { // Set front page to "node". config('system.site')->set('page.front', 'node')->save(); + // Set default layout to Bartik's frontend layout. + config('system.site')->set('default_layout', 'bartik__frontend'); // Insert default pre-defined node types into the database. For a complete // list of available node type attributes, refer to the node type API diff --git a/core/themes/bartik/layouts/static/frontend/frontend.html.twig b/core/themes/bartik/layouts/static/frontend/frontend.html.twig new file mode 100644 index 0000000..8640fe7 --- /dev/null +++ b/core/themes/bartik/layouts/static/frontend/frontend.html.twig @@ -0,0 +1,187 @@ +{# +/** + * @file + * Bartik's theme implementation to display a single Drupal page. + * + * The doctype, html, head, and body tags are not in this template. Instead + * they can be found in the html.tpl.php template normally located in the + * core/modules/system directory. + * + * Available variables: + * + * General utility variables: + * - $base_path: The base URL path of the Drupal installation. At the very + * least, this will always default to /. + * - $directory: The directory the template is located in, e.g. modules/system + * or themes/bartik. + * - $is_front: TRUE if the current page is the front page. + * - $logged_in: TRUE if the user is registered and signed in. + * - $is_admin: TRUE if the user has permission to access administration pages. + * + * Site identity: + * - $front_page: The URL of the front page. Use this instead of $base_path, + * when linking to the front page. This includes the language domain or + * prefix. + * - $logo: The path to the logo image, as defined in theme configuration. + * - $site_name: The name of the site, empty when display has been disabled + * in theme settings. + * - $site_slogan: The slogan of the site, empty when display has been disabled + * in theme settings. + * - $hide_site_name: TRUE if the site name has been toggled off on the theme + * settings page. If hidden, the "element-invisible" class is added to make + * the site name visually hidden, but still accessible. + * - $hide_site_slogan: TRUE if the site slogan has been toggled off on the + * theme settings page. If hidden, the "element-invisible" class is added to + * make the site slogan visually hidden, but still accessible. + * + * Navigation: + * - $main_menu (array): An array containing the Main menu links for the + * site, if they have been configured. + * - $secondary_menu (array): An array containing the Secondary menu links for + * the site, if they have been configured. + * - $breadcrumb: The breadcrumb trail for the current page. + * + * Page content (in order of occurrence in the default page.tpl.php): + * - $title_prefix (array): An array containing additional output populated by + * modules, intended to be displayed in front of the main title tag that + * appears in the template. + * - $title: The page title, for use in the actual HTML content. + * - $title_suffix (array): An array containing additional output populated by + * modules, intended to be displayed after the main title tag that appears in + * the template. + * - $messages: HTML for status and error messages. Should be displayed + * prominently. + * - $tabs (array): Tabs linking to any sub-pages beneath the current page + * (e.g., the view and edit tabs when displaying a node). + * - $action_links (array): Actions local to the page, such as 'Add menu' on + * the menu administration interface. + * - $feed_icons: A string of all feed icons for the current page. + * - $node: The node entity, if there is an automatically-loaded node + * associated with the page, and the node ID is the second argument + * in the page's path (e.g. node/12345 and node/12345/revisions, but not + * comment/reply/12345). + * + * Regions: + * - $page['header']: Items for the header region. + * - $page['featured']: Items for the featured region. + * - $page['highlighted']: Items for the highlighted content region. + * - $page['help']: Dynamic help text, mostly for admin pages. + * - $page['content']: The main content of the current page. + * - $page['sidebar_first']: Items for the first sidebar. + * - $page['sidebar_second']: Items for the second sidebar. + * - $page['triptych_first']: Items for the first triptych. + * - $page['triptych_middle']: Items for the middle triptych. + * - $page['triptych_last']: Items for the last triptych. + * - $page['footer_firstcolumn']: Items for the first footer column. + * - $page['footer_secondcolumn']: Items for the second footer column. + * - $page['footer_thirdcolumn']: Items for the third footer column. + * - $page['footer_fourthcolumn']: Items for the fourth footer column. + * - $page['footer']: Items for the footer region. + * + * @see template_preprocess() + * @see template_preprocess_page() + * @see template_process() + * @see bartik_process_page() + * @see html.tpl.php + * + * @ingroup themeable + */ +#} +