diff --git a/sites/all/modules/figli/edlp_ajax/src/Controller/EdlpAjaxController.php b/sites/all/modules/figli/edlp_ajax/src/Controller/EdlpAjaxController.php index 3e8520d8b..4df89bec1 100644 --- a/sites/all/modules/figli/edlp_ajax/src/Controller/EdlpAjaxController.php +++ b/sites/all/modules/figli/edlp_ajax/src/Controller/EdlpAjaxController.php @@ -53,12 +53,23 @@ class EdlpAjaxController extends ControllerBase { $renderable = $this->toRenderable(); $rendered = render($renderable); + switch($this->entity_type){ + case 'node': + $bundle = $this->entity->getType(); + break; + case 'taxonomy_term': + $bundle = $this->entity->bundle(); + break; + default: + $bundle = NULL; + } + $response = new JsonResponse(); $response->setData([ 'test' => 'hello edlp ajax', 'id' => $this->id, 'view_mode' => $this->viewmode, - 'bundle' => $this->entity->getType(), + 'bundle' => $bundle, 'entity_type' => $this->entity_type, 'rendered'=> $rendered, ]); diff --git a/sites/all/modules/figli/edlp_corpus/blockentrees.inc b/sites/all/modules/figli/edlp_corpus/blockentrees.inc index 414a7ef3f..f7f3da570 100644 --- a/sites/all/modules/figli/edlp_corpus/blockentrees.inc +++ b/sites/all/modules/figli/edlp_corpus/blockentrees.inc @@ -15,28 +15,14 @@ function template_preprocess_blockentrees(&$vars){ $term_link = $entree['term_link']->toRenderable(); $term_link['#prefix'] = ''; $term_link['#suffix'] = ""; - $term_link["#attributes"] = array( - "class" => array('term-'.$tid, 'term-link'), - "tid" => $tid - ); $index_link = $entree['index_link']->toRenderable(); $index_link['#prefix'] = ''; $index_link['#suffix'] = ""; - $index_link['#attributes'] = array( - 'class' => array('index-link'), - "tid" => $tid - ); - $notice_link = $entree['notice_link']->toRenderable(); $notice_link['#prefix'] = ''; $notice_link['#suffix'] = ""; - $notice_link['#attributes'] = array( - 'class' => array('notice-link'), - "tid" => $tid - ); - $entree = array( '#wrapper_attributes' => array( diff --git a/sites/all/modules/figli/edlp_corpus/edlp_corpus.module b/sites/all/modules/figli/edlp_corpus/edlp_corpus.module index 3287836c6..745bb07ff 100644 --- a/sites/all/modules/figli/edlp_corpus/edlp_corpus.module +++ b/sites/all/modules/figli/edlp_corpus/edlp_corpus.module @@ -26,6 +26,65 @@ function edlp_corpus_theme($existing, $type, $theme, $path) { } +/** +* hook_entity_extra_field_info() +* +*/ +function edlp_corpus_entity_extra_field_info(){ + $extra = []; + $extra['taxonomy_term']['entrees']['display']['index'] = [ + 'label' => t('Index'), + 'description' => 'Display index of all documents tagued with the term', + 'weight' => 99, + 'visible' => FALSE, + ]; + return $extra; +} + + +/** + * Implements hook_ENTITY_TYPE_view(). + * @see https://www.amazeelabs.com/en/render-menu-tree-custom-code-drupal-8 + */ +function edlp_corpus_taxonomy_term_view(array &$build, \Drupal\Core\Entity\EntityInterface $entity, \Drupal\Core\Entity\Display\EntityViewDisplayInterface $display, $view_mode) { + $index_display_settings = $display->getComponent('index'); + if (!empty($index_display_settings)) { + // dpm($entity); + // dpm($entity->id()); + $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node'); + + $query = \Drupal::entityQuery('node') + ->condition('status', 1) + ->condition('type', 'enregistrement') + ->condition('field_entrees', $entity->id()); + + $documents_nids = $query->execute(); + // dpm($documents_nids); + $documents = entity_load_multiple('node', $documents_nids); + + $documents_list = array ( + '#theme' => 'item_list', + '#items' => [], + ); + foreach($documents as $doc){ + $documents_list['#items'][] = $view_builder->view($doc, 'index'); + } + + + // And the last step is to actually build the tree. + $build['index'] = array( + '#type'=>"container", + '#attributes'=>array( + 'class'=>'index' + ), + 'documents'=> $documents_list + ); + + + + } +} + /** * Implements hook_page_attachments(). * @param array $attachments diff --git a/sites/all/modules/figli/edlp_corpus/src/Plugin/Block/BlockEntrees.php b/sites/all/modules/figli/edlp_corpus/src/Plugin/Block/BlockEntrees.php index 44e16d0d4..5dc3209ca 100644 --- a/sites/all/modules/figli/edlp_corpus/src/Plugin/Block/BlockEntrees.php +++ b/sites/all/modules/figli/edlp_corpus/src/Plugin/Block/BlockEntrees.php @@ -38,14 +38,40 @@ class BlockEntrees extends BlockBase { 'tid'=>$tid ); - $term_url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]); - $entree['term_link'] = Link::fromTextAndUrl($name, $term_url); + // term name + $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]); + $url->setOptions(array( + 'attributes' => array( + 'class' => ['term-'.$tid, 'term-link'], + 'tid'=>$tid, + 'data-drupal-link-system-path' => $url->getInternalPath() + ) + )); + $entree['term_link'] = Link::fromTextAndUrl($name, $url); - $index_url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]); - $entree['index_link'] = Link::fromTextAndUrl('index', $index_url); + // index link + $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]); + $url->setOptions(array( + 'attributes' => array( + 'class' => ['index-link', 'ajax-link'], + 'viewmode'=>'index', + 'tid'=>$tid, + 'data-drupal-link-system-path' => $url->getInternalPath() + ) + )); + $entree['index_link'] = Link::fromTextAndUrl('index', $url); - $notice_url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term' => $tid]); - $entree['notice_link'] = Link::fromTextAndUrl('notice', $notice_url); + // notice-link + $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]); + $url->setOptions(array( + 'attributes' => array( + 'class' => ['notice-link', 'ajax-link'], + 'viewmode'=>'notice', + 'tid'=>$tid, + 'data-drupal-link-system-path' => $url->getInternalPath() + ) + )); + $entree['notice_link'] = Link::fromTextAndUrl('notice', $url); $entree['description'] = $term->get('description')->value; diff --git a/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js b/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js index a6321d0bd..3727e436e 100644 --- a/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js +++ b/sites/all/themes/custom/edlptheme/assets/dist/scripts/main.min.js @@ -235,13 +235,22 @@ edlp_vars = { // TODO: implement history.js function initAjaxLinks(){ console.log('initAjaxLinks'); - $('a', '#block-mainnavigation, #block-footer.menu--footer, #block-productions, article.node h2.node-title, .productions-subtree, .productions-parent').addClass('ajax-link'); + + $('a', '#block-mainnavigation') + .add('a', '#block-footer.menu--footer') + .add('a', '#block-productions') + .add('a', 'article.node:not(.node--type-enregistrement) h2.node-title') + .add('a', '.productions-subtree') + .add('a', '.productions-parent') + // .add('a.index-link, a.notice-link', '#block-edlpentreesblock') + .addClass('ajax-link'); + _$ajaxLinks = $('.ajax-link:not(.ajax-enabled)') .each(function(i,e){ var $this = $(this); // avoid already ajaxified links - // if($this.is('.ajax-enable')) return; + if($this.is('.ajax-enable')) return; if($this.attr('data-drupal-link-system-path')){ $this.on('click', onClickAjaxLink).addClass('ajax-enable'); } @@ -261,10 +270,19 @@ edlp_vars = { backToFrontPage(); return false; } - m = ajax_path.match(/^\/?(node\/\d+)$/g); - if(m){ - // convert node link to edlp_ajax_node module links - ajax_path = 'edlp/ajax/json/'+m[0]; + + // convert node link to edlp_ajax_node module links + var node_match = ajax_path.match(/^\/?(node\/\d+)$/g); + var term_match = ajax_path.match(/^\/?(taxonomy\/term\/\d+)$/g); + if(node_match){ + ajax_path = 'edlp/ajax/json/'+node_match[0]; + // check for viewmode attribute + if($link.attr('viewmode')){ + ajax_path += '/'+$link.attr('viewmode'); + } + }else if(term_match){ + ajax_path = 'edlp/ajax/json/'+term_match[0]; + ajax_path = ajax_path.replace(/taxonomy\/term/, 'taxonomy_term'); // check for viewmode attribute if($link.attr('viewmode')){ ajax_path += '/'+$link.attr('viewmode'); @@ -310,7 +328,7 @@ edlp_vars = { 'view-mode-'+data.view_mode ]; _$body.removeClass().addClass(body_classes.join(' ')); - + // id node add a generic path-node class to body m = sys_path.match(/^\/?(node\/\d+)$/g); if(m) diff --git a/sites/all/themes/custom/edlptheme/assets/scripts/main.js b/sites/all/themes/custom/edlptheme/assets/scripts/main.js index 8d3ec5262..67dc0cd1d 100644 --- a/sites/all/themes/custom/edlptheme/assets/scripts/main.js +++ b/sites/all/themes/custom/edlptheme/assets/scripts/main.js @@ -212,13 +212,22 @@ // TODO: implement history.js function initAjaxLinks(){ console.log('initAjaxLinks'); - $('a', '#block-mainnavigation, #block-footer.menu--footer, #block-productions, article.node h2.node-title, .productions-subtree, .productions-parent').addClass('ajax-link'); + + $('a', '#block-mainnavigation') + .add('a', '#block-footer.menu--footer') + .add('a', '#block-productions') + .add('a', 'article.node:not(.node--type-enregistrement) h2.node-title') + .add('a', '.productions-subtree') + .add('a', '.productions-parent') + // .add('a.index-link, a.notice-link', '#block-edlpentreesblock') + .addClass('ajax-link'); + _$ajaxLinks = $('.ajax-link:not(.ajax-enabled)') .each(function(i,e){ var $this = $(this); // avoid already ajaxified links - // if($this.is('.ajax-enable')) return; + if($this.is('.ajax-enable')) return; if($this.attr('data-drupal-link-system-path')){ $this.on('click', onClickAjaxLink).addClass('ajax-enable'); } @@ -238,10 +247,19 @@ backToFrontPage(); return false; } - m = ajax_path.match(/^\/?(node\/\d+)$/g); - if(m){ - // convert node link to edlp_ajax_node module links - ajax_path = 'edlp/ajax/json/'+m[0]; + + // convert node link to edlp_ajax_node module links + var node_match = ajax_path.match(/^\/?(node\/\d+)$/g); + var term_match = ajax_path.match(/^\/?(taxonomy\/term\/\d+)$/g); + if(node_match){ + ajax_path = 'edlp/ajax/json/'+node_match[0]; + // check for viewmode attribute + if($link.attr('viewmode')){ + ajax_path += '/'+$link.attr('viewmode'); + } + }else if(term_match){ + ajax_path = 'edlp/ajax/json/'+term_match[0]; + ajax_path = ajax_path.replace(/taxonomy\/term/, 'taxonomy_term'); // check for viewmode attribute if($link.attr('viewmode')){ ajax_path += '/'+$link.attr('viewmode'); @@ -287,7 +305,7 @@ 'view-mode-'+data.view_mode ]; _$body.removeClass().addClass(body_classes.join(' ')); - + // id node add a generic path-node class to body m = sys_path.match(/^\/?(node\/\d+)$/g); if(m) diff --git a/sites/all/themes/custom/edlptheme/edlptheme.theme b/sites/all/themes/custom/edlptheme/edlptheme.theme index 38897ef15..6b12a5f73 100644 --- a/sites/all/themes/custom/edlptheme/edlptheme.theme +++ b/sites/all/themes/custom/edlptheme/edlptheme.theme @@ -73,6 +73,18 @@ function edlptheme_preprocess_node__player_cartel(&$vars){ ) ) ); + // TODO: refacorize the link generator as following : + // $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]); + // $url->setOptions(array( + // 'attributes' => array( + // 'class' => ['index-link', 'ajax-link'], + // 'viewmode'=>'index', + // 'tid'=>$tid, + // 'data-drupal-link-system-path' => $url->getInternalPath() + // ) + // )); + // $entree['index_link'] = Link::fromTextAndUrl('index', $url); + // if article not empty $url = Url::fromRoute('entity.node.canonical', ['node'=>$vars['node']->id()], array( 'attributes' => array( diff --git a/sites/all/themes/custom/edlptheme/templates/content/edlp-ajax--taxonomy-term--index.html.twig b/sites/all/themes/custom/edlptheme/templates/content/edlp-ajax--taxonomy-term--index.html.twig new file mode 100644 index 000000000..c5a1f63a3 --- /dev/null +++ b/sites/all/themes/custom/edlptheme/templates/content/edlp-ajax--taxonomy-term--index.html.twig @@ -0,0 +1,7 @@ +