We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 34749
    • 15 Posts
    Bonjour,

    je cherche le moyen de gerer plusieurs pages avec leurs url rewriting avec seulement une ressources.

    En effet toutes les pages etant les mêmes si ce n'est les infos qui changerons. je ne vois pas l'utilité de creer une ressources à chaques ce qui ferais vite lourd à charger.

    je cherche donc la possibilité d'accomplir cela avec tout ce que cela implique.

    pouvoir changer le rewriting en passant l'alias en parametres par exemple.

    j'aimerais que systeme puissent aussi bien servir de page profile pour les users mais aussi de fiches produit par exemple ou autre.

    si vous saviez me guider dans cela .
    je vous en remercierais smiley

    merci d'avance
      • 33976 ☆ A M B ☆
      • 571 Posts
      Bonjour draeya,

      Comme souvent avec MODX, il existe plusieurs solutions pour arriver à tes fins. Les 2 solutions impliquent d'utiliser une table "tierce" où tu pourras stocker tes données (notamment un alias qui définira l'URI de tes "pages").

      Pour le côté affichage :

      La première solution (celle que je connais le moins) serait de combiner mod_rewrite (Apache) et un paramètre $_GET (autre que &id= qui par défaut est réservé à l'affichage des ressources). Un exemple (léger) est Discuss (le composant utilisé pour les forums).

      Une autre solution consiste à créer ton propre système de routes en utilisant l'évènement système OnPageNotFound, ainsi qu'une ressource (que j'ai tendance à appeler "placeholder").

      Lorsqu'une requête ne débouche pas sur une ressource existante, tu vérifies que l'on cherche bien à accéder à tes données (c'est là qu'intervient ton système de route). Si les conditions sont bien respectées, tu sendForward vers ta ressource "placeholder".

      Là, je dirais que 2 solutions s'offrent à toi :

      1 - ton plugin affiche ton objet complet :
      $array = $object->toArray();
      $modx->setPlaceholders($array, 'prefix.');
      

      2 - ton plugin n'envoie que l'id de ton objet et ta ressource "placeholder" contient un snippet avec toute la logique pour afficher ton objet :
      $id = $object->get('id');
      $modx->setPlaceholder('nom-du-placeholder', $id);
      

      et dans ta ressource placeholder
      [[!snippet? &objectId=`[[!+nom-du-placeholder]]`]]
      


      Un peu de lecture (du code) qui m'a aidé à mettre en place cette dernière solution :

      - le système de routage d'Articles (le plugin et la classe de routage)
      - CustomUrls de yoleg

      En revanche, yoleg a mis en place un système pour empêcher l'accès directe aux ressources "placeholders". Pour ma part je préfère en pas publier les ressources "placeholders", rendant celles-ci inaccessibles aux visiteurs.

      En espérant que cela t'aidera.
      Bon courage
        • 34749
        • 15 Posts
        Bonjour Romain

        merci pour ces conseils je vais etudier ça smiley

          • 34749
          • 15 Posts
          Romain,

          j'ai créer mon plugin:

          <?php
          switch ($modx->event->name) {
          
          	case 'OnPageNotFound':
          		
          		/* handle redirects */
          		$search = $_SERVER['REQUEST_URI'];
          		$base_url = $modx->getOption('base_url');
          		if ($base_url != '/') {
          			$search = str_replace($base_url,'',$search);
          		}
          		$search = trim($search, '/');
          		
          		$uri = $modx->getObject('tckUrl',array('alias' => $search ));
          		
          		if($uri != ''){
          			$type = $uri->get('type');
          			if($type == 'profile'){
          				
          				$modx->sendForward(13);
          				
          			}else if($type == 'media'){
          				
          				
          				
          			}
          		}
          		
          	break;
          	
          }


          ainsi qu'une table pour stocker tout ça

          <object class="tckUrl" table="url" extends="xPDOSimpleObject">
          	<field key="id" dbtype="int" precision="11" phptype="integer" null="false" default="" index="index" generated="native"/>
          	<field key="class_key" dbtype="varchar" precision="100" phptype="string" null="false" default="tckUrl" />
          	<field key="id_elem" dbtype="int" precision="11" phptype="int" null="false" default="" />
          	<field key="type" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
          	<field key="alias" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
          	<field key="uri" dbtype="varchar" precision="255" phptype="string" null="false" default="" />
          </object>


          j'ai creer une ressource qui s'apelle profile qui à l'id 13 et lalias profile en object container.

          je voudrais que cette ressource soit utiliser comme placeholder
          je send Forward donc à cette ressource mais j'obtient une erreur 404. et n'arrive pas à comprendre comment faire fonctionner le tout ?

          peux tu m'aider la dessus ?

          merci
          [ed. note: draeya last edited this post 14 years, 4 months ago.]