[Symfony] Plugin sitemap

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2010, 15:20

Et pourquoi ne pas faire la jointure dans la requête de base ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

10 juin 2010, 15:29

je comprends pas trop ce que tu veux dire :oops:

ce que j'avais tenté c'est :
$biensVente = Doctrine::getTable('TabBiens')->getBiensAncienVente(1,1);
            foreach ($biensVente AS $bienVente){
            $o_sitemapSection->addUrl( new prestaSitemapUrl('@vente_voir?villeBien='.$bienVente->getTabAdresses()->getTabAdressesVilles()->getVilleNom().'&typeBien='.$bienVente->getTabBiensType()->getBientypeLibelle().'&bien='.$bienVente->getbienId(), new DateTime(), prestaSitemapUrl::CHANGE_FREQUENCY_HOURLY) );
            }

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2010, 15:43

Quel est le code de cette méthode :
Doctrine::getTable('TabBiens')->getBiensAncienVente(1,1);
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

10 juin 2010, 15:46

Je l'ai vaguement modifié. Dans ce cas elle n'a qu'un seul paramètre.
public function getBiensAncien($prest){
		$q = $this->createQuery('b')
		->select('b.*')
		->where('b._bien_bienprestation_id=?',$prest)
		->addWhere('b.bien_etat=1')
		->addWhere('b._bien_progsneufs_reference IS NULL');
		$result =  $q->execute();
		return $result;
	}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

10 juin 2010, 16:10

Tu sais que si tu fais la jointure depuis une requête de ce type, Doctrine ne relancera pas une requête à chaque fois que tu feras un $objet->getStuff() ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

10 juin 2010, 16:33

au départ j'avais fait :
public function getBiensAncien($prest){
		$q = $this->createQuery('b')
		->select('b.*')
		->leftJoin("b.TabAdresses a")
		->leftJoin("a.TabAdressesVilles v")
		->innerJoin("b.TabBiensType d")
		->where('b._bien_bienprestation_id=?',$prest)
		->addWhere('b.bien_etat=1')
		->addWhere('b._bien_progsneufs_reference IS NULL');
		$result =  $q->execute();
		return $result;
	}
Mais c'est quand même trop long...

Eléphant du PHP | 68 Messages

11 juin 2010, 11:32

Je m'en suis sorti en passant par une table intermédiaire.
Mais j'ai encore une question :
dans mon sitemap index il me génère 3 sitemap pour un sitemap section que j'avais déclaré.

je m'explique : j'ai déclaré
 $o_sitemapSectionAtterrissage   = new prestaSitemapSection( 'atterrissage' );
et je me retrouve avec :
sitemap.atterrissage.xml
sitemap.atterrissage_2.xml
sitemap.atterrissage_3.xml

Peut être qu'il découpe à cause de la taille des sections qui seraient trop grandes?

Dans ce cas, cela peut être gênant quand les pages sont dynamiques.
Si par exemple , du jour au lendemain je me retrouve avec une section en plus, je ne peux pas le prévoir et donc le déclarer aux moteurs de recherche.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 juin 2010, 11:39

Pour commencer, tu as bien vu, c'est le nombre de liens qui est trop important, et le prestaSitemapPlugin le partage en plusieurs sitemap, pour que google ne s'arrête pas au nombre maximum par fichier.

Sinon, je crois que tu n'as pas compris un truc : dans tout les cas, c'est le fichier sitemap.xml qu'il faut déclarer auprès des moteurs de recherche (normalement, ils vont le chercher seul).
Les moteurs de recherches commencent par parser ce fichier, trouvent un code de la sorte :
[xml]<sitemapindex xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9 http://www.sitemaps.org/schemas/sitemap ... eindex.xsd">
<sitemap>
<loc>http://symfony/sitemap.miscSectionName.xml</loc>
<lastmod>2010-06-09T18:32:21+02:00</lastmod>
</sitemap>
</sitemapindex>[/xml]
qui leur indique qu'ils sont en train de parser un annuaire de sitemap (balise <sitemapindex>), et qu'il faudra continuer en parsant chacun des sitemap (chaque fichier décrit par la balise <sitemap>).

