View 3.8 - node selon profondeur du livre (depth), ex de filtre exposé

Avec Ex Views 7.x-3.8, Book (du core).

But: créer une page qui permet de choisir des contenus selon la profondeur dans un livre (type de contenu book).
On souhaite aussi trouver les contenus "orphelins" (ie contenu non intégré dans un livre).

Comme il y beaucoup de contenu, on va donner la possibilité de filtrer à l'utilisation (exposer dans le vocabulaire drupal, dans la partie filtre Filter criteria) sur le statut de la publication, la langue du contenu, et le type de contenu (page, article, book...).

Création vue de type node (artfrnobook)Ex Views 7.x-3.8 : Création d'une view node triés par titre, de type page

notes

  • chemin ne remplace pas les é par e (pas de translit pour views).
  • Les liens affichés (with links, without comments) affichent "Lire la suite", Ajouter un com, et le nb d'affichage. On va revenir au format Fields devil

Page réservée aux utilisateurs logués (et dans les bons groupes): Page settings/accès roles.
Définir le chemin (obligatoire pour une page- lors du dev, il est judicieux d'utiliser un nom proche de l'interne, ici "artfrnobook") et le menu "Entrée de menu normale" (et non son emplacement dans le menu broken heart).

Ajouter les champs

Fields Ajouter les champs, en cachant les champs qui serviront de filtre (par ex: Publié, Type, Langue...).

Astuce pour trouver la profondeur ("depth of the book page, sachant que l'entrée d'un livre a une profondeur de 1") filtrer sur Livre, ou mieux, rechercher avec depth.

Sauver, l'url est admin/structure/views/view/artfrnobook

Filter criteria "expose this filter to visitors"Views 7.x-3.8 : modifier le filtre, pour l'exposer aux visiteurs

Choix de types de contenu: article, forum subject, book, cv... Souvent, pour travailler avec des termes de taxonomie, il faut ici restreindre à un (ou des types de) contenu, qui utilise un seul vocabulaire (voir image dans la note plus bas).

En passant on voit dans la liste les lignes suivantes:

  • Views 7.x-3.8 : ajout de filtre, partie "has taxonomy term"
    Si on prend "Contenu: Has taxonomy term" on a 2 choix: 1 seul voca et le choix "liste déroulante" / "termes séparés par des virgules".
  • Contenu: Published or admin Filters out unpublished content if the current user cannot view it... Qui cacherait les contenus non publiés si le visiteur n'a pas les droits de lecture?
  • Contenu: User posted or commented. Display nodes only if a user posted the node or commented on the node.

Avec cette vue, il semble impossible de trouver les orphelins, mais elle est très utile pour gérer le contenu.

A première vue, on pense que créer un filtre sur profondeur =0 (ou<=1 l'entrée de livre) mais cela ne fonctionne pas (ca  n'affiche rien) et génère le sql suivant:

SELECT node.title AS node_title, node.type AS node_type, book_menu_links.depth AS book_menu_links_depth, book_menu_links.weight AS book_menu_links_weight
FROM 
{node} node
LEFT JOIN {book} book ON node.nid = book.nid
LEFT JOIN {menu_links} book_menu_links ON book.mlid = book_menu_links.mlid
WHERE (( (book_menu_links.depth <= '1') ))
LIMIT 10 OFFSET 0

On ne peux pas choisir non plus null. Solution: ajouter un tri sur la profondeur fait remeonter les orphelins.

Création d'une autre page (penser à overrider)

Ajouter les champs livre Poids et Profondeur. On note que les données qui ne sont pas dans un livre ont Profondeur et Poids =0. Les entrée de livre ont une Profondeur=1. Voici ce qui pourrait trouver nos orphelins (non intégrés dans un livre).

Le poids apparait dans le tri mais pas dans les filtres?!? La Hiérarchie n'apparait que dans les filtres...

3e page- avec relations Livre

A l'ajout d'une relation: Views 7.x-3.8 : ajout relation, de type book avec le choix "Livre: Parent" et suivant Views 7.x-3.8 : configurer relation, de type book

Ajout d'un champs Poids du livre (une liste "relationships apparait", on peux y choisir ou pas "Parent de livre") et Profondeur (chercher depth).

Configure filter criterion: Global: l'un permet de comparer 2 champs, l'autre de combiner des fields de type texte seul (operat|value).