big refactoring of mobile version xhich has now a hamburger menu and a link to collection

This commit is contained in:
2018-11-21 12:51:24 +01:00
parent c92c348eee
commit e204a08202
18 changed files with 668 additions and 389 deletions
@@ -25,7 +25,8 @@ function edlp_home_theme($existing, $type, $theme, $path) {
'promoted_nodes' => array(),
'lastdocs_items' => NULL,
'agenda_items' => NULL,
'entrees_items' => NULL,
// 'entrees_items' => NULL,
'collection_link' => NULL,
),
),
);
@@ -21,3 +21,11 @@ edlp_home.home_mobile:
_title: 'Home'
requirements:
_permission: 'access content'
edlp_home.home_mobileajax:
path: '/home_m/ajax'
defaults:
_controller: '\Drupal\edlp_home\Controller\HomeController::home_mobilejson'
_title: 'Home'
requirements:
_permission: 'access content'
@@ -4,7 +4,7 @@ use Drupal\Core\Url;
function template_preprocess_edlp_home(&$vars){
$node_view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$term_view_builder = \Drupal::entityTypeManager()->getViewBuilder('taxonomy_term');
// $term_view_builder = \Drupal::entityTypeManager()->getViewBuilder('taxonomy_term');
// dpm($vars);
// render the promoted_nodes
@@ -34,21 +34,6 @@ function template_preprocess_edlp_home(&$vars){
}
}
// render the presentation column
// $vars["presentation"] = array(
// "#type"=>"container",
// "pres"=>$node_view_builder->view($vars["presentation_node"], 'default'),
// "link"=> array(
// '#title' => t('Visiter la collection sonore.'),
// '#type' => 'link',
// '#url' => Url::fromRoute('<front>', [], array(
// 'attributes' => array(
// 'class' => ['corpus-link', 'ajax-link']
// )
// ))
// )
// );
// render the last fil column
// $vars["last_fil"] = array(
// "#type" => "container",
@@ -81,21 +66,6 @@ function template_preprocess_edlp_home(&$vars){
// // )
// );
// render the last production column
// $vars["last_production"] = array(
// '#type' => 'container',
// 'prod' => $node_view_builder->view($vars['last_production_node'], 'teaser'),
// 'link'=> array(
// '#title' => t('Voir toutes les productions.'),
// '#type' => 'link',
// '#url' => Url::fromRoute('edlp_productions.productions', [], array(
// 'attributes' => array(
// 'class' => ['productions-link', 'ajax-link']
// )
// ))
// )
// );
// render the lasts documents of collection as list
if(isset($vars['lastdocs_items'])){
@@ -156,25 +126,24 @@ function template_preprocess_edlp_home(&$vars){
$vars['agenda'] = render($agenda);
}
if(isset($vars['entrees_items'])){
$entrees = array(
if(isset($vars['collection_link'])){
$collection = array(
'#type'=>"container",
// '#attributes' => array(
// 'id' => array('collection'),
// ),
'#prefix' => '<div id="collection"></div>',
'title'=>array(
'#markup'=>"<h3>".t("Collection")."</h3>",
),
'list'=> array(
'#theme' => 'item_list',
'#items' => [],
),
'#prefix'=> '<h3>',
'#title' => t("Collection"),
'#suffix' => '</h3>',
'#type' => 'link',
'#url' => $vars['collection_link']['url'],
'#options'=>array(
'attributes' => array(
'data-drupal-link-system-path' => $vars['collection_link']['internal_path'],
'class' => array('ajax-link'),
)
)
)
);
foreach($vars['entrees_items'] as $term){
$entrees['list']['#items'][] = $term_view_builder->view($term, 'home_mobile');
}
$vars['entrees'] = render($entrees);
$vars['collection'] = render($collection);
}
}
@@ -6,7 +6,13 @@ use Drupal\Core\Controller\ControllerBase;
use Drupal\Core\Datetime\DrupalDateTime;
use Drupal\taxonomy\Entity\Term;
use Drupal\workflow\Entity\WorkflowManager;
use Symfony\Component\HttpFoundation\JsonResponse;
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;
class HomeController extends ControllerBase {
@@ -99,16 +105,17 @@ class HomeController extends ControllerBase {
return $contents;
}
/**
* Display agenda as a page.
* Display home mobile as a page.
*
* @return renderable array
*/
public function home_mobile() {
public function toMobileHomeRenderable() {
// $view_builder = \Drupal::entityTypeManager()->getViewBuilder('node');
$contents = array("#theme"=>'edlp_home');
$renderable = array("#theme"=>'edlp_home');
// first get static pages
$query = \Drupal::entityQuery('node')
@@ -117,7 +124,7 @@ class HomeController extends ControllerBase {
->condition('type', 'static');
$promoted_nids = $query->execute();
$contents["#promoted_nodes"] = entity_load_multiple('node', $promoted_nids);
$renderable["#promoted_nodes"] = entity_load_multiple('node', $promoted_nids);
// then get production pages
$query = \Drupal::entityQuery('node')
@@ -126,7 +133,7 @@ class HomeController extends ControllerBase {
->condition('type', 'page');
$promoted_nids = $query->execute();
$contents["#promoted_nodes"] += entity_load_multiple('node', $promoted_nids);
$renderable["#promoted_nodes"] += entity_load_multiple('node', $promoted_nids);
// last fil
// $query = \Drupal::entityQuery('node')
@@ -136,8 +143,8 @@ class HomeController extends ControllerBase {
// ->range(0,1);
//
// $fil = $query->execute();
// $contents["#last_fil_node"] = entity_load('node', array_pop($fil));
// $contents["#last_fil_node"] = array('#markup'=>'En développement.');
// $renderable["#last_fil_node"] = entity_load('node', array_pop($fil));
// $renderable["#last_fil_node"] = array('#markup'=>'En développement.');
// agenda
$now = new DrupalDateTime('now');
@@ -151,100 +158,79 @@ class HomeController extends ControllerBase {
->sort('field_date');
$events = $query->execute();
$contents['#agenda_items'] = entity_load_multiple('node', $events);
$renderable['#agenda_items'] = entity_load_multiple('node', $events);
// entrées
$language = \Drupal::languageManager()->getCurrentLanguage()->getId();
// Collection
// TODO: get the link to mobile collection page
$collection_url = Url::fromRoute('edlp_corpus.collection');
$renderable['#collection_link'] = array(
'url' => $collection_url,
'internal_path' => $collection_url->getInternalPath(),
);
$query = \Drupal::entityQuery('taxonomy_term')
// ->sort('weight', 'DESC')
// ->sort('name', 'DESC')
->condition('vid', 'entrees');
$tids = $query->execute();
// $terms = entity_load_multiple('taxonomy_term', $tids);
// $terms = \Drupal::entityManager()->getStorage('taxonomy_term')->loadMultiple($terms);
$terms = Term::loadMultiple($tids);
$ordered_terms = [];
foreach ($terms as $term) {
// remove masqué
$sid = WorkflowManager::getCurrentStateId($term, 'field_workflow');
if($sid == 'generique_masque') continue;
// translate the term
$term = \Drupal::service('entity.repository')->getTranslationFromContext($term, $language);
$name = $term->getName();
$ordered_trans_terms[$name] = $term;
return $renderable;
}
public function home_mobile() {
return $this->toMobileHomeRenderable();
}
/**
* Get home mobile data as json through ajax.
*
* @return json
*/
// NOT NEEDED ANY MORE
public function home_mobilejson() {
$renderable = $this->toMobileHomeRenderable();
// $rendered = render($renderable);
// We can't render directly the entity as it throw an exception with cachable data
//http://blog.dcycle.com/blog/2018-01-24/caching-drupal-8-rest-resource/#the-dreaded-leaked-metadata-error
$rendered = \Drupal::service('renderer')->executeInRenderContext(new RenderContext(), function () use ($renderable) {
return render($renderable);
});
$data = [
'rendered'=> $rendered,
'title'=>'Home Mobile',
];
// translations links
// use Drupal\Core\Url;
// use Drupal\Core\Language\LanguageInterface;
$route_name = 'edlp_home.home_mobile';
$links = \Drupal::languageManager()->getLanguageSwitchLinks(LanguageInterface::TYPE_URL, Url::fromRoute($route_name));
if (isset($links->links)) {
$translations_build = [
'#theme' => 'links__language_block',
'#links' => $links->links,
'#attributes' => ['class' => ["language-switcher-{$links->method_id}",],],
'#set_active_class' => TRUE,
];
$translations_rendered = \Drupal::service('renderer')->executeInRenderContext(new RenderContext(), function () use ($translations_build) {return render($translations_build);});
$data['translations_links'] = $translations_rendered;
}
ksort($ordered_trans_terms);
$data['#cache'] = [
'max-age' => \Drupal\Core\Cache\Cache::PERMANENT,
'tags' => ['edlp-home-cache'],
'contexts' => [
'languages:language_content'
]
];
// $response = new JsonResponse();
// $response->setData($data);
$response = new CacheableJsonResponse($data);
$response->addCacheableDependency(CacheableMetadata::createFromRenderArray($data));
$response->addCacheableDependency(CacheableMetadata::createFromRenderArray($renderable));
// dsm($terms);
// foreach ($ordered_trans_terms as $name => $term) {
// $tid = $term->id();
//
// $entree = array(
// 'tid'=>$tid
// );
// term link
// $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]);
// $url->setOptions(array(
// 'attributes' => array(
// 'class' => ['term-'.$tid, 'term-link'],
// 'tid'=>$tid,
// 'selector' => 'entree-term-link-'.$tid,
// 'data-drupal-link-system-path' => $url->getInternalPath()
// )
// ));
// $entree['term_link'] = Link::fromTextAndUrl($name, $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,
// 'selector' => 'entree-index-link-'.$tid,
// 'data-drupal-link-system-path' => $url->getInternalPath()
// )
// ));
// $entree['index_link'] = Link::fromTextAndUrl('index', $url);
// notice-link
// $url = Url::fromRoute('entity.taxonomy_term.canonical', ['taxonomy_term'=>$tid]);
// $url->setOptions(array(
// 'attributes' => array(
// 'class' => ['notice-link'],
// 'viewmode'=>'notice',
// 'tid'=>$tid,
// 'selector' => 'entree-notice-link-'.$tid,
// 'data-drupal-link-system-path' => $url->getInternalPath()
// )
// ));
// $entree['notice_link'] = Link::fromTextAndUrl('notice', $url);
// $entree['description'] = $term->get('description')->value;
//
// $entrees[] = $entree;
// }
$contents['#entrees_items'] = $ordered_trans_terms;
// = array (
// '#theme' => 'blockentrees',
// '#entrees_items' => $entrees,
// '#attached'=>array(
// 'library' => array('edlp_corpus/corpus'),
// 'drupalSettings' => array(
// 'basepath' => base_path()
// )
// )
// );
return $contents;
return $response;
}
}
@@ -16,6 +16,6 @@
{{ agenda }}
{% endif %}
{% if entrees %}
{{ entrees }}
{% if collection %}
{{ collection }}
{% endif %}