Les 6

In deze les gaan we views bespreken. We kennen reeds heel wat... maar toch. Wat wist je nog niet?

Een view gebruiken bij Node Reference

we gaan een puntenboekje maken met de punten van onze cursisten:

Het puntenboekje bevat een node reference naar de cursist. De titel wordt verborgen en automatisch gegenereerd met https://www.drupal.org/project/auto_entitylabel

Normaal gezien kan je nu een lijstje krijgen met de cursisten. Dit is standaard een oplijsting van de titels van de cursisten nodes. Ik heb er hun foto's bij gezet.

Je hebt namelijk bij de node reference een mogelijkheid om een view te gebruiken, waar je naar believen alle velden kunt gebruiken.

Je moet natuurlijk eerst de reference view maken.

Views Conditional

op https://www.drupal.org/project/views_conditional kan je een module vinden die een extra veld in een view maakt waarmee je inhoud kunt tonen afhankelijk van andere velden. Zo genereer ik de status afhankelijk van de percentages.

Het veld bevindt zich onderaan de lijst bij het toevoegen van velden. De rest is kinderspel. De wizard vraagt wat je wilt.

CSS en views

Bekijk eens onderstaande print. Er is op de afbeelding opmaak toegepast. De cursusnaam staat op 1.2em. Het percentage staat vet. De niet geslaagden staan rood en per cursus staat de rij anders gekleurd. Dit alles verwezenlijkt met de meest uiteenlopend methodes ... om didactische redenen.

Via de CSS injector heb ik deze classen aangemaakt. OK. Dit kunnen we al...

We beginnen met de makkelijkste methode. We zetten het percentage vet met behulp van de ingebouwde interface:

We kunnen ook gebruik maken van dezelfde tool om een classe te definiëren. (Cursusnaam op1.2em.)

Helemaal leuk wordt het als je ook via resultaten herschrijven, hetzelfde kunt. (afbeelding cursist opmaken.)

Via de Views Conditional (zie boven) kan je ook opmaak meegeven. Dit zet de de tekst 'niet geslaagd' in het rood.

Moeilijker wordt het als je de rij in zijn geheel wil CSS meegeven, afhankelijk van een waarde van een veld. Op Google kan je daaromtrent niet direct simpele antwoorden vinden en ik ben nogal simpel...

Ik heb het als volgt opgelost... Je kunt in de rijklasse een token gebruiken. Als je nu een klasse aanmaakt met dezelfde naam, dan kan je die aanspreken. Hier zal ik per cursus (Drupal 1, 2 of 3) een andere rijkleur genereren. Alleen het werkte niet omdat in mijn thema ook nog een td tag (table division of kolom) een kleur (wit) meekreeg. Mijn systeem werkte, maar werd onmiddellijk overruled door de td CSS. Vandaar dat je in de CSS ziet dat ik de td op transparent heb moeten zetten. Ik denk dat dit afhankelijk is van het gebruikte thema.

EVA: Entity Views Attachment

We hebben in het verleden al veel relaties gelegd tussen een inhoudstype en een view. Een voorbeeld is de schilder met daaronder de view van al zijn schilderijen. We losten dit op door de view te maken van alle schilders en een contextuele filter te zetten op de naam van de schilder. Vervolgens maakten we een viewfield aan in het inshoudstype en koppelden we dit met een argument. Wel er is eigenlijk een simpeler manier. EVA

De cursist heeft haar view met de resultaten. Hoe doen we dit nu?

Installeer de module en maak dan een view van dit type. Er zal gevraagd worden met welk type entiteit (vb node) en welke bundel (inhoudstype) je wilt koppelen.

 

Leg ook weer een contextuele filter:

Als je nu naar je inhoudstype gaat kijken, dan zie je dat in de weergave (enkel in de weergave!!) er een veld is met de view. Dit is het grote verschil met de eerste methode (viewfield). Het komt niet meer voor in het input formulier. Er is ook minder in te stellen, vind ik. Een ander groot voordeel is dat de speciale tekens mooi worden meegenomen in de contextuele filter. Zo kan je Marianne O'Tool (merk het accentje op) zonder probleem gebruiken. Bij viewfield met zijn argrumenten is dit pijnlijk moeilijk...

Views wiskundige expressie

zit standaard bij views. Kijk bij de velden naar wiskundige expressie. ik heb een veld toegevoegd 'eindwerk' en de inhoud aangepast. Nu komt het er neer dat ik de punten en het eindwerk optel en deel door 2 om het gemiddelde te berekenen.

