Example #1
0
 /**
  * @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));
 }
Example #2
0
<?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>
Example #3
0
 /**
  * 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');
     }
 }
Example #4
0
<?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>
Example #5
0
 /**
  * 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));
 }
Example #6
0
<?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>