Dwarshuis Webdesigner
u bent hier: Home > joomla! > Joomla! Tips

Joomla! Tips

Joomla

Handige truuks voor de Joomla webdesigner

Fatal error

Na het upgraden naar Joomla! 1.08 of hoger doet de image manager etc het niet meer bij de standaard WYSIWYG editor, MosCE. Je krijgt de melding:

Fatal error: Call to a member function on a non-object in /www/htdocs/xxx/includes/joomla.php on line 3403

Oplossing: Installeer JCE, de gratis WYSIWYG editor.

Tip: Trash manager legen

Als je tegen problemen aanloopt, gooi dan de Trash Manager leeg. Deze vind je in het menu onder Site - Trash Manager. Je hebt het content gedeelte en het menu gedeelte. Gooi beide leeg. Ten eerste kijkt Joomla bij het bepalen van URL's (en wel het ItemId) ook naar wat er in de Trash Manager zit (dat is een bug).

Ten tweede vraag je je misschien af waarom je een aangemaakte container of sectie niet kunt verwijderen. Waarom de melding dat de sectie / categorie nog niet leeg is terwijl dat wel zo lijkt te zijn? Welnu, dat komt doordat er in de Trash Manager nog wat zit.

Tip: Joomla en printen

Joomla heeft een "automatische" printfunctie ingebouwd, die rechtsboven een artikel verschijnt, en waarmee je een heel artikel kunt printen. Dit werkt anders dan de printopdracht vanuit de browser zelf: die zal alleen de pagina die je op dat moment ziet, printen. De Joomla printopdracht pakt het hele artikel, ongeacht of je mospagebreak hebt gebruikt (waardoor je verschillende pagina's krijgt met het bijbehorende navigatie systeem ('vorige' en 'volgende' etc).

Het pop-up schermpje dat verschijnt na de print opdracht heeft een afwijkende html-structuur. Het belangrijkste verschil is dat de body tag een css-class krijgt toegewezen waardoor je deze, vanuit hetzelfde style sheet, kunt benaderen (je hoeft dus geen speciale 'media=screen' en 'media=print' te maken).

De body krijgt de volgende class toegewezen: .contentpane

Hiermee kun je leuke dingen doen. Het volgende zorgt er bijvoorbeeld voor dat de achtergrond die je in je gewone template hebt, niet meegeprint wordt:

body.contentpane, body.contentpane * {color: black !important;background: white !important;}

Je kunt nog veel meer toepassingen verzinnen. Het belangrijkste is dat je, doordat de body tag in het print-pop-up wèl een class met de naam contentpane krijgt, en in de gewone pagina níet, verschil kunt maken, in hetzelfde css bestand (dus zonder de eerdergenoemde 'screen' en 'media' variant.

Tip: Unpublishen werkt niet

Hoe kan dat nou? Je hebt een item geunpublished en toch blijft het zichtbaar? Oplossing: waarschijnlijk ben je zelf ingelogd op het front-end van je website; log maar eens uit en kijk dan weer.

Tip: verplaatsen van containers, etc

Lange tijd heb ik het over het hoofd gezien, maar het kan wel: een Category toewijzen aan een andere Sectie. Gelukkig maar. Je zou verwachten dat je in het menu op de bewuste Category zo moeten klikken en dan de aanpassing maken, maar dan zul je zien dat de plaats waar de toegewezen sectie vermeld staat, niet te editten valt.

Wat je echter moet doen, is niet IN de category gaan, maar in het overzicht de bewuste category aanvinken, en dan kiezen voor move, rechtsboven in het menu. Fluitje van een cent, en een grote opluchting voor mij.

Hetzelfde geldt voor het toekennen van vele content items tegelijk aan een nieuwe category. Eers dat ik dat je het per content item moest doen, maar gelukkig is dat niet het geval.

Tip: front-end WYSIWYG editor zonder scrollbars

Als je een template ontwerpt zonder tabellen, dus met css en divs en je stelt de div met de tekst in op een bepaalde breedte, kan het soms gebeuren dat als je inlogt op de front end dat de editor niet helemaal wordt weergegeven omdat een div niet automatisch mee breder wordt, zoals een table dat wel kan.

In dat geval heb ik een work around bedacht die er als volgt uit ziet:

Ten eerste: maak een kleine aanpassing aan

<?php if ($my->id) {initEditor();}?>

in je template, en wel als volgt

<?php if ( $my->id ) { echo "<style type=\"text/css\">#hoofdtekst {overflow: visible;}</style>";initEditor();}?>

waarbij #hoofdtekst de div is die de hoofdtekst bevat, waarin de editor geladen zal worden. Zorg ook dat deze regel NA de css files in de code staat, zodat het overflow: visible commando niet per ongeluk overruled wordt door iets in de css file(s).

Neem vervolgens de volgende code in je css file op:

/*******************************/

.adminform {
border: 7px solid #000;
position: absolute;
top: 5px;
left: -300px;
z-index: 10000000;
background-color: #ccc;
}

#publish-page {
border: 7px solid #000;
position: absolute;
top: 1900px;
left: -500px;
z-index: 10000000;
background-color: #fff;
display: block;
}

#images-page {
display: none;
}

