/** * @test */ public function slugify() { // Avec extension $text = "mon fichier à accents.txt"; $expected = "mon-fichier-a-accents.txt"; $this->assertEquals($expected, h::slugify($text, '.txt')); // Sans extension $text = "mon fichIer à accents"; $expected = "mon-fichier-a-accents"; $this->assertEquals($expected, h::slugify($text)); }
<?php /** * Affiche le lien vers la news suivante et la news précédente * @var $this NewsController * @var $model TranslatedNews */ ?> <div class="newsNavigationLinks"> <?php if ($previous = $model->getPrevious()) { $slug = h::slugify($previous->title); echo CHtml::link(Yii::t('NewsModule.labels', 'Previous'), array('news/show', 'id' => $previous->id, 'slug' => $slug), array('title' => $slug, 'class' => 'previousItem')); } if ($next = $model->getNext()) { $slug = h::slugify($next->title); echo CHtml::link(Yii::t('NewsModule.labels', 'Next'), array('news/show', 'id' => $next->id, 'slug' => $slug), array('title' => $slug, 'class' => 'nextItem')); } ?> </div>
/** * Les urls par défaut du type news/news/show/4 risquent de provoquer des 'duplicate contents' chez Google avec les * urls enjolivées du type mon-slug/news/show/4. * Cette méthode redirige une url par défaut vers une url enjolivée. * @param int $id */ public function actionBeautifyShowUrl($id) { try { /** @var $model News */ if (!($model = News::model()->findByPk($id))) { throw new CHttpException(404, Yii::t('NewsModule.msg', 'The news you have requested does not exist')); } $slug = h::slugify($model->getTranslation()->title); $url = $this->createAbsoluteUrl("/news/news/show", array('id' => $id, 'slug' => $slug)); $this->redirect($url, true, 301); } catch (Exception $x) { Yii::log(h::_($x, __FILE__, __LINE__, __METHOD__), CLogger::LEVEL_ERROR); $this->redirect('/site/error'); } }
<?php /** * Résumé d'une actualité : on y présente les tags, le titre, la date et le début du texte avec un lien vers * la news complète * @var $this myController * @var $data TranslatedNews * @internal ce fragment est appelé entre autres par une CListView, ne pas changer le nom de variable de $data */ Yii::import('news.*'); Yii::app()->clientScript->registerPackage('news'); $newsUrl = Yii::app()->createAbsoluteUrl('/news/news/show', array('id' => $data->id, 'slug' => h::slugify($data->title))); ?> <div class="news"> <div class="header"> <div class="eventDate"><?php echo Yii::app()->format->date($data->news->event_date); ?> </div> <?php // NB : on indique le chemin complet au fragment _tags parce que cette vue peut être appelée en dehors // du module 'news' (par exemple : dans la page d'accueil du site) $this->renderPartial('news.views.news._tags', array('news' => $data)); ?> <div class="clear"></div> </div> <h2><?php echo CHtml::link(CHtml::encode($data->title), $newsUrl); ?> </h2>
/** * Affiche un bloc HTML correspondant à une actualité * @param TranslatedNews $news */ protected function renderItem(TranslatedNews $news) { $url = Yii::app()->createAbsoluteUrl('news/news/show', array('id' => $news->id, 'slug' => h::slugify($news->title))); $this->render('lastNews', array('translatedNews' => $news, 'url' => $url)); }
<?php /** * Affiche les tags sous la forme d'une liste de boutons. * @var $this myController * @var $news TranslatedNews */ if (!$news->tags) { return; } ?> <div class="tags"> <?php /** @var $tag Tag */ foreach ($news->tags as $tag) { // On utilise Yii::app()->createAbsoluteUrl et non $this->createAbsoluteUrl car ce fragment // est appelé depuis plusieurs controleurs : celui du module news et le SiteController $url = Yii::app()->createAbsoluteUrl('/news/news/index', array('tagIdFilter' => $tag->id, 'slug' => h::slugify($tag->name))); echo myCHtml::button($tag->name, array('onclick' => "window.location = '{$url}'")); } ?> </div>