Faq
Gebruik van 404 caching voor afbeeldingen.

Vrijwel alle affiliate productfeeds zijn voorzien van afbeeldingen. De afbeeldingen staan meestal op de server van de webwinkel, in enkele gevallen op de server van het affiliatenetwerk. Het kan aantrekkelijk zijn de afbeeldingen zelf te hosten i.p.v. ze vanaf andere servers te gebruiken:

  1. veel afbeeldingen van verschillende servers kan een trigger voor google zijn: affiliatesite !!!
  2. de afbeeldingen zijn soms erg groot hetgeen in trage pagina’s resulteert.
  3. je kunt de afbeeldingen van een eigen cookie-loos domein aanbieden ( is een advies van google page-speed)

Nu kun je de afbeeldingen allemaal gaan ophalen op het moment dat je de datafeed inleest, de eigenaar van de server zal je dat echter niet in dank afnemen. een interessante optie is het om de plaatjes op te halen als ze nodig zijn en dan locaal op te slaan. Dit mechanisme gebruikt dezelfde truck als ‘404 caching’

Note: er zijn wat problemen in dit artikel met de voorbeelden, joomla knipt nogal wat html code weg. Het kan zijn dat het verhaal daardoor nog iets onbegrijpbaarder is.

De database.

in de database staan 1 of meer tabellen voor de informatie over de items in de feed in opgeslagen staan. Van belang is de tabel met het veld van de afbeelding voorbeeld:

ID,img_url,titel,omschrijving,etc etc

bij gewoon gebruik van de afbeelding plaats je iets als

<img src="/$img_url" border="0" alt="" />

in je code. om over te stappen op eigen afbeeldingen maak je hier van:

<img src="http:/images.example.com/$ID" border="0" alt="" />

volgende stap is het '404' gedeelte, dit kan op apache server m.b.v. .htaccess en een error document. Onderstaande voorbeeld gebruikt de rewrite engine:

Rewriteengine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule (.*) index.php


de eerste keer dat een afbeelding opgevraagd wordt bestaat deze nog niet en komt 'index.php' in aktie, de volgede keren staat de afbeelding in de 'cache' en gebruikt de webserver deze. Rest nog invulling te geven aan de index.php die de afbeelding ophaalt en bewerkt:

$db_host= “jouw host”;
$db_user= “jouw db user”;
$db_password=“jouw db password”;
$db_database=“jouw db”;
$db_table= “jouw tabel”;

if (!($_resource = mysql_connect( $db_host, $db_user, $db_password, true ))) {
$_errorNum = 2;
$_errorMsg = 'Could not connect to MySQL';
print $_errorMsg;
exit;
}
mysql_select_db( $db_database, $_resource );
$img=(int)$_SERVER['REQUEST_URI']; # int tegen injection
$feed_q="select img from $db_table where id = $img limit 1";
$_feeds=mysql_query($feed_q,$_resource);
@$p=mysql_result($_feeds,0);
if ( ! $p ) {
$p="noimage.jpg";
}
createthumb($p,$img,150,150);

#haalt de afbeelding op ( $name ) maakt er een standaard formaat van
#plaats de afbeelding in de directory en stuurt deze als response
function createthumb($name,$filename,$new_w,$new_h)
{
$src_img=false;
$name=str_replace(array('[',']',' '),array('%5B','%5D','%20'),$name);
$src_img=imagecreatefromstring(file_get_contents($name));
if ( ! $src_img ) {
if (preg_match("/(jpg|jpeg)$/i",$name)){
$src_img=imagecreatefromjpeg($name);
}
if (preg_match("/gif$/i",$name)){
$src_img=imagecreatefromgif($name);
}
if (preg_match("/png$/i",$name)){
$src_img=imagecreatefrompng($name);
}
}
if ( ! $src_img ) {
error_log("No IMAGE $name");
$src_img=imagecreatefromjpeg('noimage.jpg');
}
$old_x=imageSX($src_img);
$old_y=imageSY($src_img);
if ($old_x > $old_y)
{
$thumb_w=$new_w;
$thumb_h=$old_y*($new_h/$old_x);
}
if ($old_x < $old_y)
{
$thumb_w=$old_x*($new_w/$old_y);
$thumb_h=$new_h;
}
if ($old_x == $old_y)
{
$thumb_w=$new_w;
$thumb_h=$new_h;
}
$d_h=$thumb_h > 200?200:$thumb_h;
$dst_img=ImageCreateTrueColor($thumb_w,$d_h);
imagecopyresampled($dst_img,$src_img,0,0,0,0,$thumb_w,$thumb_h,$old_x,$old_y);
imagejpeg($dst_img,$filename);
header("Content-type: image/jpg");
imagejpeg($dst_img);
imagedestroy($dst_img);
imagedestroy($src_img);
}



