From 8fbb48ba2ca11184fbf6f6ac62193a186a034aff Mon Sep 17 00:00:00 2001 From: mDeflotte Date: Wed, 7 Mar 2012 08:52:30 +0000 Subject: [PATCH] [-] MO : #PSFV-605 - Fix problem with gsitemap and multishop --- modules/gsitemap/gsitemap.php | 173 ++++++++++++++++----------- modules/gsitemap/translations/fr.php | 1 + 2 files changed, 105 insertions(+), 69 deletions(-) diff --git a/modules/gsitemap/gsitemap.php b/modules/gsitemap/gsitemap.php index 7151fab7f..b342fab96 100644 --- a/modules/gsitemap/gsitemap.php +++ b/modules/gsitemap/gsitemap.php @@ -84,64 +84,65 @@ class Gsitemap extends Module else $res = $this->generateSitemap(Configuration::get('PS_SHOP_DEFAULT'), GSITEMAP_FILE); - $this->_html .= '

'; - $this->_html .= $res ? $this->l('Sitemap file generated') : $this->l('Error while creating sitemap file'); - $this->_html .= '

'; - } + $this->_html .= '

'; + $this->_html .= $res ? $this->l('Sitemap file generated') : $this->l('Error while creating sitemap file'); + $this->_html .= '

'; + } - /** - * Generate sitemap index to reference the sitemap of each shop - * - * @return bool - */ - private function generateSitemapIndex() - { - $xmlString = << XML; - $xml = new SimpleXMLElement($xmlString); + $xml = new SimpleXMLElement($xmlString); - $sql = 'SELECT s.id_shop, su.domain, su.domain_ssl, CONCAT(su.physical_uri, su.virtual_uri) as uri - FROM '._DB_PREFIX_.'shop s - INNER JOIN '._DB_PREFIX_.'shop_url su ON s.id_shop = su.id_shop AND su.main = 1 - WHERE s.active = 1 - AND s.deleted = 0 - AND su.active = 1'; - if (!$result = Db::getInstance()->executeS($sql)) - return false; - - $res = true; - foreach ($result as $row) - { - $info = pathinfo(GSITEMAP_FILE); - $filename = $info['filename'].'-'.$row['id_shop'].'.'.$info['extension']; - $replaceUrl = array('http://'.$row['domain'].$row['uri'], ((Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$row['domain_ssl'].$row['uri']); - - $last = $this->generateSitemap($row['id_shop'], $info['dirname'].'/'.$filename, $replaceUrl); - if ($last) - $this->_addSitemapIndexNode($xml, 'http://'.$row['domain'].(($row['uri']) ? $row['uri'] : '/').$filename, date('Y-m-d')); - $res &= $last; - } + $sql = 'SELECT s.id_shop, su.domain, su.domain_ssl, CONCAT(su.physical_uri, su.virtual_uri) as uri + FROM '._DB_PREFIX_.'shop s + INNER JOIN '._DB_PREFIX_.'shop_url su ON s.id_shop = su.id_shop AND su.main = 1 + WHERE s.active = 1 + AND s.deleted = 0 + AND su.active = 1'; + if (!$result = Db::getInstance()->executeS($sql)) + return false; + + $res = true; + foreach ($result as $row) + { + $info = pathinfo(GSITEMAP_FILE); + $filename = $info['filename'].'-'.$row['id_shop'].'.'.$info['extension']; + + $replaceUrl = array('http://'.$row['domain'].$row['uri'], ((Configuration::get('PS_SSL_ENABLED')) ? 'https://' : 'http://').$row['domain_ssl'].$row['uri']); + $last = $this->generateSitemap($row['id_shop'], $info['dirname'].'/'.$filename, $replaceUrl); + if ($last) + $this->_addSitemapIndexNode($xml, 'http://'.$row['domain'].(($row['uri']) ? $row['uri'] : '/').$filename, date('Y-m-d')); + $res &= $last; + } + $fp = fopen(GSITEMAP_FILE, 'w'); fwrite($fp, $xml->asXML()); fclose($fp); return $res && file_exists(GSITEMAP_FILE); - } + } - /** - * Generate a sitemap for a shop - * - * @param int $shopID - * @param string $filename - * @return bool - */ - private function generateSitemap($shopID, $filename = '', $replaceUrl = array()) - { + /** + * Generate a sitemap for a shop + * + * @param int $shopID + * @param string $filename + * @return bool + */ + private function generateSitemap($shopID, $filename = '', $replaceUrl = array()) + { $langs = Language::getLanguages(); $shop = new Shop($shopID); if (!$shop->id) @@ -191,7 +192,7 @@ XML; if (!isset($done[$product['id_image']])) { if ($tmp == $product['id_product']) - $res[$tmp]['images'] []= array('id_image' => $product['id_image'], 'legend_image' => $product['legend_image']); + $res[$tmp]['images'] []= array('id_image' => $product['id_image'], 'legend_image' => $product['legend_image']); else { $tmp = $product['id_product']; @@ -294,18 +295,18 @@ XML; foreach($pages as $page => $ssl) $this->_addSitemapNode($xml, $this->context->link->getPageLink($page, $ssl), '0.5', 'monthly'); - $xmlString = $xml->asXML(); + $xmlString = $xml->asXML(); - // Replace URL in XML strings by real shops URL - if ($replaceUrl) - $xmlString = str_replace(array(Tools::getShopDomain(true), Tools::getShopDomainSsl(true)), $replaceUrl, $xmlString); + // Replace URL in XML strings by real shops URL + if ($replaceUrl) + $xmlString = str_replace(array(Tools::getShopDomain(true).'/', Tools::getShopDomainSsl(true).'/'), $replaceUrl, $xmlString); - $fp = fopen($filename, 'w'); - fwrite($fp, $xmlString); - fclose($fp); + $fp = fopen($filename, 'w'); + fwrite($fp, $xmlString); + fclose($fp); - return file_exists($filename); - } + return file_exists($filename); + } private function _addSitemapIndexNode($xml, $loc, $last_mod) { @@ -339,25 +340,59 @@ XML; } } - private function _displaySitemap() - { - if (file_exists(GSITEMAP_FILE) && filesize(GSITEMAP_FILE)) - { - $fp = fopen(GSITEMAP_FILE, 'r'); - $fstat = fstat($fp); - fclose($fp); - $xml = simplexml_load_file(GSITEMAP_FILE); + private function _displaySitemap() + { + if (Shop::isFeatureActive()) + { + $sql = 'SELECT s.id_shop, su.domain, su.domain_ssl, CONCAT(su.physical_uri, su.virtual_uri) as uri + FROM '._DB_PREFIX_.'shop s + INNER JOIN '._DB_PREFIX_.'shop_url su ON s.id_shop = su.id_shop AND su.main = 1 + WHERE s.active = 1 + AND s.deleted = 0 + AND su.active = 1'; + if (!$result = Db::getInstance()->executeS($sql)) + return ''; + + $info = pathinfo(GSITEMAP_FILE); + foreach ($result as $shop) + { + $filename = $info['dirname'].'/'.$info['filename'].'-'.$shop['id_shop'].'.'.$info['extension']; + if (file_exists($filename) && filesize($filename)) + { + $fp = fopen($filename, 'r'); + $fstat = fstat($fp); + fclose($fp); + $xml = simplexml_load_file($filename); + + $nbPages = count($xml->url); + + $this->_html .= '

