Hoe krijg ik menu's items gelijk

Verschillende feeds gebruiken verschillende schrijfwijzen voor items 'Belgie' versus 'België' en 'LCD TV' versus 'LCD Televisie'. Het eerste probleem ( e versus ë) wordt in principe door de zogeheten collation van de database opgelost, maar het is toch netter het gelijk te trekken anders is er kans dat Belgie in plaats van België in de menu's komt. Andere problemen kunnen worden opgelost via een callback functie.  Een voorbeeld voor het aanpassen van landen:

 

<?
#Opletten bestand moet in ISO-8859-1 niet UTF-8
global $country2country# lang verhaal kort : ja dit is nodig
$country2country=array(
     
'Italie' => 'Italië',
     
'Tsjechische Republiek' => 'Tsjechië',
     
'Duitsland Polen' =>'Duitsland,Polen',
     
'Andalusie' =>'Andalusië',
     
'Vae' =>'Verenigde Arabische Emiraten',
     
'Emiraten' =>'Verenigde Arabische Emiraten',
     
'Australie' =>'Australië',
     
'Ethiopie' =>'Ethiopië',
     
'Namibi' =>'Namibië',
     
'Namibie' =>'Namibië',
     
'Itali' =>'Italië',
     
'Uganda' =>'Oeganda',
     
'Birma' =>'Myanmar',
     
'Belgi' =>'België',
     
'Belg' =>'België',
     
'Belgie' =>'België',
     
'Belgium' =>'België',
     
'Madagascar' => 'Madagaskar',
     
'Trinidad' => 'Trinidad en Tobago',
     
'Dubai & Emiraten' => 'Dubai',
     
'Groot brittanië' => 'Groot Brittannië',
     
'Dominicaanse Republ' => 'Dominicaanse Republiek',

);


function 
country2country($land) {
    global 
$country2country;
    
$land=preg_replace("/^[^a-zA-Z]*/","",$land);
    
# pas op met php 4. Hier mb_strtolower enzo gebruiken
    
$land=ucwords(strtolower(str_replace(array('-','.'),array(' ',''),
           $land
)));
    
$a=split(",",$land);
    foreach (
$a as $land ) {
        
$l=trim($land);
        
$m=$country2country[trim($l)];
        
$b[]=$m?$m:$l;
    }
   
$cjoin(",",$b);
return 
$c;
}

function 
voorbeeld_cb (&$item) {
generic_cb ($item);
$item['menu_1']=country2country($item['menu_1']);
}

 

Probleem bij bovengenoemde methode is dat de namen exact moeten matchen. Een alternatief is via regex:

<?
function kleding (&$item) {
$rename=array(
'Accesso.*' => 'Accessoires',
'BH'=>'Behas',
'kids'=>'Kinderen',
'Youth'=>'Kinderen',
'Women'=>'Dames',
'Men'=>'Heren',
'kinderkleding'=>'Kinderen',
'ondergoed'=>'Lingerie',
'T shirt'=>'T shirts',

);

      foreach (
$rename as $k => $v) {
           
$item['menu_1']=preg_replace("/$k/i",$v,$item['menu_1']);
           
$item['menu_2']=preg_replace("/$k/i",$v,$item['menu_2']);
    }
}


# onderstaande code staat al in de voorbeeld feeds.php 
/*
function kleding_cb(&$item) {
generic_cb($item);
kleding($item);
}
*/

 

Plaats reactie


Beveiligingscode
Vernieuwen

Doneer

Donate $10, $20 or $50! This plugin has cost me countless hours of work, if you use it, please donate a token of your appreciation!