MARTINA Wist je dat..? Truckjes en weetjes in Drupal 7 Inhoud: 1. Inlogknop 2. Aangepast beheerdermenu 3. Actieve pagina in de broodkruimel 4. Afbeelding op zoekknop (en geen tekst) [CSS] 5. Logo met link naar Home [HTML, php] 6. Artikels, lengte en aantal op frontpagina (en welkomtekst zonder lees meer ) 7.De verdo.. tijdelijke map 8. Bescherm de SuperGebruiker (user1) 9. Creatie datum van node aparte stijl geven Soms moest ik flink lang zoeken voor kleine dingen in Drupal die mij enorm stoorden als ik ze niet kon oplossen of andere zaken waar ik niet direct wist hoe ik ze moest gedaan krijgen. De ene keer is het een kleine module die de oplossing bied, de andere keer is Drupal al daarmee uitgerust en moet je het alleen maar weten te vinden. Dus hier een verzameling van kleine oplossingen die het leven eenvoudiger maken!
Wist je dat..? Inlogknop 1. Wist je dat als je een link aanmaakt om te kunnen inloggen en het pad legt naar user/login in plaats van user, dat deze link dan verdwijnt zodra je ingelogd bent! Maakt niet uit in welk menu dat je het stopt en welke rechten dat je aan het blok geeft. Dit werkt trouwens ook voor de link naar de registratiepagina user/register. Handig als je ook nog een knop aanmaakt met de module menu token waar je dus kunt linken naar het pad user/[current-user:name] en met de label mijn account of zo. Deze verschijnt dan alleen als je ingelogd bent. Aangepast beheerdermenu 2. Wist je dat het Usermenu een handige tool is om voor een lid of beheerder van die site een menu samen te stellen die toegang geeft tot beheertaken. Stel dat je toestaat om een nieuw artikel aan te maken aan de beheerder, dan geef je een link in met het pad node/add/article en een label in de zin van maak een nieuw artikel aan. Als nu de ingelogde persoon in een rol steek die daar geen rechten voor heeft, dan verschijnt deze link gewoon niet. Handig, hé! Zo kan je dus een heel beherders-menu klaar maken in het usermenu, dat je kunt gebruiken voor elke gebruiker die ingelogd is, de links (knoppen) waar hij geen rechten voor heeft, verschijnen ook niet. Actieve pagina in de broodkruimel 3. Wist je dat je de broodkruimels(breadcrumbs) kan aanpassen met de module Custom breadcrumbs! Dat wist je zeker al, maar nu komt het probleem. Die module werkt prima met inhoudstypen, maar als je een pagina hebt die met views gemaakt is of bv. de contactpagina, dan kan je daarvoor deze module niet instellen want dat zijn geen inhoudstypes. Nu bestaat wel een module (Context Breadcrumb Current Page) die je kunt gebruiken om de actieve paginatitel in de broodkruimels te laten zien, bv. U bent hier: Home - Over ons maar die kan je dan weer niet samen gebruiken met de Custom breadcrumbs! En die heb je toch echt nodig als je 2
langere paden hebt, zoals U bent hier: Home - Album Foto s van de zomer. Nu daar heb ik dus deze oplossing voor: Maak voor elke pagina die je niet kan aanpassen via de Custom breadcrumbs een nieuwe Blok aan. In het tekstveld van je Block gebruik je het tekstformaat PHP filter dus niet Full HTML of Filtered HTML (je kan dit activeren via modules core modules). Geef nu volgende code in: <?php global $base_url; $breadcrumb[] = l('home', null); $breadcrumb[].= check_plain('contact'); drupal_set_breadcrumb($breadcrumb);?> Vervang het woordje contact met de titel van de pagina die je hier wilt hebben staan. Plaats deze blok in de inhoud zet hem bovenaan en stel hem in dat deze alleen op de juiste pagina moet getoond worden. Je gaat die blok niet te zien krijgen maar hij doet wel zijn werk. Maak voor elke pagina die dit nodig heeft zo een blok aan en plaats hem in de inhoud (zichtbaar alleen op deze pagina). Afbeelding op zoekknop 4. Wist je dat de knop van het zoekformulier kan vervangen met een afbeelding (CSS)? Dat lukt meestal goed bij de meesten alleen stom dat de tekst altijd blijft staan. Nu dat los je zo op: #search-block-form input.form-submit { dit is de zoekknop background-color: transparent; alle standaardkleur uitzetten background-image: url(images/zoekknop.png); hier is de afbeelding die je wilt gebruiken display: block; maak daar een box van height: 35px; geef de hoogte op van je afbeelding width: 38px; de brede van je afbeelding text-decoration: none; uit veiligheid alle decoratie weg background-repeat: no-repeat; ok, dit is duidelijk 3
float: left; dit doe ik daarmede de knop langs de tekstveld komt te staan padding-top: 35px; nu de tekst naar onder, even ver als de hoogte van je afbelding overflow: hidden; nu is de tekst over de box, dus verbergen wij die cursor: pointer; geen linktekst, geen handje bij de cursor, dus moeten wij die zelf creëren border: none; ook weer duidelijk, geen randen } (Alles in het zwart is uitleg en alles in blauw is css-code) Logo met link naar Home 5. Wist je dat een logo in je website kan tonen met een link naar de frontpagina. Dat handige daarvan is dat je het logo gemakkelijk kan veranderen zonder de hele template te moeten aanpassen. Plaats de afbeelding van je logo in de rootmap van je template en zorg ervoor de deze de naam logo.png draagt. In je page.tpl.php moet je in de div waar je het logo wilt laten verschijnen (bv. Header) deze code aan toevoegen: <div id="logo"><a href="<?php print $front_page;?>" title="<?php print t('home');?>" rel="home" id="logo"><img src="<?php print $logo;?>" alt="<?php print t('home');?>" /></a></div> Als je nu van logo wilt veranderen, gewoon de afbeelding veranderen. Artikels, lengte en aantal op frontpagina 6. Wist je dat je uw artikels op de frontpagina kan aanpassen in de lengte voor dat er een lees meer komt, en zo geen scheidingslijn nodig hebt. Op die manier worden alle artikels even lang, wat beter uitkomt als je hier ook een aparte opmaak in je template voor voorziet. Ga naar Structuur -> Inhoudstypen en bij Article kies je voor weergave beheren. Je hebt nu boven rechts in deze overlay, twee knoppen Standaard en Teaser. De Teaser is het artikel zoals het op de frontpagina getoond word (een plaagtekst dus), die moet je dus kiezen. Nu kan je bij het veld body rechts op een wieltje klikken waardoor je extra opties voor de lengte van je tekst krijgt. Geef hier dus het aantal letters (spaties tellen ook voor letters) op dat het artikel lang mag zijn voor dat het gesplit word en je een lees meer krijgt. Je kunt ook bestemmen hoeveel artikels op de frontpagina getoond worden voor dat er een pager (navigatie) verschijnt. Ga naar Instelling -> (Systeem) -> Websitegegevens. Bij Aantal berichten op de voorpagina stel je dit dus in met een getal. Wil je toch een welkomstekst die geen lees meer bevat, maar je wilt die opmaak van je artikels 4
niet veranderen, dan maak je toch gewoon een blok aan met deze tekst en plaatst die in de inhoud (content) en laat die alleen op <front> verschijnen. De verdoe.. tijdelijke map van Drupal onder Windows 7.Wist je dat Drupal bij de installatie, altijd een tijdelijke map aanmaakt? Die heeft Drupal nodig voor de updates te kunnen downloaden, foto s te verkleinen/vergroten en andere tijdelijke bewerkingen uit te voeren. Als je Drupal op een online server installeert, dan kijkt die naar de root van die aan hem toegewezen serveerruimte (de hoofdmap waar alle bestanden van je Drupalsite staan) en maakt daar de map aan. Als je Drupal op een locale server (usb-webserver, Wamp..) installeert, dan zoekt die hier de root diep in de Map C:\Users\tina\.. e.z.v. en plaatst daar die temporary map. Dat is op zichzelf geen probleem, tot dat je de site verplaatst naar een online server of een andere Computer. Nu kan Drupal namelijk die map niet meer terug vinden :-( Dit truckje helpt altijd: Naar de installatie van u Drupalsite ga naar de rootmap van je Drupalsite (waar alle mappen en bestanden van je site in zitten) en maak daar een nieuwe map aan en noem die temp, zorg ervoor dat deze bij eigenschappen niet op alleen lezen staat. Dan ga in je site naar Instellingen Media Bestandsbeheer en vul daar temp in, bij Tijdelijke map! Probleem opgelost. Bescherm de SuperGebruiker (user1) 8.Wist je dat bij gebruikersrechten, je aan een beheerder rechten kan geven om leden te beheren? Dus ook leden toevoegen, verwijderen, van rol veranderen.. e.z.v.! Dat is nodig als je een site hebt met veel leden en een beheerder. Het probleem is nu wel dat die beheerder ook de Superadministrator (jij dus, die de website in elkaar steekt) kan verwijderen. Dit moet je dus voorkomen! Dat kan met de module User protect http://drupal.org/project/userprotect Ga naar installatie naar Instellingen Personen User protect. Daar is op het eerste tabblad Beveiligde gebruikers de eerste gebruiker standaard al ingesteld. Moest dat niet zo zijn, moet je deze nog toevoegen. Je kan hier ook andere gebruikers via hun gebruikersnaam, toevoegen. Op het laatste tabblad Standaardwaarden beveiliging vink je bewerk alle accounts uit, onder standaardwaarden bypass rol-naam-van-beherder (in mijn geval staat daar dus zaakvoerder) Anders kan deze rol die toegang heeft tot gebruikersbeheer, toch nog deze beveiliging omzeilen. 5
De Datum van een artikel stijlen 9.Wist je dat de aanmaakdatum van een node in aparte stukken gedeeld kan worden (jaar maand dag) en dat je op die manier elk onderdeel apart kan stijlen? Maak in je theme (map van je eigen template), als je dat nog niet hebt, een template.php aan. Zet hier de volgende code in: (vervang "mytheme" met de naam van je eigen theme-naam) function mytheme_preprocess_node(&$vars) { // Haal de variabel uit een node. $node = $vars['node']; // Maak individuele variabelen van de datum variabele. $vars['date_day'] = format_date($node->created, 'custom', 'j'); $vars['date_month'] = format_date($node->created, 'custom', 'M'); $vars['date_year'] = format_date($node->created, 'custom', 'Y'); } Tip!!! Denk eraan dat je met een php-dokument werkt en dat dit document begint met <?php maar bij Drupal deze php-tag niet mag sluiten aan het einde! Nu heb je drie nieuwe variabelen die je in je node.tpl.php kan gebruiken en zo apart een class kan geven, dit betekent dat je ze kan apart opmaken in je css. B.v. <!--//begin datumblok--> <div class="dateblock"> <span class="maand"><?php print $date_month?></span> <span class="dag"><?php print $date_day?></span> <span class="jaar"><?php print $date_year?></span> </div><!--//einde datumblok--> 6