'.$this->l('Sitemap for: ').$shop['domain'].$shop['uri'].'

'; + $this->_html .= '

'.$this->l('Your Google sitemap file is online at the following address:').'
+ '.Tools::getShopDomain(true, true).__PS_BASE_URI__.$info['filename'].'-'.$shop['id_shop'].'.'.$info['extension'].'


'; + + $this->_html .= $this->l('Update:').' '.utf8_encode(strftime('%A %d %B %Y %H:%M:%S',$fstat['mtime'])).'
'; + $this->_html .= $this->l('Filesize:').' '.number_format(($fstat['size']*.000001), 3).'MB
'; + $this->_html .= $this->l('Indexed pages:').' '.$nbPages.'

'; + } + } + } + elseif (file_exists(GSITEMAP_FILE) && filesize(GSITEMAP_FILE)) + { + $fp = fopen(GSITEMAP_FILE, 'r'); + $fstat = fstat($fp); + fclose($fp); + $xml = simplexml_load_file(GSITEMAP_FILE); $nbPages = count($xml->url); - $this->_html .= '

'.$this->l('Your Google sitemap file is online at the following address:').'
- '.Tools::getShopDomain(true, true).__PS_BASE_URI__.'sitemap.xml


'; + $this->_html .= '

'.$this->l('Your Google sitemap file is online at the following address:').'
+ '.Tools::getShopDomain(true, true).__PS_BASE_URI__.'sitemap.xml


'; - $this->_html .= $this->l('Update:').' '.utf8_encode(strftime('%A %d %B %Y %H:%M:%S',$fstat['mtime'])).'
'; - $this->_html .= $this->l('Filesize:').' '.number_format(($fstat['size']*.000001), 3).'MB
'; - $this->_html .= $this->l('Indexed pages:').' '.$nbPages.'

'; - } - } + $this->_html .= $this->l('Update:').' '.utf8_encode(strftime('%A %d %B %Y %H:%M:%S',$fstat['mtime'])).'
'; + $this->_html .= $this->l('Filesize:').' '.number_format(($fstat['size']*.000001), 3).'MB
'; + $this->_html .= $this->l('Indexed pages:').' '.$nbPages.'

'; + } + } private function _displayForm() { diff --git a/modules/gsitemap/translations/fr.php b/modules/gsitemap/translations/fr.php index 372658194..5bb13e90b 100644 --- a/modules/gsitemap/translations/fr.php +++ b/modules/gsitemap/translations/fr.php @@ -8,6 +8,7 @@ $_MODULE['<{gsitemap}prestashop>gsitemap_5bbdad908e423585a7ecc6b61b66b313'] = 'I $_MODULE['<{gsitemap}prestashop>gsitemap_09fa1e865bdcf4d3215d5b0005b93154'] = 'le fichier sitemap.xml.'; $_MODULE['<{gsitemap}prestashop>gsitemap_5a517cec50ac8e742f6583c6c404c4e9'] = 'Fichier Sitemap généré'; $_MODULE['<{gsitemap}prestashop>gsitemap_0a6ee1a4f10278211d74152e633d0ed0'] = 'Erreur durant la création du fichier sitemap'; +$_MODULE['<{gsitemap}prestashop>gsitemap_4851323bb81fbc4aa65c1b37af8a1d1d'] = 'Sitemap pour : '; $_MODULE['<{gsitemap}prestashop>gsitemap_eb175747116b689caadea1b84202f513'] = 'Votre fichier Google sitemap est en ligne à l\'adresse suivante :'; $_MODULE['<{gsitemap}prestashop>gsitemap_39d616ecc73e174052f1877ac2b3c853'] = 'Mise à jour'; $_MODULE['<{gsitemap}prestashop>gsitemap_b908c2f34052b5276e0bf50f0e042211'] = 'Taille du fichier';