Je kunt de precisie instellen na de komma:

 

Better Exposed Filters

zoals de titel zegt... Het is beter. Mogelijkheid om inklapbare filters te zetten, met wat uitleg en met selectievinkjes.

De gewone filters.. Je moet met de ctrl toets ingedrukt meervoudig selecteren.

De nieuwe versie. Een compacte filter.

die bij klikken..

Je vindt het bij de geavanceerde instellingen. Zichtbaar formulier...

Van dan af kan je de instellingen doen.

In combinatie met Views Table Filter kan je dit in een tabel in de kop zetten. De ineengevouwen versie werkte bij mij niet. De uitgeklapte versie wel.

Je moet enkel bij de BEF instellingen dit aanzetten:

Views fieldset style plugin

op https://www.drupal.org/project/views_fieldset vind je een simpele module die de inhoud van een view wat compacter maakt.

Je kiest in plaats van HTML of velden voor veldgroep en stelt je voorkeur in. Met het herschrijven van de resutlaten kan je het titelveld wat meer betekenis geven.

Views PHP

Integreert PHP in views. Je kunt daarmee een php veld maken. We gaan dit toepassen om de graden toe te kennen volgens het percentage.

Belangrijk! Gebruik de https://ftp.drupal.org/files/projects/views_php-7.x-2.x-dev.zip versie. In de gewone versie zitten er een bug die met een patch moet rechtgezet worden. In de dev versie is dit reeds opgelost.

Dit is de php. Bekijk het aandachtig. Het maakt gebruik van de switch code. Echo is het trefwoord om iets kenbaar te maken.

<?php

switch (true) {
    case ($row->field_punten>=85):
        echo "grootste onderscheiding";
        break;
   case ($row->field_punten>=80):
        echo "grote onderscheiding";
        break;
    case ($row->field_punten>=70):
        echo "onderscheiding";
        break;
    case ($row->field_punten>=50):
        echo "voldoening";
        break;
  case ($row->field_punten<50):
        echo "niet geslaagd";
        break;
    }
?>

Je stelt het veld in. Zet het onder de anderen om ook tokens te kunnen gebruiken van de bovenstaande velden.

Zet de code in het output veld.

Views Field View

Op https://www.drupal.org/project/views_field_view kan je de module vinden. Ze biedt je de mogelijkheid om in een view een andere view als veld binnen te halen. Vb een overzicht van acteurs met per rij hun films. Wij gaan het met ons puntenboekje doen... We gaan per resultaat ook achteraan het gemiddelde van de cursus tonen. Drupal 1 heeft blijkbaar 77% als gemiddelde.

We maken eerst de view die dit gemiddelde berekent. Vergeet ook niet een contextuele filter op de cursusnaam te zetten. Anders krijg je van elke cursus de gemiddelden onder elkaar.

Nu gaan we in onze view van het puntenboekje het veld toevoegen:

Met de volgende logische instellingen. Ook hier geef we weer naar welke contextuele filter er moet gekeken worden.

Views Infinite Scroll

op https://www.drupal.org/project/views_infinite_scroll zie je de module en ook een paar voorbeeldsites. Het komt er op neer dat men geen paginering gebruikt, maar als je telkens het eind van de pagina bereikt vult de view zijn inhoud aan. Handig als je een grote view hebt. Je hebt het trouwens al eens meegemaakt bij sites zoals Pinterest enz..

We maken eerst een 50 tal nodes aan. We gaan daarvoor nu een de devel module gebruiken. Een plezier om nep nodes mee te maken.. https://www.drupal.org/project/devel  Gebruik enkel de Devel Generate. De rest is om Drupal te ontwikkelen.

Eerst een inhoudstype:

Nu het wonder. Je kiest het inhoudstype en stel de voorkeur in.

Yep. Een node aangemaakt. Het mens moet nog geboren worden... Wat Drupal al niet kan hé. Als afbeelding krijg je van die steriele foto's. Enfin we hebben 50 nodes.

Bij de paginering zet je infinite scroll.

Als je nu vlug genoeg naar onder scrolt, dan zie de drie blokjes die de inhoud aan het binnenhalen zijn.

Zo.. ik heb nu met je enkele zaken besproken die in de voorgaande Drupal cursussen nog niet aan bod waren gekomen. Is er nog ?... wat denk je...