Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] [résolu]Problème avec les urls significants

Posted by muirgen on 11/22/2010 13:49

Bonjour à vous tous,

Je développe depuis quelques temps sur Jelix et jusqu'à présent j'arrivais à me débrouiller toute seule !

Mais voila, aujourd'hui je rencontre un problème handicapant sur un projet. Je planche depuis 3 jours dessus, j'ai lu et relu la doc, parcouru le forum mais sans réponse ...

Voila ce qu'il se passe : je voudrais installé des urls rewrited, sur mon appli, normal pour un client qui veut être bien vu par les moteurs de recherche. J'ai donc, pris la doc, et commencé les étapes :

  • bascule du type d'engine en : significant
  • création d'un fichier : urls.xml dans /var/config

Là on est bon, les urls significants fonctionnes sans problème, lorsque je commence à ajouter mes réécriture dans le fichier urls.xml c'est là que je commence à sérieusement patauger !

Un exemple sur les pages dynamiques du site :

  • presentation, dont l'id serait "1"
  • contact, dont l'id serait = "2"

Les deux pages, vont au même endroit : monmodule, default: page ; l'id étant dynamique c'est dans l'action que l'id est récupéré pour aller chercher l'info dans la requête. Du coup dans mon fichier urls.xml j'ai quelque chose comme cela :

<urls xmlns="http://jelix.org/ns/urls/1.0">
<code>
	<classicentrypoint name="index" default="true">
        <url pathinfo="/page-:id.html" module="monmodule" action="default:page">		
           <param name="id" type="number" />
        </url>
    </classicentrypoint>
</urls> </code>

le :id étant dynamique et fourni dans la structure du jUrl(). Mais cela ne fonctionne pas, bizarrement il ne retrouve jamais l'id justement ! Alors la page s'affiche, mais j'ai un message d'erreur (normal puisqu'il ne trouve plus la variable id passé en get) et bien évidemment elle est blanche ^^

Qui pourrait prendre 10mn de son temps pour m'aider à percuter ? Je suis certaine de louper quelque chose mais je ne vois pas (plus) quoi.

Merci d'avance

  [Opened] Problème avec les urls significants

Reply #1 Posted by laurentj on 11/22/2010 14:30

Bonjour,

je ne comprend pas ton problème là. Peux tu reexpliquer ce que tu fais exactement, et à quel résultat tu arrives exactement.

  [Opened] Re: Problème avec les urls significants

Reply #2 Posted by muirgen on 11/22/2010 15:10

Bonjour !

Oui je vais tenter de ré expliquer mon chmilblick ! J'ai mon appli jelix, terminée, maintenant il faut juste que je réécrive les urls pour les moteurs de recherche de manière "cool".

Prenons deux pages dynamique du site, comme le contenus de ces pages est stockés en BDD, bah oui dynamique quoi, elles ont un id, pour que lorsque l'on clique sur le texte dans le menu, on affiche la page correspondante :

  • Présentation, dont l'id est "1"
  • Contact, dont l'id est "2"

Si je ne met pas d'url "cool" en place j'ai une url de type : http://localhost/monappli/index.php/monmodule/default/page?id=1 Le but est évidemment d'arriver a quelque chose de plus présentable du style : http://localhost/monappli/index.php/page-1.html

Pour ce faire, j'ai passé le mode Engine (defaultconfig.ini.php) sur significants, ensuite j'ai créé un fichier urls.xml que j'ai mis bien au chaud dans /var/config, et j'ai commencé à deployé mes urls :

<urls xmlns="http://jelix.org/ns/urls/1.0">
<code>
	<classicentrypoint name="index" default="true">
        <url pathinfo="/page-:id.html" module="monmodule" action="default:page">		
           <param name="id" type="number" />
        </url>
    </classicentrypoint>
</urls></code>

Seulement, mon problème est que lorsque j'appel la page :

http://localhost/monappli/index.php/page-1.html

cela fonctionne en partie :

1- la page s'affiche donc aucun problème pour sur le fait de savoir si la réécriture d'url fonctionne ou non (et de toute manière elle fonctionne puisque j'ai d'autres sites en local sur lesquels je travail et qui ont des urls réécrites sur un htaccess)

2 - L'information de la page ne s'affiche pas, j'ai un message d'erreur me reportant le fait que la variable $id (qui est celle contenu dans le get normalement sur le ?id=1) est inexistante.

C'est sur cette deuxième partie que je patauge, pourquoi lorsque je passe ma page en url réécrite, jelix ne reconnait plus ma variable

$_GET[['id']]

Qu'est ce que j'oublis ??

Merci

  [Opened] Problème avec les urls significants

Reply #3 Posted by laurentj on 11/22/2010 15:38

Tu as manifestement oublié de lire le chapitre sur la récupération des paramètres :-p

<code>
 $this->param('id');
</code>

De toute façon, je ne comprend pourquoi tu cherches à récupérer quelque chose dans $_GET, puisqu'il n'y a pas de partie query dans l'url que tu appelles.

Enfin bref, dans jelix, il ne faut jamais utiliser $_GET ou $_POST.

  [Opened] Problème avec les urls significants

Reply #4 Posted by muirgen on 11/22/2010 15:59

Ben .. Il n'y a pas de partie query dans mon url, oui on est ok, par contre j'ai besoin de récupérer le numéro qui passe dans l'url pour ensuite faire fonctionner mes queries dans mon action "page", du controller "default". C'est pour ca que je cherche à récupérer ce $_GET['id'] de l'url.

Donc que ma page s'appel par : page?id=1 ou page-1.html, me faut quand même la valeur de l'id soit en l'occurence ici : 1, pour que l'action aille chercher le contenu dans la BDD via la requête.

J'utilise peut être pas Jelix correctement .. C'est pas impossible ^^ Ou alors je m'exprime pas très bien, voir les deux xD

Je viens de rajouter la récup' avec $this->param('id'); (que j'utilise déjà sur d'autres actions d'ailleurs) mais ça ne fonctionne pas mieux ! Jelix ne me retrouve pas mon id de page du tout pour s'en servir ensuite dans les requêtes de l'action ....