Dit is een basic script, als je veel afbeeldingen hebt is het verstandig met sub-mappen te werken; het script lost het probleem van niet bestaande afbeeldingen slechts deels op. Het script zal gewijzigde afbeeldingen niet oppikken; sommige feeds gebruiken dezelfde afbeelding verschillende keren, je zou kunnen overwegen een hash van de image url te gebruiken:

<img src="http:/images.example.com/crc32($img_url)" border="0" alt="" />

en de query om de afbeelding uit de database te halen ook aan te passen. Dit lost ook het probleem op als een product een andere img url krijgt

 
M4N feed van feeds

M4N heeft een feed van feeds in beta, de component ook (svn:956).

een uitgebreide handleiding is te vonden op de blog van M4N

Je hebt de volgende gegevens nodig:

Email/login De login/email zoals je die bij M4N gebruikt
Wachtwoord Het wachtwoord zoals je die bij M4N gebruikt
Hash Dit is de korte code achter dhid= zoals die in feed url's staat
M4N id Je M4N affiliate id staat achter duid= in feed url's

 

http://www.M4N.nl/_df/stream-13152-M4N ID.csv?duid=M4N ID&dhid=Hash&dfid=1

als je al een actieve feed in je systeem hebt worden de hash  ( niet bij oudere feed url formaten) en de id automatisch opgehaald, anders moet je eenmalig bij M4N een feed selecteren en de gegevens overnemen.

 

Je kunt de gegevens opslaan in de voorkeuren, anders moet je ze per sessie een keer opgeven.

Ook de feeds worden opgeslagen voor duur van een sessie, wil je ze opnieuw ophalen binnen een sessie gebruik dan purge.

Selecteer een of meerdere feeds, klik copier en daarna ( per feed) 'Apply' om de velden op te halen. Er worden standaard CSV tabbed feeds opgehaald.

 

 

 

 
Selecties filteren en weergeven

Er zijn scenarios denkbaar waar je slechts een deel van het aanbod uit een feed wilt gebruiken, bijvoorbeeld omdat je een site specifiek gericht hebt op een onderwerp. In dit forum bericht staat een korte beschrijving van een mogelijk filter. Dit artikel beschrijft het wat uitgebreider. Globaal zijn er twee mogelijklheden

  1. Door middel van een callback functie items die je niet wilt opnemen wegfilteren.
  2. Alles importeren en het menu gebruiken als filter

Hieronder een beschrijving van de methodes aan de hand van voorbeelden.

Algemene configuratie van de feed en menu

Stel we hebben een site over 'wijn' en willen daarbij een lijst met  boeken over  wijn  weergeven.

Allereerst met er een leverancier met een geschikte feed gevonden worden. Daisycon bijvoorbeeld heeft boek.net en bruna met datafeeds in het programma zitten. De feed van boek.net is megagroot bevat veel niet gerelateerde producten en bovenal bevat geen rubricering, we kunnen dus niet bepalen welke boeken in de rubriek 'wijn' thuishoren.

De feed van bruna is hanteerbaarder in heeft ook een rubricering waar we wellicht iets me kunnen. Bij de invoer van de feed is het ivm de performance verstandig het csv formaat te kiezen. In de ruwe data zien we dat het veld category gevuld is met termen als 'boek' en 'ebook' geen nuttige info voor onze filter akties. De sub_category bevat echter wel termijn die nuttig zijn. In de field selectie nemen we dan ook de sub_category als 'Select 1', voor 'Select 0' is dan Boeken een voor de hand liggende keuze.

Met een import wordt nu de complete datafeed  ingeladen.

Maak een nieuw menu item aan om de boeken weer te geven. Voer bij 'Main Selection' het Select 0 in met als parameter Boeken

