D3 les 07

Meertaligheid

Een meertalige site is een meerwaarde voor de bezoeker. Drupal heeft een aantal verregaande mogelijkheden, maar dat had je reeds verwacht zeker...

We starten met het installeren van drie modules. Internationalization of kortweg i18 is de kern van de meertaligheid.

Het heeft Variable nodig zoals je ziet

De Localization update module kennen we al. als je een neiwue taal installeert (bvb Frans) dan is deze module handig want alle modules worden ook mee vertaald. Zo zal bvb een kalender ook in de nieuwe taal worden gepresenteerd.

We vinken bijna alles aan wat we kunnen. Dit is heel wat.

Bij deze sectie heb ik zowat alles aangeklikt met uitzondering van forum en cotnactformulier, omdat ik die niet gebuik.

Okk bij variable staat alles aan bij mij.

We gaan een extra taal installeren.

De localization update doet zijn werk...

Module per module wordt vertaald.

Daarna gaan we bij talen instellen wat we willen gebruiken in een andere taal. We gaan de user inerface en de URL gebruiken. De volgorde is ook van belang! De instellingen gelden van boven naar onder. Als je dus een gebruiker hebt met een andere taal dan Nederlands, dan zal Drupal de beheerdersinterface in zijn/haar taal zetten. Dat URL aangevinkt moet worden is logisch. We willen toch dat onze pagina's in verschillende talen beschikbaar zijn hé.

De updates kan je ook instellen:

Drupal heeft de Franse taalbestanden in deze map gestoken omdat dit bij de instellingen zo staat.

De geïnstalleerde talen zet hun code zijn zichtbbaar. Deze code is belangrijk. Als je bvb. in de URL van je site /fr typt (na de rest), zal je site in het Frans komen te staan, voor zover je reeds de inhoud vertaald hebt natuurlijk.

Bij strings kan je instellen dat je ook alle text formaten wil kunnen vertalen. Standaard staat dit op Platte tekst.

Hieronder een belangrijk tabblad. Hier bepaal je wat je in aanmerking neemt voor vertaling. Dit biedt de mogelijkheid om zelf te vetalen. Zo zie je dat we de voorpagina ook aanvinken. Meestal is die taalneutraal. We zullen ook de titel van onze site kunnen vertalen.

Dit laten we zo staan

Nu gaan we in onze inhoudstypes duidelijk maken dat we het type meertalig willen. Eerst moet je dit inschakelen én opslaan. Ik kies hier voor het reeds bestaande articles type. Je kunt ook een nieuw type aanmaken.

Na opslaan kom je terug om dit in te stellen. We verplichten dus om een taal te kiezen bij dit inhoudstype.

Er is een veld bijgekomen. We zullen op deze manier de taal kunnen instellen.

We testen uit met een nieuwe pagina uit het inhoudstype 'articles'. Het ziet er zo uit:

Het resultaat. Je ziet ook de taal.

Als je nu het artikel bewerkt zie je een nieuw tabblad 'vertalen'.

Je ziet wat er nog moet vertaald worden. Je hebt ook de keuze om de url op te geven van mogelijk reeds gemaakte pagina's (die de vertaling reeds hebben)

Wij kiezen voor de directe aanpak:

Het resultaat.

Klik je op Nederlands dan ga je terug naar je oorspronkelijke pagina.

Je kunt ook in de URL het pad volgen. Let op de codes van de talen.

Als je nu bij inhoud kijkt, dan heb je een nieuwe pagina aangemaakt.

We doen dit ook in het Frans...

Wat er opvalt is dat niettegenstaande we een andere pagina zien, onze menulink niet van taal verandert. Het blijft uitnodiging...

We gaan naar de instellingen van het menu en maken dit vertaalbaar voor de menu-items:

Nu klikken we op vertalen naast het menu-item.

en geven het een passende naam:

Het resultaat:

Kijk maar..

Het volgende dat we aanpakken is de voorpagina. We hadden die als vertaalbaar ingesteld, weet je nog.

zowel voor Engels als Frans is er nog geen inhoud..

We doen daar iets aan. Kijk ook eens hoe mooi de ander modules vertaald worden.. enkel mijn blok title nog..

Tot hiertoe hebben we naar een andere taal geschakeld via de pagina knop. Nu gaan we het blokje inschakelen dat reeds werd gemaakt door de module internationalization.

Het ziet er zo uit:

Onze menu link 'Home' wordt nog niet mee vertaald. Hij staat op taalonafhankelijk. Logisch.

We zetten dit in het Nederlands

en vertalen de knop

Zet ook de nieuwe menu-items op de juiste plaats.

Zo zie je de 2 vertaalde menu-items (Invitation + Bienvenue), samen met het front artikel.

Ook de Naam van de website haaden als vertaalbaar gezet. We gaan er naar toe en doen ons werk.

Jawel.

Ten slotte... je kunt ook vlagjes aan het menuutje toevoegen.

Schoon hé.

Deze vlagjes komen nu ook in de pagina's tevoorschijn.

Eigenlijk hebben we dit niet meer nodig. Als een bezoeker klikt op zijn taal, moet hij niet telkens de mogelijkheid krijgen om per artikel te switchen. We vinken onderstaande instelling aan.

Ook de taal in het inhoudstype zetten we op verborgen. Niet verwijderen natuurlijk. Het moet wel ingesteld staan, maar voor de rest hoeven we het niet te zien.

Het eindresultaat

 

Als je zin hebt kan je nu nog de titels van de blokjes aanpassen. Je hebt  nu zo veel geleerd dat je dit nu volledig zelf kunt..

Manuele backup en verplaatsing

Soms is het nodig om manueel je site te verplaatsen. Ik heb al gehad dat Backup and Migrate faalde, waarschijnlijk te wijten aan 'Drupal-vreemde' tabellen. We hebben al gezien hoe we een site verplaatsen. dit gaan we nu ook weer doen, maar zonder Backup and Migratie. Handwerk dus. De mappen en bestanden (sites, includes en de temporary mappen) zijn wel met FTP over te zetten, zoals we geleerd hebben. Doe dit eerst. Daarna zet je de settings.php terug. Dan zie je reeds de nieuwe modules, maar nog niet actief.

Hoe exporteer je nu de database?

Ga naar de database en klik op exporteren.

Kies voor uitgebreid. Je weet dan wat je doet. Desnoods kan je hier tabellen weglaten. Dit om bvb de importlimiet van 8 mB niet te overschrijven. Je kunt zo je databse in stukken overbrengen.

Je kunt ook de grootte verkleinen door een zip formaat te kiezen. Dit help ongelooflijk veel. Ik heb soms dat er nog slechts 10% van het volume overblijft. Kijk ook al eens naar de database van het doel en kijk of de karakterset gelijk staat.

Laat di zo staan:

Daarna importeren. Zie je de limiet?

Cash flusshen en klaar...

 

Views vervolmaking

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...