query($sql); $sitemaps = ""; while($lang = $req->fetch(PDO::FETCH_OBJ)) { $sitemaps .= "{$lang->protocol}://{$lang->domain}/sitemap.{$lang->lang}.xml".date("Y-m-d")."" . PHP_EOL; } header("Content-type: application/xml; charset=UTF-8"); echo ' ' . $sitemaps. ' '; } else {//Sitemap, per lang //Load website config $sql = "SELECT c.protocol, c.alias, c.default_lang, c.ved_api_key, c.sitemap_max_entries, c.destinations, cl.value as `domain` FROM config c INNER JOIN config_lang cl ON ( cl.key = 'domain' AND cl.lang = :lang AND cl.active = 1 ) LIMIT 1"; $req = $dbh->prepare($sql); $input = array( "lang" => $_GET["lang"] ); $req->execute($input); $config = $req->fetch(PDO::FETCH_OBJ); $langparam = ($_GET["lang"]==$config->default_lang)? "/" : "/{$_GET["lang"]}/"; $entries = 0; $limitEntries = !empty($config->sitemap_max_entries); if ($limitEntries) { $config->sitemap_max_entries = intval($config->sitemap_max_entries, 10); } $urls = ""; //get pages from freepage content $PARENT_BLOG_ID = 34; //id of /blog/ parent page, for blog posts $sql = "SELECT pl.permalink, p.parent AS pp FROM page_lang pl INNER JOIN `page` p ON ( pl.id = p.id AND p.active = 1 AND p.is_external = 0 AND p.is_virtual = 0 AND (p.destination_id IS NULL OR p.destination_id=0) AND (p.parent != {$PARENT_BLOG_ID} OR p.parent IS NULL) ) WHERE pl.lang = :lang UNION SELECT pl.permalink, p.parent AS pp FROM page_lang pl INNER JOIN `page` p ON ( pl.id = p.id AND p.active = 1 AND p.is_external = 0 AND p.is_virtual = 0 AND (p.destination_id IS NULL OR p.destination_id=0) AND p.parent = {$PARENT_BLOG_ID} AND p.published IS NOT NULL AND p.published < NOW() ) WHERE pl.lang = :lang "; $req = $dbh->prepare($sql); $req->execute($input); //input already defined up above with lang while($item = $req->fetch(PDO::FETCH_OBJ)) { if (!$limitEntries || ($limitEntries && $entries < $config->sitemap_max_entries)) { if ($item->pp == $PARENT_BLOG_ID) { $is_a_blog = "blogue/"; //Francais seulement actuellement } else { $is_a_blog = ""; } $urls .= "{$config->protocol}://{$config->domain}{$langparam}{$is_a_blog}{$item->permalink}/monthly"; ++$entries; } } //if VED affiliate, start by fetching destinations pages from external API /** * Destinations en mode standard */ if (!empty($config->alias) && $config->destinations==1) { $prefix = "destinations"; //Catégories $aShortName = array( "Sun destinations" => array("fr" =>"soleil", "en"=>"sun"), "Theme holidays" => array("fr" =>"thematique","en"=>"holidays"), "World destinations"=>array("fr" =>"monde", "en"=>"world") ); $cats = "http://extapi.voyagesendirect.com/deinfo/{$config->alias}/{$config->ved_api_key}"; $cats_json = file_get_contents($cats); $oCats = json_decode($cats_json); $aCategories = array(); foreach($oCats->dest as $cat){ if(!isset($aCategories[$cat->{"nom_".$_GET["lang"]}])){ $oCat = new stdClass(); $test = "nom_"; $oCat->name = $cat->{"nom_{$_GET["lang"]}"}; $oCat->pic = "destinations_categories/{$aShortName[$cat->nom_en]["fr"]}.jpg"; $oCat->link = $aShortName[$cat->nom_en][$_GET["lang"]]; $aCategories[$cat->{"nom_".$_GET["lang"]}] = $oCat; $catUrl ="{$config->protocol}://{$config->domain}{$langparam}{$prefix}/{$oCat->link}/"; $urls.= "{$catUrl} monthly"; foreach($cat->listing as $subdest){ $subDestUrl = $catUrl.$subdest->{"link_{$_GET["lang"]}"}."/"; $urls.="{$subDestUrl} monthly"; foreach($subdest->localities as $city){ $urls.="{$subDestUrl}".$city->{"link_{$_GET["lang"]}"}."/ monthly"; } } } } //info $info = "http://extapi.voyagesendirect.com/deinfo/".$config->alias."/".$config->ved_api_key; $info_json = file_get_contents($info); $info = json_decode($info_json); //sous-catégories //$scats = "http://extapi.voyagesendirect.com/desubcat/".$config->alias."/".$catname."/".$App->lang."/".$App->config->ved_api_key; //destinations $url = "http://extapi.voyagesendirect.com/destlist/fr/{$config->alias}/{$config->ved_api_key}"; $json = file_get_contents($url); $obj = json_decode($json); } /** * Destinations en mode full */ if(!empty($config->alias) && $config->destinations==2){ $sql = "SELECT c.permalink_{$_GET["lang"]} categorie, country.permalink_{$_GET["lang"]} pays, d.permalink_{$_GET["lang"]} dest, h.permalink hotel FROM destination_categories_assoc ca JOIN destination_categories c ON c.id = ca.category_id JOIN destination d ON ca.destination_id = d.id LEFT JOIN destination country ON d.country = country.id AND country.active =1 LEFT JOIN destinations_hotel h ON h.destination_id = d.id AND h.active =1 WHERE c.active=1 AND d.active=1 ORDER BY categorie, pays, dest, hotel "; $req = $dbh->query($sql); $cats = array(); //$prefix = "destinations"; //ramasser les préfixes par niveau $sql_px = "SELECT cl.value FROM config_lang cl WHERE cl.key LIKE '%destination_prefix%' AND lang='{$_GET["lang"]}' AND active=1 ORDER BY cl.key "; $pxlevels = array(); $sql_px = $dbh->query($sql_px); while($px = $sql_px->fetch(PDO::FETCH_OBJ)){ $pxlevels[]=$px; } if(!empty($pxlevels[2]->value)){ $pxlevels[2]->value.="-"; } while($link = $req->fetch(PDO::FETCH_OBJ)){ if(!isset($cats[$link->categorie])){ $cats[$link->categorie] = $link->categorie; $urls .= "{$config->protocol}://{$config->domain}{$langparam}{$link->categorie}/ monthly"; } $durl= "{$config->protocol}://{$config->domain}{$langparam}{$link->categorie}/"; //si la destination n'a pas de pays, c'est qu'elle est elle-même un pays if(is_null($link->pays)){ $durl.="{$pxlevels[0]->value}-{$link->dest}/"; } else { $durl.="{$pxlevels[0]->value}-{$link->pays}/"; } //si on a un pays et une destination, il s'agit d'une ville if(!is_null($link->pays) && !is_null($link->dest)){ $durl.="{$pxlevels[1]->value}-{$link->dest}/"; } if(!is_null($link->hotel)){ if(!empty($pxlevels[2]->value)){ $durl.="{$pxlevels[2]->value}-"; } $durl.="{$link->hotel}/"; } $durl.="monthly"; $urls.=$durl; } } header("Content-type: application/xml; charset=UTF-8"); echo '' . $urls . ''; return true; }