Changer L'url D'une Page

[indent][/indent]Bonjour à tous!

[indent][/indent]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,

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… ;)

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

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+

Bonjour,

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

(paragraphe "User Friendly URLs Are Always Good")

a+