Het menu zal nu alle boeken uit de database weergeven. Als je het menu op de front end bekijkt zie je een enorm lange lijst, dit komt deels doordat er veel rubrieken 'Engelstalig' zijn, m.b.v. van de callback functie die we toch gaan maken kunnen we de Engelse boeken een niveau lager zetten (zie script aan einde van de pagina).

Na een nieuwe import is de lijst korten en zien we er een rubriek 'Wijn en Dranken' is. Dit zijn de boeken waar we in geïnteresseerd zijn. Om het wat fraaier te maken herschrijven we de naam naar Wijn in de callback functie. De indeling bij Bruna is niet fijner dan 'Wijn en dranken'. Het is dus niet goed mogelijk alleen de wijn boeken eruit te filteren. Wel zou je in de titel kunnen gaan zoeken naar termen die niets met wijn te maken hebben zoals Wiskey.

Filteren in het menu

Zoals beschreven in de inleiding kunnen we nu verschillende kanten op:filteren van de items bij de import d.m.v. een callback  filteren met het menu.

Eerst het tweede geval, filteren met het menu. Onder het Advenced tab is een tweede filter. Hier kunnen we dan filteren op Select1 met als keuze Wijn ( als er alleen datafeeds met boeken zijn kun je ook het eerste filter op boeken laten vervallen en daar Select1 -> Wijn van maken)

Het idee van bovenstaande opzet is dat je twee menu's aanmaakt, eentje met de wijn boeken, en daaronder een menu met alle boeken, je bent toch al bezig met importeren en dan zou je kunnen overwegen die items ook maar te laten zien.

de boeken demo site demonstreert dit (in een andere volgorde), hoofdmenu is 'boeken' submenu is wijn. Daarbij zit ook nog een sub-menu naar het bier. Dit is een deeplink binnen het boeken menu. Dat is de derde mogelijkheid om te selecteren: maak een menu item aan op een onopvallende plek ( of in een onzichtbaar menu) en maak dan in het hoofdmenu een deeplink-menuitem ( externe link) aan.

Filteren bij de import

In het geval dat je de overige boeken helemaal niet wilt importeren kun je ze ook volledige weg filteren door in de callback functie het item te wissen.

de callback functie bruna2_cb verzorgt dit. Dit script filtert alle boeken uit de rubrieken met de term wijn of bier. Daarnaast kijkt het in de titel van de boeken naar bekende drank termen of zelf subrubrieken te maken.

drank boeken demo

 

Meer feeds

als je nog andere (boeken) feeds gaat toevoegen kun je stukken van de callback gaan hergebruiken. voorbeeld hiervan is het stukje 'hernoem_drank in onderstaand voorbeeld.

 

 

 

 

 


 

 
Integratie met andere CMS systemen

 

De joomla component beschreven op deze site bied een komplete oplossing voor het integreren van affilaite feeds met een joomla site. Het gaat hier om functionaliteit aan de achterkant: beheer van de feeds en de automatische import en de voorkant weergave van de geimporteerde data.

Een komplete oplossing als voor joomla voor andere CMS systemen wordt hier niet geboden. Ze zijn er wel. Onderaan de pagina staan een aantal voorbeelden. Onderstaand een aantal oplossingen om deze parser te gebruiken met andere CMS systemen.

Importeren van RSS feeds.

Alle grote CMS systemen beschikken over een extensie ( module, plugin ) die het mogelijk maakt RSS feeds te importeren als content. Gebaseerd op de parser die ook voor de joomla extensie gebruikt wordt is er een standalone datafeeds naar RSS converter. Hier is geen admin panel bij, de feeds worden geconfigureerd in php of xml bestanden. De uitleg op deze site m.b.t. configuratie en callback functies geldt ook voor de stand alone versie. Als je wel een admin wilt, kun je een joomla site neerzetten, in de feed configuratie kun je de instellingen van een feed exporten als xml, die je weer voor de datafeeds2rss tool kunt gebruiken

RSS Importers

 

Tonen van RSS feeds

Een andere optie is het weergeven van RSS feeds naast (bestaande) content. Stel je hebt een (bestaande) website met veel content waar je advertenties op basis van affiliatefeeds aan wilt toevoegen. Hiervoor bouw je naast je bestaande site een nieuwe (joomla) website die gebruikt gaat worden als leverancier van rss feeds. Voor alle grote CMS systemen is er wel een extensie om RSS feeds te tonen. In tegenstelling tot de vorige oplossing importeer je hier de data niet in het CMS van je hoofd website maar toon je slechts een deel van de affiliate site.

