zondag, 15 september 2013 11:48

E-mail notificatie K2 Joomla blog op reactie

Geschreven door
Beoordeel dit item
(0 stemmen)

Sinds kort maak ik gebruik van de K2 extentie voor Joomla. K2 is vooral handig voor het maken van een blog op je website. Een blog maakt het mogelijk om (korte) artikelen te publiceren en ruimte te bieden aan lezers om reacties achter te laten. Daar ik niet fulltime mijn site bekijk is het handig als ik een e-mail ontvang als er een nieuwe reactie geplaatst wordt. Helaas voorziet K2 hier niet standaard in. Wat googlen leert dat er wel enkele betaalde extenties zijn voor K2 die dit kunnen ondervangen. Echter als echte Nederlander ga ik niet teveel betalen voor een simpele functionaliteit die je ook makkelijk zelf kan implementeren.

Een zoektocht op internet bracht me eerst op deze site. Het doorvoeren van deze wijzigingen leverde in mijn geval echter geen e-mails op. De reden hiervoor is dat 'joomla hack' uitgaat van het feit dat reacties voorafgaande aan publicatie dienen te worden goedgekeurd. Ik ga bij mijn site uit van controle achteraf. Dus mensen mogen reacties plaatsen. Als er spam of opmerkingen bij zitten die het daglicht niet kunnen verdragen dan haal ik die achteraf van mijn site. 

Dus hoe moeten we er dan wel voor zorgen dat er een e-mail notificatie komt als iemand op je K2 Blog een reactie heeft achtergelaten? Hiervoor moeten we een stukje PHP code gaan toevoegen aan het item.php bestand wat onderdeel is van de K2 installatie.

Het item.php bestand vindt je onder het mapje 'components' in je Joomla installatie. Vervolgens ga je daar naar het mapje 'com_k2' en vervolgens naar het mapje 'models'. Ofwel in het kort: /components/com_k2/models/item.php.

In het item.php bestand (bewerken met teksteditor of php editor) zoek je naar ' function comment()'. Vervolgens scroll je langzaam naar beneden totdat je een regel tegenkomt met de tekst 'K2_COMMENT_ADDED_REFRESHING_PAGE'. Voor deze regel plaats je de volgende regels code:

 

$mainframe = &JFactory::getApplication();
$mail = &JFactory::getMailer();
$senderEmail = $mainframe->getCfg('mailfrom');
$senderName = $mainframe->getCfg('fromname');

$mail->setSender(array($senderEmail, $senderName));
$mail->setSubject('K2 Blog commentaar ontvangen');
$mail->IsHTML(true);
$body = " <strong>".JText::_('K2_NAME')."</strong>: ".nl2br($row->userName)." <br/> <strong> E-mail: </strong>: ".nl2br($row->commentEmail)." <br/> <strong>".JText::_('K2_COMMENT')."</strong>: ".nl2br($row->commentText)." <br/> "; $mail->setBody($body);
$mail->ClearAddresses();
$mail->AddAddress($params->get('commentsReportRecipient',
$mainframe->getCfg('mailfrom')));
$mail->Send();


      

Na het doorvoeren van deze aanvulling en het opslaan van item.php (en het eventueel opnieuw uploaden van dit bestand) zouden er na iedere geplaatste reactie een e-mail verzonden moeten worden naar het mail adres van de administrator.

Ik merk wel op dat bij iedere update van het K2 component bovenstaande handeling opnieuw uitgevoerd moet worden omdat dan waarschijnlijk er weer een nieuwe versie van item.php is.

 

Nog een korte uitleg van de bovenstaande code:

- Met '&JFactory::getmailer()' wordt de Joomla standaard email component aangeroepen.

- $senderEmail, $senderName halen e-mailadres en naam(site) op uit het Joomla configuratiebestand.

- Met $mail, $body wordt gecommuniceerd met Joomla mailer. In dit geval wordt de mail door de administrator verzonden naar hem-/haar-zelf.

- $body bevat de daadwerkelijke inhoud van de het de e-mail. $row wordt door K2 gebruikt om te communiceren met de database. Hieruit vissen we de door de reageerder ingevulde mailadres en naam.

- JText is een Joomla vertaalfunctie.

 

 

Lees 46521 keer Laatst aangepast op zondag, 05 januari 2014 17:08
Coen Martinus

site eigenaar :-)

Meer in deze categorie: Niet werkende debugger VB.net »

3 reacties

  • Reactielink Hans Verweij woensdag, 06 november 2013 12:13 Geplaatst door Hans Verweij

    Thx Coen, ik ben als amateur php-er:) weer wat verder. Moet nog verder knutselen aangezien er een notificatie moet naar de schrijver van het Blog en dit kan telkens een andere vaste blogger zijn. Ik moet dus op één of andere manier de schrijver van het blog ophalen om in te laten vullen als $user. Mocht ik er echt niet uitkomen maak ik graag nog eens gebruik van je expertise.

  • Reactielink Coen zondag, 03 november 2013 15:16 Geplaatst door Coen

    Beste Hans,

    Dat zou mijn inziens zeker moeten kunnen. Zie ook deze link: http://docs.joomla.org/Sending_email_from_extensions

    $recipient = $user->email;
    $mailer->addRecipient($recipient);

    De variabele $user zou dan de variabele moeten worden waar het e-mail adres van de blogger in staat.

  • Reactielink Hans Verweij zondag, 03 november 2013 13:16 Geplaatst door Hans Verweij

    Beste Coen,

    Dit is super stap 1, nu heb ik een blogplatform met meerdere bloggers. Is de code ook zo aan te passen dat de notificatie van het blog gelijk door gemaild wordt aan de desbetreffende blogger?

Laat een reactie achter

Zorg ervoor dat u de verplichte (*) velden invult waar dit is aangegeven. HTML code is niet toegestaan.