#content-pane {
display: none;
}

/*******************************/

en pas dit naar behoeven aan. Nu zal de editor in zijn eigen vierkant verschijnen en niet gevangen zijn in een div met scroll bars.

Als je hier wat aan hebt, laat het me dan alsjeblieft weten.

Tip: SEF component verwijderd en nu doen externe links het niet meer

Stel je hebt altijd een SEF component gebruikt, maar je wilt er vanaf (zoals ik). Dan is het niet zo moeilijk om het component uit Joomla te verwijderen. Wat vervelender is, is het feit dat alle externe links het niet meer zullen doen.

Wat je dan kunt doen, is voor iedere oude link een redirect in je .htaccess opnemen. Het is even werk, maar het werkt wel goed. Zo'n regel in je .htaccess ziet er als volgt uit (ik heb even twee regels als voorbeeld uit mijn eigen .htaccess genomen):

Redirect 301 /home/ http://www.dwarshuis.com/component/option,com_frontpage/Itemid,1/
Redirect 301 /wat_is_cms http://www.dwarshuis.com/content/view/18/183/

Vraag: Hoe lang duurt het voordat Google de nieuwe links geïndexeerd had?
Antwoord: 12 dagen

Tip: waarom is iets niet zichtbaar in Joomla?

Veel van de functionaliteiten in Joomla, zoals menu's, laatste nieuws, en ga zo maar door, zijn binnen Joomla in te stellen door in te loggen op de back-end en dan via het menu te gaan naar modules - site modules.

In het begin is het soms niet te begrijpen waarom iets niet zichtbaar is terwijl dit toch wel het geval zou moeten zijn volgens jou. Het is dan van belang om te beseffen dat de zichtbaarheid van een module door een aantal factoren bepaald wordt. Stel je wilt een bepaalde module zichtbaar maken, maar wat je ook doet, het verschijnt gewoon niet:

A: is het module wel gepubliceerd?

B: is het module wel toegewezen aan het menu item waaronder je het zichtbaar wilt laten zijn? Dat stel je in onder...

Pages / Items
Menu Item Link(s):

...aan de rechterkant van het scherm als je in het scherm van de bewust module zit. Je kunt dus bijvoorbeeld het Main Menu alleen toewijzen aan één item van datzelfde menu! Dat klinkt nogal paradoxaal vind ik, maar zo gek is het ook weer niet: je kunt dus een heel menu in elkaar knutselen, bijvoorbeeld:

home - diensten - wie zijn wij - contact

en zorgen dat dat menu alleen zichtbaar is als je op diensten klikt. Wat het nut hiervan is, weet ik niet maar het is wel handig dit te beseffen. Je zult dus al op de pagina met de URL die bij die pagina hoort, moeten staan, want anders valt er dus niets te klikken...

C: is de module position wel gedefinieerd in het template? Deze is heel belangrijk. Elk module heeft een positie toegewezen gekregen. Bijvoorbeeld: Position: Left (links bovenin het scherm wordt dit gedefinieerd).

In het template dat je gebruikt is in de HTML code een stukje code opgenomen dat bepaalt waar de positie met de naam left wordt weergegeven. Dit stukje code ziet er als volgt uit:

<?php mosLoadModules ( 'left' ); ?>

Als dit stukje code niet in het template staat, zal het module eenvoudigweg niet weergegeven worden, al heb je alles verder correct ingesteld.

Nu moet ik tot slot nog vermelden dat je in het administrator menu via site - template manager - module positions zelf posities kunt definiëren. Zodra je dit gedaan hebt, komt deze positie terug in het drop down menuutje in de module manager en kun je deze positie eventueel opnemen in je template door het bovengenoemde stukje code te gebruiken en in plaats van left een ander woord te gebruiken (maximaal 10 karakters).

Tip: Thumbnails