Een voorbeeld hiervan is te vinden op deze demo-site op basis van mediawiki: Op de pagina over boormachines is een feed van deze huis en tuin site toegevoegd. bij de rss feeds van com_datafeeds kun je een query meegeven

Het mooiste is dan een RSS module die feedds laat zien op basis van de tags op de pagina.

Importeren als content

Als je de datafeeds als echte content importeert in je CMS (als content,article, post, page,node etc) zijn er geen beperkingen in het gebruik van de gemaakt pagina, de pagina is immers een standaard onderdeel van je CMS en je kunt er alle extensies op los laten.

Er zijn wel wat potentiele problemen: CMS systemen zijn er niet op ingericht om duizenden artikelen met bijbehorende tags ( categorien, taxanomie rubrieken etc) te beheren, al ze het al kunnen joomla kent bijvoorbeeld alleen een eenvoudige rubricering.  Wordpress bijvoorbeeld is prima in staat om duizenden artikelen te beheren, maar de admin loopt hopeloos vast als je te wild gaat met de rubrieken en tags voor de artikelen. Een landen site met landen-regio's- steden heeft duizenden tags en dat gaat fout.

Voor kleine feeds kan het een oplossing zijn, de parser die bij de joomla component hoort is ook voorzien in het toevoegen van extra/andere import functie. Ook is het datafeeds2rss te verbouwen. Bij de eerste verloopt de import dan via een joomla site, bij de tweede is het een zelfstandige toepassing.

Er is een experimentele versie van een wordpress importer. Deze gaat in de komende tijd uitgewerkt worden en kan dan hier gedownload worden: vakantiehuizen demo, dagaanbiedingen demo

PHP includen

Een andere mogelijkheid is het importen van de data ( via joomla of standalone) en daarna een eigen stukje php code te includen in je content of in een sidebar widget. Bijvoorbeeld een widget die producten laat zijn op basis van tags in de artikelen.

Andere systemen

standalone

wordpress

Veel CSV import tools, als iemand ervaring ermee heeft hoor ik het graag.

 
Emails bij a4y transacties

M4N en Tradetracker bieden de mogelijkheid om email te ontvangen bij een (gekeurde) transactie. Beide niet perfect,  M4N laat niet weten als een sale of lead is afgekeurd, Tradetracker laat helemaal niet weten of en wanneer een transactie door de keuring is.

affiliate4you heeft helemaal geen berichtgeving, wel is in het leads/sales overzicht een download beschikbaar met alle leads en sales. Met curl is het mogelijk deze automatisch op te halen en mails te genereren.

 
Show single menu levels

The 'normal' mod_datemenu menus show a hierarchical structure of categories based on the settings of he component joomla menu

This layout shows just a single level, for example just 'menu level 3'. This layout can be usefull to show the list of feeds/merchants (See 'AANBIEDERS REIZEN'). Or a list of gender (voor wie)

 
Callback voorbeeld regio's

Een veel voorkomend probleem in feeds zijn de verschillende schrijfwijzen, bijvoorbeeld in reizen en vakantie feeds worden landen en regio's op verschillende wijzen geschreven.  Neem bijvoorbeeld

 

'Vierwaldstaettersee' versus 'Vierwoudstedenmeer' of 'Saasdal' en 'Saasdal Noord'

 

Bovenstaande zijn twee voorbeelden van veel voorkomende problemen in de vakantie feeds, verschillende schrijfwijzen voor hetzelfde, of varianten van regio's. zoals twee regio's die elkaar overlapen en die je wellicht toch als 1 wilt presenteren. Onderstaande script geeft een illustratie hoe deze twee problemen op te lossen zijn.

 
Referentie tracking

In versie 0.9 is de referentie tracking die in eerdere versies beperkt aan.ezig was uitgebouwt.  Voor een klik wordt een string meegegeven die tot de betreffende pagina te herleiden is.

 

De standaard refentie om aan een feed mee te geven is 'DF-REF' deze wordt door de component vervangen door een referentie met het volgede formaat:

 

 
'eenvoudige' feeds

De ene feed is eenvoudiger te gebruiken dan de ander. Naast technische problemen zoals verkeerde coderingen kan hem dat ook zitten in bijvoorbeeld het gebruik van bijzondere indelingen van de categorieen.

 

