Bonjour à tous, toutes
Je viens du monde CodeIgniter et je débute avec Yii.
Ce que je souhaite faire c'est :
monsite.com/post/voir/12 je ne veux pas dans mes pages avoir cette écriture mais plutôt monsite.com/post/une-belle-aventure
avec CodeIgniter c'est très simple, et je avec cakePHP idem.
Si j'utilise Yii et urlManager, en définissant une route je n'aurais pas ce remappage.
'rules'=>array('post/une-belle-aventure'=>'post/voir/12')
ça me permet juste en utilisant CHtml::link d'avoir l'url monsite.com/post/une-belle-aventure mais si on suit le lien on a une erreur 400 "Your request is invalid."
comment faire ?
Page 1 of 1
Routes avec Yii
#2
Posted 23 October 2010 - 05:58 AM
Bon, petits progrès:
je fais du routing avec urlManager c'est à dire j'arrive à control/action remappé sur control/action2 par exemple
style : post/une-belle-aventure remappé vers post/unebelleaventure (c'est pas bien sorcier
)
Par contre post/une-belle-aventure vers post/voirpost/12 par exemple je n'y arrive pas, il me sort une erreur 400
c'est le "12" qu'il ne "voit" pas...
je fais du routing avec urlManager c'est à dire j'arrive à control/action remappé sur control/action2 par exemple
style : post/une-belle-aventure remappé vers post/unebelleaventure (c'est pas bien sorcier
Par contre post/une-belle-aventure vers post/voirpost/12 par exemple je n'y arrive pas, il me sort une erreur 400
c'est le "12" qu'il ne "voit" pas...
#3
Posted 25 October 2010 - 02:47 AM
Bonjour,
Afin que ce message ne reste pas sans réponse je vais y poster ce petit message mais je n'ai aucune idée de comment cette fonctionnalité s'applique à yii.
En revanche si tu trouve comment faire je ne serais pas contre un tutoriel à ce sujet
Afin que ce message ne reste pas sans réponse je vais y poster ce petit message mais je n'ai aucune idée de comment cette fonctionnalité s'applique à yii.
En revanche si tu trouve comment faire je ne serais pas contre un tutoriel à ce sujet
#4
Posted 30 October 2010 - 11:31 AM
/* Lire un post */
'post/<slug:[A-Za-z0-9-]+>' => array('post/voir', 'urlSuffix'=>'.html'),
/**
* Retourne un modèle Post
*/
public function loadModel()
{
if($this->_model===null)
{
if(isset($_GET['slug']))
$this->_model=Post::model()->find('slug =:slug', array('slug'=>$_GET['slug']));
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
}
return $this->_model;
}
echo CHtml::link('Mon post', array('post/voir', 'slug'=>'une-belle-aventure'));
L'url aura cette forme : /post/une-belle-aventure.html
1. Il faut ajouter une colonne slug dans la table Post
2. Pour generer le slug :
class Formatter extends CFormatter {
static function slugify($text)
{
// replace non letter or digits by -
$text = preg_replace('~[^\\pL\d]+~u', '-', $text);
// trim
$text = trim($text, '-');
// transliterate
setlocale(LC_CTYPE,'fr_FR.UTF-8');
$text = iconv("UTF-8","ASCII//TRANSLIT", $text);
// lowercase
$text = strtolower($text);
// remove unwanted characters
$text = preg_replace('~[^-\w]+~', '', $text);
if (empty($text))
{
return 'n-a';
}
return $text;
}
}
post = new Post(); post->titre = 'Une belle aventure'; post->slug = Yii::app()->format->slugify(post->titre) post->save();
Il est possible de travailler sans colonne slug dans la table mais pour cela il faut ajouter l'id dans l'url :
/* Actualité */
'actualite/<id:\d+>-<slug:[A-Za-z0-9-]+>' => array('actualite/view', 'urlSuffix'=>'.html'),
echo CHtml::link($actualite->titre, array('actualite/view', 'id'=>$actualite->id , 'slug'=>Yii::app()->format->slugify($actualite->titre)));
L'url aura cette forme : /actualite/24-yii-is-the-best.html
Et charger sur l'id en verifiant le bon slug pour eviter du duplicate content si le slug tape est pas correcte :
/**
* Retourne un modèle Actualite
*/
public function loadModel()
{
if($this->_model===null)
{
if(isset($_GET['id']))
$this->_model=Actualite::model()->published()->findByPk((int)$_GET['id']);
if($this->_model===null)
throw new CHttpException(404,'The requested page does not exist.');
$slug = Yii::app()->format->slugify($this->_model->titre);
if($slug != $_GET['slug'])
$this->redirect(array('actualite/view', 'id'=>$this->_model->id, 'slug'=>$slug));
}
return $this->_model;
}
#6
Posted 21 March 2011 - 06:22 AM
Pour ma part, la fonction preg_replace ci-dessus ne fonctionne pas sur le serveur de production.
Est-ce que quelqu'un sait d'où ça peut venir? la version de php du serveur est 5.3
En local je suis aussi en 5.3 et ça fonctionne parfaitement.
Est-ce que quelqu'un sait d'où ça peut venir? la version de php du serveur est 5.3
En local je suis aussi en 5.3 et ça fonctionne parfaitement.
#7
Posted 21 March 2011 - 06:25 AM
Le remède est ici:
http://antoine.goute...ugify-a-string/
Il faut préférer cette fonction:
Mais d'où vient le mal exactement?
http://antoine.goute...ugify-a-string/
Il faut préférer cette fonction:
/**
* Modifies a string to remove all non ASCII characters and spaces.
* Note : Works with UTF-8
* @param string $string The text to slugify
* @return string The slugified text
*/
function slugify ($string) {
$string = utf8_decode($string);
$string = html_entity_decode($string);
$a = 'ÀÁÂÃÄÅàáâãäåÒÓÔÕÖØòóôõöøÈÉÊËèéêëÇçÌÍÎÏìíîïÙÚÛÜùúûüÿÑñ';
$b = 'AAAAAAaaaaaaOOOOOOooooooEEEEeeeeCcIIIIiiiiUUUUuuuuyNn';
$string = strtr($string, utf8_decode($a), $B);
$ponctu = array("?", ".", "!", ",");
$string = str_replace($ponctu, "", $string);
$string = trim($string);
$string = preg_replace('/([^a-z0-9]+)/i', '-', $string);
$string = strtolower($string);
if (empty($string)) return 'n-a';
return utf8_encode($string);
}Mais d'où vient le mal exactement?
Share this topic:
Page 1 of 1

Help