Et comme le prestaSitemapPlugin gère tout seul le contenu du sitemap.xml en fonction du nombre de sitemap qu'il doit créé, les moteurs de recherche ont automatiquement connaissance de tous les fichiers à parser.

Est-ce plus clair pour toi ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

11 juin 2010, 11:43

Oui beaucoup :)

Merci encore.

Tout est en place et fonctionne parfaitement.

Tu m'as vraiment bien dépanné sur ce coup là.
Je vais être obligé de te reverser une partie de mon salaire si ca continue... :wink:

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

11 juin 2010, 12:15

Je vais être obligé de te reverser une partie de mon salaire si ca continue... :wink:
Yoohoo !!! avec ça, je vais conquérir le monde, renverser Obama, bruler BP dans sa mare de pétrole et, et, et ... aller me chercher un coca parce qu'il fait soif :langue:

Plus sérieusement, je participe bénévolement sur PHPFrance, ça me fait plaisir d'aider, de t'avoir fait comprendre quelques détails sur les sitemap XML, et dans le cas présent, plaisir de faire connaitre mon travail ;)
La plus grande récompense que tu peux me donner, c'est de faire de la publicité pour PHPFrance et pour mon travail (le prestaSitemapPlugin) ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

15 juin 2010, 09:33

J'ai un petit soucis en ajoutant de nouvellles URL.

En fait j'ai une table du type : id / url
Je la parcoure et je rajoute les URL à mon sitemap.

Mais quand j'ajoute ces URL j'ai un problème en chargeant le sitemap.
J'ai le message d'erreur suivant :

Erreur d'analyse XML : aucun élément trouvé
Emplacement : ***/sitemap.xml
Numéro de ligne 1, Colonne 1 :

Je ne comprend pas pourquoi puisque ma table semble correctement remplie.

Merci d'avance

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 juin 2010, 09:36

Mais quand j'ajoute ces URL j'ai un problème en chargeant le sitemap.
J'ai le message d'erreur suivant :

Erreur d'analyse XML : aucun élément trouvé
Emplacement : ***/sitemap.xml
Numéro de ligne 1, Colonne 1 :
Tu fais quoi exactement pour obtenir cette erreur ?
Tu accèdes au fichier sitemap.xml depuis un navigateur ? tu ouvres un des sitemap données par le sitemap central ?
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

15 juin 2010, 09:41

j'ouvre l'index du sitemap via firefox.

Pour info : si je ne charge pas la table supplémentaire, je n'ai pas l'erreur.

ci dessous le code ou j'ajoute les lignes de cette table dans le sitemap:
$o_sitemapSectionBiens   = new prestaSitemapSection( 'biens' );
        // check is it is up-to-date
        if( !$o_sitemapSectionBiens->isUpToDate() )
       	{
       		$urls = Doctrine::getTable("TabUrlSite")->getUrlSite();
       		foreach($urls AS $url){
       			if ($url->getUrl() != ""){
       				$o_sitemapSectionBiens->addUrl( new prestaSitemapUrl('http://www.immo-ouest.com/'.$url->getUrl(), new DateTime(), prestaSitemapUrl::CHANGE_FREQUENCY_HOURLY) );
       			}
       		}
       	}

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

15 juin 2010, 09:53

Essaye d'afficher ce que te génères cette ligne, et de regarder si elles sont valides
'http://www.immo-ouest.com/'.$url->getUrl()
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphant du PHP | 68 Messages

15 juin 2010, 10:03

ok je vais vérifier les lignes ... (40 000 )

Autre question, en tout je dois avoir environs 70 000 lignes dans le sitemap.
Comment puis-je augmenter le timeout pour ne plus avoir cette erreur là :
atal error: Maximum execution time of 60 seconds exceeded in /data/*****/lib/vendor/symfony/lib/plugins/sfDoctrinePlugin/lib/vendor/doctrine/Doctrine/Collection.php on line 473