Onderstaande een lijst met selectie van feeds die eigenlijk zonder problemen te gebruiken zijn. Soms geeft de feed bij de ene aanbieder wel problemen maar bij een ander niet. Kwestie van proberen. Vrijwel alle feeds ook de eenvoudige hebben een soort van verwerking nodig, ook een feed die op zich prima is gaat op bijvoorbeeld fashionsales door een rename script heen, om ervoor te zorgen dat schrijfwijzen van producten en rubrieken identiek zijn ( dames, woman, women, ladies). (en ja op die site is het ook niet perfect...)

 
Toevoegen feeds - flat file parser

De xml parser kan gebruikt worden zonder database, de gegevens worden dan per feed als bestand opgeslagen. Weergave is dan mogelijk per feed. ( demo )

 

Het toevoegen van feeds is dan handmatig puzzelwerk. onderstaand een tutorial aan de hand van de 2call feed van daisycon

 

 
Error 500 met SEF url's

Bij gebruik van SEF url's Dus als je gebruik maakt van het .htaccess bestand ( htaccess.txt in de joomla download) kun je een error 500 voor de kiezen krijgen.

Het kan zijn dat je hoster geen rewrite ondersteund, of dat de hoster geen options toestaat, Als het eerste niet mag kun je de sef url's niet gebruiken i.c.m. mod_rewrite. De options parameter kun je redelijk veilig weghalen uit de htaccess

 
Joomla Webhosting

In principe is elke host die mysql/php ondersteund geschikt om een joomla site met datafeeds te hosten. Vrijwel elke hoster die zijn systemen een beetje onderhoud voldoet aan de systeem eisen. De datafeeds component wijkt in zovere af van 'gewoon' joomla dat uitgaande http verbindingen van belang zijn. Problemen kunnen ontstaan door de libxml bug of door een combinatie van veiligheidsinstellingen ( allow_url_fopen, safe mode, base dir restrictions). Dit zijn gegevens die je pas ontdekt als je joomla draaiende hebt.

Hoeveelheid ruimte

Joomla zelf neemt een megabyte of 40 in beslag.  de omvang van de database is afhankelijk van de hoeveelheid content en feed-items. per 1000 items ben je ongeveer een megabyte aan database ruimte kwijt.

Transip.nl

Transip.nl bied een starters pakket aan voor minder dan een euro per maand, met domein naam ben je dan 20-30 euro kwijt voor een jaar. Het starterspakket heeft 250 Mbytes aan ruimte. Voldoende voor een site met 200.000 items.

Transip is prima voor joomla hosting inclusief mod_rewrite SEF url's ( wel de Options weghalen uit de .htaccess

Bij het installeren van extra's (componten/modules/plugins/templates) en de configuratie kom je in de problemen met rechten. dit is niet specifiek een probleem van de transip server. Het is op te lossen door tijdens de installatie de ftp layer aan te zetten en de ftp gegevens in te vullen.

De site Tuin en Dier draait met circa 35.000 items op een transip Transip.

 

Gratis Hosting byet

 

byethost bied gratis hosting aan met voldoende ruimte en mogelijkheden om joomla en de datafeeds compoment uit te proberen.

Ga naar de site byet en registreer je voor een gratis pakket. Gebruik als 'username' de naam van het subdomein dat je wilt hebben.

Na de registratie kun je inloggen op hun cpanel, maak hier een database aan. De cpanel biedt de mogelijkheid om joomla te installeren, controlleer echter dat dit de laatste versie is. Download anders de engels of nederlandse joomla versie en upload deze via ftp.

als je de datafeeds component installeerd zonder dat de nederlandse taalbestanden van de joomla core aanwezig zijn zal de nederlandse versie van de component niet geinstalleerd worden. Installeer dan de nederlandse taalbestanden en aansluitend de component opnieuw.

 

Installeer joomla, de database host is niet localhost, kijk in de cpanel (links ) wat de host name is. Het installeren van extensies werkt zonder ftp-layer, die stap kun je overslaan.

 

Daarna de component installeren via het extensions menu, data downloaden en klaar.

 

byethost demo

 

 

 

 

 

 
<< Start < Vorige 1 2 3 Volgende > Einde >>

Pagina 1 van 3