Yii Framework Forum: Changer L'url D'une Page - Yii Framework Forum

Jump to content

Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

Changer L'url D'une Page mettre http://test/article_a_lire au lieu de http://test/12 Rate Topic: ***** 1 Votes

#1 User is offline   Sitraka Ratsimba 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 29-July 13

Posted 10 January 2014 - 03:09 AM

Bonjour à tous!
J'aimerai modifier le lien d'une page (localhost/gestiondesmateriels/index.php/region/1)
pour obtenir localhost/gestiondesmateriels/index.php/region/nom_region.
Quelqu'un peut m'aider?

Merci d'avance,
Cordialement,
0

#2 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 13 January 2014 - 08:40 AM

bonjour,

voici un début de réponse
les 'aides' Yii pour construire un lien sont constituées en général à partir du 'helper' CHTml comme suit

<?php echo CHtml::link('monsuperLiendelamortqsuitue',array('region','id'=>$data->id)); ?>


pour ton cas je suppose que ta base région comprend un champ 'nom_region' qui contient le nom de la région
le lien à construire sera donc de la sorte

<?php echo CHtml::link('monsuperLiendelamortqsuitue',array('region','id'=>$data->nom_region)); ?>


voila .
bien entendu pour rendre ce lien exploitable il te faudra modifier l'action correspondante dans le controlleur de ton domaine afin de manipuler les enregistrements non plus à partir de 'id' (manière par défaut) mais à partir du champ 'nom_region'...qui est unique aussi... hein!!
Un des moyens les plus simple est de modifier la funtion LoadModel($id) dans le controlleur du modèle region

public function loadModel($id)
	{
		//$model=Region::model()->findByPk($id);//ancien code
		$model = Region::model()->findByAttributes(array('nom_region'=>$id));//nouveau code
if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}
}


en espérant avoir compris ton problème... ;)
0

#3 User is offline   Sitraka Ratsimba 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 7
  • Joined: 29-July 13

Posted 13 January 2014 - 02:11 PM

Merci d'avoir pris le temps de repondre grandoom.
C'est exactement mon problème :)

J'ai modifié le fichier protected/views/region/_view.
<?php echo CHtml::link(CHtml::encode($data->region_id), array('view', 'id'=>$data->region_name)); ?>


J'ai aussi modifié RegionController.loadModel($id).
/**
	 * Returns the data model based on the primary key given in the GET variable.
	 * If the data model is not found, an HTTP exception will be raised.
	 * @param integer $id the ID of the model to be loaded
	 * @return Region the loaded model
	 * @throws CHttpException
	 */
	public function loadModel($id)
	{
		$model=Region::model()->findByAttributes(array('region_name'=>$id));
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}

Mais maintenant une erreur "Error 404 Le système ne peut trouver l'action « region_test » demandée." s'affiche sur la page localhost/gestiondesmateriels/index.php/region/region_test
0

#4 User is offline   grandoom 

  • Junior Member
  • Pip
  • Yii
  • Group: Members
  • Posts: 34
  • Joined: 11-July 12

Posted 14 January 2014 - 05:36 AM

oupsss..

finalement modifier le coeur du controlleur c'est pas toujours bon lol car du coup toutes les fonctions de ton modèle 'region' sont affectées par la modification... :unsure:

bon je te propose de faire plus simple et de revenir à la function originale 'loadModel' puis d'en créer une autre disons 'loadModelRegion' afin de faire plus simple...

Donc tu effaces tes dernières modifications et tu crées plutôt une nouvelle fonction 'loadModelname' qui ressemble à ça et qui sera chargée de remplir le model avec tous les champs de la région sélectionnée.

public function loadModelname($name)
	{
		$model = Region::model()->findByAttributes(array('region_name'=>$name));
		if($model===null)
			throw new CHttpException(404,'The requested page does not exist.');
		return $model;
	}


tu crées ensuite dans ton controlleur 'Regioncontrolleur' une action 'viewregionname' qui ressemble à ça et qui permet d'afficher la region sélectionnée...

public function actionViewregionname($name)
	{
		$this->render('_view',array(
			'model'=>$this->loadModelname($name),
		));
	}


étant entendu que la vue _view t'affiche seulement la region choisie...

les liens seront du type :

<?php echo CHtml::link(CHtml::encode($data->region_name), array('Region/viewregionname', 'name'=>$data->region_name)); ?>


voila avec ça ça marchera et ça te permettra de comprendre avant de le déployer partout... ;)
et n'oublie pas d'autoriser cette dernière actions dans les règles de contrôles d'accès 'accessrules'
A+
0

#5 User is offline   Patrice 

  • Newbie
  • Yii
  • Group: Members
  • Posts: 8
  • Joined: 15-December 11
  • Location:France

Posted 01 February 2014 - 06:39 AM

Bonjour,

Une possibilité est décrite ici (garder l'id et transformer le visuel de l'url avec l'urlManager et avec une action) :

http://www.sitepoint...record-caching/
(paragraphe "User Friendly URLs Are Always Good")

a+
0

Share this topic:


Page 1 of 1
  • You cannot start a new topic
  • You cannot reply to this topic

1 User(s) are reading this topic
0 members, 1 guests, 0 anonymous users