Je sèche :/

 

  [Opened] Problème avec les urls significants

Reply #5 Posted by foxmask on 11/22/2010 16:03

bonjour

manifestement il y a un loup dans le controleur default et l'action page :/

on peut voir cette action ?


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

  [Opened] Re: Problème avec les urls significants

Reply #6 Posted by muirgen on 11/22/2010 16:15

Bonjour et Re bonjour,

Manifestement, j'ai un peu été naïve sur l'utilisation des urls significants de Jelix.

Finalement, cette fois ci, cela fonctionne. Je vais donner une réponse clair sur le process que j'utilisais, je pense que cela pourra en aider d'autres que moi :)

Cette partie de l'application : "Page" est gérée en deux parties :

  • un controller : default -> function page
  • une zone : accueil -> avec un switch sur le paramètre "page" que j'envoie depuis mon controller.
$rep->title = 'Titre';
<code>
		$rep->addMetaDescription('Mon appli");
		$tpl = new jTpl();
		$rep->body->assignZone('HEADER','header');
		$rep->body->assignZone('MENU','menu');
		$rep->body->assignZone('MAIN','accueil', array('action' => 'page'));
		$rep->body->assignZone('FOOTER','footer');
        return $rep;
</code>

Suivant le conseil précédemment donné par Laurentj, j'ai donc modifié mon code en conséquence :

$id = $this->param('id');
$rep->title = 'Titre';
<code>
		$rep->addMetaDescription('Mon appli");
		$tpl = new jTpl();
		$rep->body->assignZone('HEADER','header');
		$rep->body->assignZone('MENU','menu');
		$rep->body->assignZone('MAIN','accueil', array('action' => 'page', 'id' => $id));
		$rep->body->assignZone('FOOTER','footer');
        return $rep;
</code>

Ensuite dans la zone qui gère l'affichage du contenu des pages, j'ai de nouveau récupéré mon id via :

$id = $this->param('id');

Ainsi au lieu de garder

$_GET[['id']]

qui lui jusque là fonctionnait très bien, j'ai remplacé par $id que je récupère.

Je suis d'accord que dans l'idée garder du $_GET n'était pas judicieux, mais sur le principe ca me semblait assez évident ...

Merci en tout cas, si vous avez besoin que je détail un peu plus ce que je vous ais expliqué ci-dessus, je refais un post sans problème !

  [Opened] Problème avec les urls significants

Reply #7 Posted by laurentj on 11/22/2010 16:16

Jelix ne me retrouve pas mon id de page du tout pour s'en servir ensuite dans les requêtes de l'action

Comme dit Foxmask, tu as un problème quelque part dans ton code. Il n'y a pas de raison que ça ne fonctionne pas avec param().

Et sinon, je me suis rendu compte que l'histoire de la récupération des paramètres est un peu planquée dans le manuel, je viens d'en faire un chapitre un peu plus visible et complet.

  [Opened] Problème avec les urls significants

Reply #8 Posted by muirgen on 11/22/2010 16:19

En fait j'ai le manuel de jelix sur mon bureau, en version relié ^^ Je le potasse régulièrement, j'aime autant chercher par moi même avant de déranger. Sur ce problème je pataugeais vraiment dans la semoule ! Il ne m'étais pas venue a l'idée du tout d'utiliser param() ... C'est bête ^^

Merci encore en tout cas :)

  [Opened] Problème avec les urls significants

Reply #9 Posted by laurentj on 11/22/2010 16:20

Ok super si tu as corrigé ton problème

Je suis d'accord que dans l'idée garder du $_GET n'était pas judicieux, mais sur le principe ca me semblait assez évident ...

Oui et non, Dans une zone, on ne fait jamais appel à des paramètres de requêtes HTTP (que ce soit par $_GET ou l'objet jRequest).

Une zone est censé s'afficher en toute circonstance, c'est à dire que l'on peut l'appeler quelque soit le contexte, en lui passant éventuellement des valeurs en paramètres dont elle aurait besoin. Elle est censé être totalement indépendante de la requête HTTP. C'est au contrôleur qui l'appel de lui passer les valeurs qu'il aurait éventuellement récupérer de la requête HTTP.

 
Page
  1. [résolu]Problème avec les urls significants