Wil je de Contactpersonen van verschillende Categorieën in 1 pagina tonen en toch een onderscheid maken per Categorie? Dat is moeilijk te doen in Joomla met zijn klassieke benadering van items & categorieën. Er zijn wel contact-extensies die mooie pagina's opleveren maar indien het geen fancy presentatie moet zijn, en bovendien nog zonder foto's, dan wordt het zoeken en ... vinden.

De site-eigenaar wenste een overzicht van alle beheerders en medewerkers van de vereniging op 1 pagina. Maar beheerders en medewerkers waren opgedeeld in aparte categorieën in de Joomla-component Contact-personen. Maar hoe kan je in Joomla verschillende categorieën tonen met op diezelfde pagina ook hun onderliggende items, dus zonder een extra klik om naar een lijst-pagina te gaan?

Deze oplossing kwam er pas na een andere vraag van de site-eigenaar. Er was namelijk nood aan een overzichtslijst van alle artikelen met hun tags en hun meta-trefwoorden. Hiervoor werd gekozen voor de gratis extensie Ari Table Lite Edition

Omdat die lijst enkel voor de schrijversploeg (en hoger gemachtigden) zichtbaar moest zijn, werd de lijst ook uitgebreid met de mogelijkheid om direct het geselecteerde item te editeren. Dit laatste vraagt welke extra codering in de query maar het verhoogt het gebruiksgemak voor de gebruikers.

Het resultaat zie je hieronder. Klikken op het artikel-ID zou de editor openen en klikken op de titel zou het artikel tonen op de site.

Lijst Artikel met hun Tags en MetaTrefwoorden

De desbetreffende query:

 select c.title Categorie
, concat('<a href=http://www.uwdomein.be/index.php/component/content/?option=com_content&view=form&layout=edit&a_id=' , a.id , '  target="_blank">', a.id, '</a>') ID
,concat('<a href=http://www.uwdomein.be/index.php?option=com_content&view=article&id=' , a.id , ':', a.alias,  '&layout=edit target="_blank">', a.title, '</a>') Artikel_titel
, a.metakey Trefwoord
, tags.art_tags
, date_format(a.created, '%Y-%m-%d') creatie  
from jos_content  a
inner join jos_categories c on a.catid = c.id
left outer join  
(select m.content_item_id art_id ,group_concat(t.title order by t.title separator ' | ')  art_tags
 from jos_contentitem_tag_map m  left outer join jos_tags t on t.id = m.tag_id
 group by m.content_item_id order by m.content_item_id
 ) tags on a.id = tags.art_id
where a.state > 0
and c.id not in ( 44, 47, 60)   -- categories "unieke paginas", "WebSites"
order by a.id desc

Hoe komen we dan aan een query die Contactpersonen van verschillende Categoriën toont terwijl er toch een onderscheid tussen de Categoriën gemaakt moet worden?
Je zou in de query de Categorie meenemen met een "order by" maar men wil de Categorie-titel niet op elke lijn willen herhalen.
De oplossing werd gevonden in aparte queries te schrijven voor elke categorie en die dan op dezelfde pagina op te roepen. Het onderscheid per Categorie kan dan op de pagina duidelijk gemaakt worden door middel van die tabs, slider, of andere elementen. Een voorbeeld met tabs zie je hieronder.

 Lijst ContactPersonen op 1 pagina

Bemerk dat je in de gratis versie de lijst geordend kan worden per kolom.

Bij de betalende versie zijn er meervoudige presentatie mogelijkheden en kan je Google-kaarten, afbeeldingen, links, in je query gebruiken terwijl het mogelijk is om in de front-end zoek-parameters voor je query mee te geven.

Hieronder de query voor dergelijke lijst:

select concat('', p.name, '') as Naam
, p.con_position as Functie, concat( p.postcode,' ', p.suburb ) as Woonplaats
from jos_contact_details p
where p.catid = 18 -- de categorie voor deze tab
and p.published = 1 -- toon enkel diegene die op huidige datum als gepubliceerd staan
and (p.publish_up = '0000-00-00 00:00:00' OR p.publish_up <= now() )
and (p.publish_down = '0000-00-00 00:00:00' OR p.publish_down >= now() )
order by p.sortname1 asc ,p.id asc

Ari Table komt met eigen CSS-klassen, in het voorbeeld hierboven werden ook volgende de Bootstrap tabel-klassen toegepast: "table-striped table-hover".

De backend van Ari Table module is doeltreffend simpel:

Modulebeheer Ari Table Light

Nog enkele queries om in schoonheid te eindigen.

Voor de administrator een overzichtslijst van Contact-personen en hun coordinaten (met een link om het item te editeren):

select c.title Categorie
, concat('<a href=http://www.uwdomein.be/administrator/index.php?option=com_contact target="_blank">', p.id, '</a>') ID
, concat('<a href=http://www.uwdomein.be/index.php/component/?option=com_contact&view=contact&layout=edit&id=', p.id , '  target="_blank">', p.name, '</a>') Naam
  ,p.address  Adres
  , concat( p.postcode,' ', p.suburb ) as Woonplaats
  , p.telephone as Tel, p.mobile as GSM, p.email_to as 'E-mail'
from  jos_contact_details p
left outer join jos_categories c on p.catid = c.id
order by c.title, p.name

Voor de administrator een overzichtslijst van Contact-personen en extra informatie zoals meta-trefwoorden, sorteervelden, "Overige gegevens" :

select c.title Categorie
, concat('<a href=http://www.uwdomein.be/administrator/index.php?option=com_contact target="_blank">', p.id, '</a>') ID
, concat('<a href=http://www.uwdomein.be/index.php/component/?option=com_contact&view=contact&layout=edit&id=', p.id , '  target="_blank">', p.name, '</a>') Naam
  , p.metakey MetaTrefwoord, p.sortname2 Sorteer2, p.sortname3 Sorteer3, fn_StripHTML(misc) extra_info
from  jos_contact_details p
left outer join jos_categories c on p.catid = c.id
order by c.title, p.name

 (In de 2 voorgaande queries ontbreken de criteria van publicatie-datum)


Auteur: Manu Ampe