Joomla maakt zelf vaak thumbnails van foto's aan die lang niet altijd gebruikt worden. Deze kunnen stiekum veel ruimte in gaan nemen. Als je tegen je ruimtelimiet aanloopt bij een web hosting provider, zou je kunnen proberen wat van deze ongebruikte thumbnails te verwijderen.

Tip: opruimen van ongebruikte images

Stel je hebt al langere tijd een website en je hebt met meerdere mensen regelmatig de content aangepast. Op een gegeven moment heb je zoveel images in je /images/stories directory dat je de ongebruikte plaatjes wilt opruimen. Maar... hoe doe je dat als je niet weet welke er niet gebruikt worden? Helaas krijg je geen waarschuwing van Joomla als je een image dat ergens in een content item gebruikt wordt, wilt verwijderen.

Wat ik doe, is het volgende: ik maak een export / back-up van de database via phpMyAdmin, open dit tekstbestand in een tekst editor (bijvoorbeeld notepad) en zoek de naam van het plaatje met de zoek-functie. Als de naam niet gevonden wordt, weet ik dat het plaatje niet in gebruik is. Als het wel gevonden wordt, zul je nog kunnen controleren of het pad naar het plaatje klopt met het pad van het plaatje waar we het hier over hebben, en zo niet, dan is er misschien een plaatje met dezelfde naam in een andere directory.

Het is niet echt de makkelijkste methode en als je iets beters weet, hoor ik het graag van je. 

Tip: Joomla standaard output verwijderen zonder core code aan te passen?

Je zou het kunnen proberen met css. Een voorbeeld: als je een blog style menu kiest en je wilt niet dat het 'read more' zichtbaar is, dan kun je dit, dank zij het feit dat het een eigen css id meekrijgt, onzichtbaar maken door de volgende regel in je css aan te passen / toe te voegen:

.blog_more div {
display: none;
}

Dit is handiger dan in de core files te gaan zitten editten, want dat levert bij het patchen van je site naar de meest actuele versie, een hoop extra werk op.

Tip: de site die ik van remote heb gedownload, werkt niet op mijn lokale JSAS installatie

Het zou best eens kunnen komen door de .htaccess file...

Tip: ik wil op mijn lokale JSAS - Windows installatie de htaccess.txt hernoemen naar .htaccess zoals aangegeven wanneer ik SEO wil activeren, maar dat gaat niet

Windows ziet alles achter de punt als een extensie en eist dat er voor de punt ook tenminste 1 teken geplaatst wordt. Op UNIX betekent de punt aan het begin dat het bestand verborgen is. Je kunt het bestand toch hernoemen op Windows door naar de DOS prompt te gaan, naar de juiste directory te gaan en daar het volgende commando in te voeren:

rename htaccess.txt .htaccess

Dan gaat het wel goed...

Tip: het aanpassen van de navigatie bij het gebruik van mospagebreak

Sommige klanten (en ik ook) vinden de standaard navigatie die gegenereerd wordt door Joomla bij het gebruik van mospagebreak lelijk. Als er slechts sprake is van twee pagina's en je hebt in de Global Configuration de Table of Contents on multi-page items op hide staan, dan wordt er rechtsboven in het content item dus geen kolommetje met alle pagina's weergegeven en in plaats daarvan wordt er onderaan het article een regel als volgt weergegeven:

<< Begin < Vorige 1 2 Volgende > Einde >>

Als je alleen een vorige en een volgende wilt, zul je de bovengenoemde optie aan moeten zetten, maar dan heb je dus dat tabelletje en dat wil je misschien ook niet. Tevens heb je bovenaan de tekst staan pagina 1 van 3 o.i.d.

In dat geval is CSS je redding: zonder in de core files te hoeven knoeien, kun je een en ander laten weergeven zoals jij het wilt.

Dus wil je een simpele navigatie, zet dan de Table of Contents on multi-page items op show en voeg de volgende regels in je css file toe:

.contenttoc {
display: none;
}

.pagenavcounter {
display: none;
}

Hiermee verberg je het kolommetje en de paginerings regel bovenaan en krijg je een wat rustiger beeld.

Tip: "Terug naar boven"

De normale manier om met een anker een 'terug naar boven linkje' in te bouwen, werkt soms niet in Joomla. Hier volgt een stukje code waarmee het wel gaat:

<a id="terugnaarboven" href="<?php echo htmlspecialchars(sefRelToAbs($_SERVER['REQUEST_URI']))."#top"; 
?>">terug naar boven</a> 

Tip: nog niet meer tips

Ik weet niet meer tips op het moment

Zoeken

Surprise!

Voor op de achtergrond

Zie ook: