我在这里和论坛上尝试过这些代码,似乎无法让它运行起来。我有一个索引页面,显示我的最新帖子,只想通过id降序显示它们。我也想知道,你可以在下面看到我限制我的文字下面的字符,我希望它受到字数的限制,但是当我尝试时,它不会显示任何文字。谢谢,这是我的代码。
_view.php
<div class="view">
<? $this->pageTitle = "Latest Music"?>
<h4><?php echo CHtml::encode($data->id); ?>.
<?php echo CHtml::encode($data->title); ?></h4>
<p><?php
$charLimit = 680;
$myText = CHtml::encode($data->text);
$teaserText = substr($myText,0,$charLimit) . "...";
echo $teaserText;
?></p>
<p><?php echo CHtml::link('View Article', array('view', 'id'=>$data->id)); ?>
 
<?php echo CHtml::link('Update Article', array('update', 'id'=>$data->id)); ?></p>
</div>
NewsController /的actionIndex
public function actionIndex()
{
$this->pageTitle = "$TitleP";
$TitleP = print CHtml::encode($data->title);
$dataProvider=new CActiveDataProvider('news_model');
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}
news_model
class news_model extends CActiveRecord
{
public static function model($className=__CLASS__)
{
return parent::model($className);
}
public function tableName()
{
return '{{news}}';
}
public function rules()
{
return array(
array('title, text', 'required'),
array('title', 'length', 'max'=>128),
array('id', 'length', 'max'=>128),
array('text', 'length', 'max'=>1500),
array('title, text', 'safe', 'on'=>'search'),
);
}
public function relations()
{
return array(
);
}
public function attributeLabels()
{
return array(
'id' => 'ID',
'title' => 'Title',
'slug' => 'Slug',
'text' => 'Text',
);
}
public function search()
{
$criteria=new CDbCriteria;
$criteria->compare('id',$this->id);
$criteria->compare('title',$this->title,true);
$criteria->compare('text',$this->text,true);
return new CActiveDataProvider($this, array(
'criteria'=>$criteria,
));
}
}
答案 0 :(得分:1)
要向dataProvider
添加订单,请将CDbCriteria
添加为CActiveDataProvider
构造函数的第二个参数。
public function index(){
...
$dataProvider=new CActiveDataProvider('news_model',array('criteria'=>array('order'=>'id DESC')));//corrected answer
...
}
限制单词数量(来自original answer)
$word_limit=100;
if (preg_match_all('/\s/', $text_to_shorten, $m, PREG_OFFSET_CAPTURE) && isset($m[0][$word_limit-1]) && $m[0][$word_limit-1][1])
$shortened_text=substr($text_to_shorten, 0, $m[0][$word_limit-1][1]).'...';
else $shortened_text=$text_to_shorten;
echo $shortened_text;
P.S你在<? $this->pageTitle = "Latest Music"?>
这是不鼓励的,因为它们只有在使用short_open_tag php.ini配置文件指令启用时才可用,或者如果PHP配置了--enable-short-tags选项。
答案 1 :(得分:0)
除了topher's correct answer之外,如果您总是想要在整个应用程序中按降序显示帖子,您可以为您的模型设置默认范围,如下所示:
class news_model extends CActiveRecord
{
...
public function defaultScope()
{
$alias = $this->getTableAlias(false,false);
return array(
'order'=> "`$alias`.`id` DESC",
);
}
...
}
这将强制您的新闻模型的所有Active Record调用按ID进行降序。
当然,如果你不想在整个网站上出现这种行为,那么我就不会在默认范围内添加;只需在需要时应用订单子句;)
答案 2 :(得分:0)
使用以下代码管理控制器中的订单:@Topher的信用
public function actionIndex()
{
$this->pageTitle = "$TitleP";
$TitleP = print CHtml::encode($data->title);
$dataProvider=new CActiveDataProvider('news_model',
array('criteria'=>
array('order' => ('id DESC')
)));
$this->render('index',array(
'dataProvider'=>$dataProvider,
));
}