#1107: first light_home then async load full home, do not aggregate nor preprocess theme js libraries
This commit is contained in:
		@@ -1,13 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
use Drupal\Core\Url;
 | 
			
		||||
 | 
			
		||||
function template_preprocess_materio_home(&$vars){
 | 
			
		||||
  $node_view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
 | 
			
		||||
 | 
			
		||||
  $vm = "default";
 | 
			
		||||
  $fpnode = $vars['frontpage_node'];
 | 
			
		||||
  $nvb_fpnode = $node_view_builder->view($fpnode, $vm);
 | 
			
		||||
  $vars['frontpage_node'] = $nvb_fpnode;
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -24,6 +24,9 @@ use Drupal\mymodule\Plugin\Field\FieldType\MyFieldComputed;
 | 
			
		||||
 | 
			
		||||
// $field_map_kv_store->set('node', $node_map);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implement hook_entity_bundle_field_info().
 | 
			
		||||
 *
 | 
			
		||||
@@ -136,6 +139,48 @@ function materio_home_entity_base_field_info_alter(&$fields, EntityTypeInterface
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_theme().
 | 
			
		||||
 *
 | 
			
		||||
 * Register a module or theme's theme implementations.
 | 
			
		||||
 * The implementations declared by this hook specify how a particular render array is to be rendered as HTML.
 | 
			
		||||
 *
 | 
			
		||||
 * See: https://api.drupal.org/api/drupal/core%21lib%21Drupal%21Core%21Render%21theme.api.php/function/hook_theme/8.2.x
 | 
			
		||||
 *
 | 
			
		||||
 * If you change this method, clear theme registry and routing table 'drush cc theme-registry' and 'drush cc router'.
 | 
			
		||||
 */
 | 
			
		||||
function materio_home_theme($existing, $type, $theme, $path) {
 | 
			
		||||
 | 
			
		||||
  return [
 | 
			
		||||
    // Name of the theme hook. This is used in the controller to trigger the hook.
 | 
			
		||||
    'materio_home' => [
 | 
			
		||||
      'render element' => 'element',
 | 
			
		||||
      // If no template name is defined here, it defaults to the name of the theme hook, ie. module-name-theme-hook.html.twig
 | 
			
		||||
      'template' => 'materio-home',
 | 
			
		||||
      // Optionally define path to Twig template files. Defaults to the module's ./templates/ directory.
 | 
			
		||||
      // 'path' => $path . '/templates',
 | 
			
		||||
      // Optionally define variables that will be passed to the Twig template and set default values for them.
 | 
			
		||||
      // 'variables' => [
 | 
			
		||||
      //   'variable1' => 'Yet another default text.',
 | 
			
		||||
      //   'variable2' => 0,
 | 
			
		||||
      //   'variable3' => [0, 0, 0],
 | 
			
		||||
      // ],
 | 
			
		||||
    ],
 | 
			
		||||
  ];
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
function template_preprocess_materio_home(&$vars){
 | 
			
		||||
  $node_view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
 | 
			
		||||
  $element = $vars['element'];
 | 
			
		||||
  $vm = $element['#view_mode'];
 | 
			
		||||
  $fpnode = $element['#frontpage_node'];
 | 
			
		||||
  $nvb_fpnode = $node_view_builder->view($fpnode, $vm);
 | 
			
		||||
  $vars['frontpage_node'] = $nvb_fpnode;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implement hook_cron().
 | 
			
		||||
 *
 | 
			
		||||
 
 | 
			
		||||
@@ -1,3 +1,11 @@
 | 
			
		||||
materio_home.home:
 | 
			
		||||
  path: 'home'
 | 
			
		||||
  defaults:
 | 
			
		||||
    _controller: '\Drupal\materio_home\Controller\HomeController::home'
 | 
			
		||||
    _title: 'Home'
 | 
			
		||||
  requirements:
 | 
			
		||||
    _permission: 'access content'
 | 
			
		||||
 | 
			
		||||
materio_home.ajax_home:
 | 
			
		||||
  path: 'materio_home/ajax/gethome'
 | 
			
		||||
  defaults:
 | 
			
		||||
 
 | 
			
		||||
@@ -74,14 +74,18 @@ class AjaxHomeController extends ControllerBase {
 | 
			
		||||
   */
 | 
			
		||||
  public function getHome() {
 | 
			
		||||
 | 
			
		||||
    $path = \Drupal::config('system.site')->get('page.front');
 | 
			
		||||
    // $path = \Drupal::config('system.site')->get('page.front');
 | 
			
		||||
    // $params = Url::fromUri("internal:" . $path)->getRouteParameters();
 | 
			
		||||
    // $entity_type = key($params);
 | 
			
		||||
    // $entity = $this->entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
 | 
			
		||||
 | 
			
		||||
    $params = Url::fromUri("internal:" . $path)->getRouteParameters();
 | 
			
		||||
    $entity_type = key($params);
 | 
			
		||||
    $entity = $this->entityTypeManager()->getStorage($entity_type)->load($params[$entity_type]);
 | 
			
		||||
    $nid = 1;
 | 
			
		||||
    // TODO: home nid should be a setting
 | 
			
		||||
    $node_storage = \Drupal::entityTypeManager()->getStorage('node');
 | 
			
		||||
    $node = $node_storage->load($nid);
 | 
			
		||||
 | 
			
		||||
    $view_builder = $this->entityTypeManager()->getViewBuilder('node');
 | 
			
		||||
    $renderable = $view_builder->view($entity, 'default');
 | 
			
		||||
    $renderable = $view_builder->view($node, 'home_full');
 | 
			
		||||
    $rendered = $this->renderer->executeInRenderContext(new RenderContext(), function () use ($renderable) {
 | 
			
		||||
      return render($renderable);
 | 
			
		||||
    });
 | 
			
		||||
 
 | 
			
		||||
@@ -3,15 +3,15 @@
 | 
			
		||||
namespace Drupal\materio_home\Controller;
 | 
			
		||||
 | 
			
		||||
use Drupal\Core\Controller\ControllerBase;
 | 
			
		||||
use Drupal\Core\Datetime\DrupalDateTime;
 | 
			
		||||
use Drupal\taxonomy\Entity\Term;
 | 
			
		||||
use Drupal\workflow\Entity\WorkflowManager;
 | 
			
		||||
use Drupal\Core\Url;
 | 
			
		||||
use Drupal\Core\Language\LanguageInterface;
 | 
			
		||||
// use Drupal\Core\Datetime\DrupalDateTime;
 | 
			
		||||
// use Drupal\taxonomy\Entity\Term;
 | 
			
		||||
// use Drupal\workflow\Entity\WorkflowManager;
 | 
			
		||||
// use Drupal\Core\Url;
 | 
			
		||||
// use Drupal\Core\Language\LanguageInterface;
 | 
			
		||||
// use Symfony\Component\HttpFoundation\JsonResponse;
 | 
			
		||||
use Drupal\Core\Cache\CacheableJsonResponse;
 | 
			
		||||
use Drupal\Core\Cache\CacheableMetadata;
 | 
			
		||||
use Drupal\core\render\RenderContext;
 | 
			
		||||
// use Drupal\Core\Cache\CacheableJsonResponse;
 | 
			
		||||
// use Drupal\Core\Cache\CacheableMetadata;
 | 
			
		||||
// use Drupal\core\render\RenderContext;
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
@@ -23,20 +23,24 @@ class HomeController extends ControllerBase {
 | 
			
		||||
   * @return renderable array
 | 
			
		||||
   */
 | 
			
		||||
  public function home() {
 | 
			
		||||
 | 
			
		||||
    // return "Hello";
 | 
			
		||||
    // $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
 | 
			
		||||
 | 
			
		||||
    $contents = array("#theme"=>'materio_home');
 | 
			
		||||
 | 
			
		||||
    // presentation
 | 
			
		||||
    $query = \Drupal::entityQuery('node')
 | 
			
		||||
      ->condition('status', 1)
 | 
			
		||||
      ->condition('nid', 19990);
 | 
			
		||||
    // TODO: présentation nid should be a setting
 | 
			
		||||
    // // presentation
 | 
			
		||||
    // $query = \Drupal::entityQuery('node')
 | 
			
		||||
    //   // ->condition('status', 1)
 | 
			
		||||
    //   ->condition('nid', 1);
 | 
			
		||||
    // $nids = $query->execute();
 | 
			
		||||
 | 
			
		||||
    $pres_nid = $query->execute();
 | 
			
		||||
    $contents["#frontpage_node"] = entity_load('node', array_pop($pres_nid));
 | 
			
		||||
    $nid = 1;
 | 
			
		||||
    // TODO: home nid should be a setting
 | 
			
		||||
    $node_storage = \Drupal::entityTypeManager()->getStorage('node');
 | 
			
		||||
    $node = $node_storage->load($nid);
 | 
			
		||||
 | 
			
		||||
    $contents["#frontpage_node"] = $node;
 | 
			
		||||
    $contents["#view_mode"] = "home_light";
 | 
			
		||||
    return $contents;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
 
 | 
			
		||||
							
								
								
									
										59
									
								
								web/sites/default/development.services.yml
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								web/sites/default/development.services.yml
									
									
									
									
									
										Normal file
									
								
							@@ -0,0 +1,59 @@
 | 
			
		||||
# Local development services.
 | 
			
		||||
#
 | 
			
		||||
# To activate this feature, follow the instructions at the top of the
 | 
			
		||||
# 'example.settings.local.php' file, which sits next to this file.
 | 
			
		||||
parameters:
 | 
			
		||||
  twig.config:
 | 
			
		||||
    # Twig debugging:
 | 
			
		||||
    #
 | 
			
		||||
    # When debugging is enabled:
 | 
			
		||||
    # - The markup of each Twig template is surrounded by HTML comments that
 | 
			
		||||
    #   contain theming information, such as template file name suggestions.
 | 
			
		||||
    # - Note that this debugging markup will cause automated tests that directly
 | 
			
		||||
    #   check rendered HTML to fail. When running automated tests, 'debug'
 | 
			
		||||
    #   should be set to FALSE.
 | 
			
		||||
    # - The dump() function can be used in Twig templates to output information
 | 
			
		||||
    #   about template variables.
 | 
			
		||||
    # - Twig templates are automatically recompiled whenever the source code
 | 
			
		||||
    #   changes (see auto_reload below).
 | 
			
		||||
    #
 | 
			
		||||
    # For more information about debugging Twig templates, see
 | 
			
		||||
    # https://www.drupal.org/node/1906392.
 | 
			
		||||
    #
 | 
			
		||||
    # Not recommended in production environments
 | 
			
		||||
    # @default false
 | 
			
		||||
    debug: true
 | 
			
		||||
    # Twig auto-reload:
 | 
			
		||||
    #
 | 
			
		||||
    # Automatically recompile Twig templates whenever the source code changes.
 | 
			
		||||
    # If you don't provide a value for auto_reload, it will be determined
 | 
			
		||||
    # based on the value of debug.
 | 
			
		||||
    #
 | 
			
		||||
    # Not recommended in production environments
 | 
			
		||||
    # @default null
 | 
			
		||||
    auto_reload: null
 | 
			
		||||
    # Twig cache:
 | 
			
		||||
    #
 | 
			
		||||
    # By default, Twig templates will be compiled and stored in the filesystem
 | 
			
		||||
    # to increase performance. Disabling the Twig cache will recompile the
 | 
			
		||||
    # templates from source each time they are used. In most cases the
 | 
			
		||||
    # auto_reload setting above should be enabled rather than disabling the
 | 
			
		||||
    # Twig cache.
 | 
			
		||||
    #
 | 
			
		||||
    # Not recommended in production environments
 | 
			
		||||
    # @default true
 | 
			
		||||
    cache: false
 | 
			
		||||
  # Cacheability debugging:
 | 
			
		||||
  #
 | 
			
		||||
  # Responses with cacheability metadata (CacheableResponseInterface instances)
 | 
			
		||||
  # get X-Drupal-Cache-Tags and X-Drupal-Cache-Contexts headers.
 | 
			
		||||
  #
 | 
			
		||||
  # For more information about debugging cacheable responses, see
 | 
			
		||||
  # https://www.drupal.org/developing/api/8/response/cacheable-response-interface
 | 
			
		||||
  #
 | 
			
		||||
  # Not recommended in production environments
 | 
			
		||||
  # @default false
 | 
			
		||||
  http.response.debug_cacheability_headers: true
 | 
			
		||||
services:
 | 
			
		||||
  cache.backend.null:
 | 
			
		||||
    class: Drupal\Core\Cache\NullBackendFactory
 | 
			
		||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							@@ -103,15 +103,15 @@ export let _v_sitebranding_block, _v_user_block, _v_header_menu,
 | 
			
		||||
    function initVues () {
 | 
			
		||||
      // only launch views if we are not in commerce pages
 | 
			
		||||
      if (!checkNoVuePages()) {
 | 
			
		||||
        initVi18n()
 | 
			
		||||
        initVStore()
 | 
			
		||||
        initVRouter()
 | 
			
		||||
        initVSiteBrandingBlock()
 | 
			
		||||
        initVPagetitleBlock()
 | 
			
		||||
        initVHeaderMenu()
 | 
			
		||||
        initHamburgerMenu()
 | 
			
		||||
        initVMainContent()
 | 
			
		||||
        initVSearchBlock()
 | 
			
		||||
        initVMainContent()
 | 
			
		||||
        initVStore()
 | 
			
		||||
        initVi18n()
 | 
			
		||||
        initVLeftContent()
 | 
			
		||||
      }
 | 
			
		||||
      initVUserBlock()
 | 
			
		||||
 
 | 
			
		||||
@@ -9,9 +9,15 @@ global-css:
 | 
			
		||||
global-js:
 | 
			
		||||
  version: VERSION
 | 
			
		||||
  js:
 | 
			
		||||
    assets/dist/main.js: { }
 | 
			
		||||
    assets/dist/main.js:
 | 
			
		||||
      type: file
 | 
			
		||||
      minified: true
 | 
			
		||||
      preprocess: false
 | 
			
		||||
    # assets/dist/vsa.js: { }
 | 
			
		||||
    assets/dist/vclb.js: { }
 | 
			
		||||
    assets/dist/vclb.js:
 | 
			
		||||
      type: file
 | 
			
		||||
      minified: true
 | 
			
		||||
      preprocess: false
 | 
			
		||||
  dependencies:
 | 
			
		||||
    - core/drupal
 | 
			
		||||
    # - core/drupal.ajax
 | 
			
		||||
 
 | 
			
		||||
@@ -69,8 +69,9 @@
 | 
			
		||||
  <div{{ attributes.addClass(classes) }}>
 | 
			
		||||
    <div{{ title_attributes.addClass(title_classes) }}>
 | 
			
		||||
      <a href="/blabla" @click.prevent="onClickLink">
 | 
			
		||||
        {{ label }}</div>
 | 
			
		||||
        {{ label }}
 | 
			
		||||
      </a>
 | 
			
		||||
    </div>
 | 
			
		||||
    {% if multiple %}
 | 
			
		||||
      <div class="field__items">
 | 
			
		||||
    {% endif %}
 | 
			
		||||
 
 | 
			
		||||
@@ -69,8 +69,9 @@
 | 
			
		||||
  <div{{ attributes.addClass(classes) }}>
 | 
			
		||||
    <div{{ title_attributes.addClass(title_classes) }}>
 | 
			
		||||
      <a href="/showrooms" @click.prevent="onClickLink">
 | 
			
		||||
        {{ label }}</div>
 | 
			
		||||
        {{ label }}
 | 
			
		||||
      </a>
 | 
			
		||||
    </div>
 | 
			
		||||
    {% if multiple %}
 | 
			
		||||
      <div class="field__items">
 | 
			
		||||
    {% endif %}
 | 
			
		||||
 
 | 
			
		||||
@@ -2,7 +2,7 @@
 | 
			
		||||
  <div :id="id">
 | 
			
		||||
    <!-- <router-view name="home" :html="home_template_src"></router-view> -->
 | 
			
		||||
    <!-- <router-view name="base"></router-view> -->
 | 
			
		||||
    <router-view :html="home_template_src"/>
 | 
			
		||||
    <router-view :html="home_template_src" :full="full_home_template_loaded"/>
 | 
			
		||||
  </div>
 | 
			
		||||
</template>
 | 
			
		||||
 | 
			
		||||
@@ -17,25 +17,38 @@ export default {
 | 
			
		||||
  props:['id','html', 'isfront'],
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      home_template_src: null
 | 
			
		||||
      home_template_src: null,
 | 
			
		||||
      full_home_template_loaded: false
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  beforeMount() {
 | 
			
		||||
    // console.log('MainContent beforeMount this.html', this.html)
 | 
			
		||||
    if (!this.home_template_src) {
 | 
			
		||||
      // // console.log('no home_template_src')
 | 
			
		||||
      // if (this.html && this.isfront) { // if html prop is available and we are landing on home then record it has data
 | 
			
		||||
      //   this.home_template_src = this.html
 | 
			
		||||
      // } else { // else get it from ajax (e.g. if we didn't load the page from home)
 | 
			
		||||
      //   this.getHomeHtml()
 | 
			
		||||
      // }
 | 
			
		||||
 | 
			
		||||
      // console.log('no home_template_src')
 | 
			
		||||
      if (this.html && this.isfront) { // if html prop is available and we are landing on home then record it has data
 | 
			
		||||
      if (this.isfront) {
 | 
			
		||||
        // if html prop is available and we are landing on home then record it has data
 | 
			
		||||
        this.home_template_src = this.html
 | 
			
		||||
      } else { // else get it from ajax (e.g. if we didn't load the page from home)
 | 
			
		||||
      }
 | 
			
		||||
      // in any case load the full home template if not already loaded
 | 
			
		||||
      if (!this.full_home_template_loaded) {
 | 
			
		||||
        this.getHomeHtml()
 | 
			
		||||
      }
 | 
			
		||||
    }
 | 
			
		||||
  },
 | 
			
		||||
  methods: {
 | 
			
		||||
    getHomeHtml(){
 | 
			
		||||
      console.log('MainContent getHomeHtml');
 | 
			
		||||
      MA.get('materio_home/ajax/gethome')
 | 
			
		||||
        .then(({data}) => {
 | 
			
		||||
          // console.log('Home getHomeHtml data', data)
 | 
			
		||||
          console.log('MainContent getHomeHtml data', data)
 | 
			
		||||
          this.full_home_template_loaded = true
 | 
			
		||||
          this.home_template_src = data.rendered // record the html src into data
 | 
			
		||||
        })
 | 
			
		||||
        .catch((error) => {
 | 
			
		||||
 
 | 
			
		||||
@@ -3,7 +3,7 @@
 | 
			
		||||
import Vue from 'vue'
 | 
			
		||||
 | 
			
		||||
export default {
 | 
			
		||||
  props: ['html'], // get the html from parent with props
 | 
			
		||||
  props: ['html', 'full'], // get the html from parent with props
 | 
			
		||||
  data() {
 | 
			
		||||
    return {
 | 
			
		||||
      template: null, // compiled template from html used in render
 | 
			
		||||
@@ -40,7 +40,10 @@ export default {
 | 
			
		||||
      this.$options.staticRenderFns = []
 | 
			
		||||
      this._staticTrees = []
 | 
			
		||||
      this.template.staticRenderFns.map(fn => (this.$options.staticRenderFns.push(fn)))
 | 
			
		||||
      setTimeout(this.initShowroomCarroussel.bind(this), 250)
 | 
			
		||||
      console.log('compileTemplate, full', this.full)
 | 
			
		||||
      if (this.full) {
 | 
			
		||||
        setTimeout(this.initShowroomCarroussel.bind(this), 250)
 | 
			
		||||
      }
 | 
			
		||||
    },
 | 
			
		||||
    initShowroomCarroussel(){
 | 
			
		||||
      console.log('startShowroomCarroussel')
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user