0

こことフォーラムでコードを試しましたが、うまくいかないようです。最新の投稿を表示するインデックス ページがあり、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)); ?>
&nbsp
<?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,

    ));
}

ニュースモデル

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,
    ));
}


}
4

3 に答える 3

1

注文を追加するには、コンストラクターの2番目のパラメーターとしてaを追加しますdataProviderCDbCriteriaCActiveDataProvider

public function index(){
    ...
    $dataProvider=new CActiveDataProvider('news_model',array('criteria'=>array('order'=>'id DESC')));//corrected 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;

PSあなたは短いオープンphpタグを持っています<? $this->pageTitle = "Latest Music"?>

これは、short_open_tag php.ini構成ファイルディレクティブで有効になっている場合、またはPHPが--enable-short-tagsオプションで構成されている場合にのみ使用できるため、お勧めしません。

于 2013-03-19T06:51:15.937 に答える
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,
    ));
}
于 2013-03-19T17:13:54.633 に答える
0

余談ですが、トファーの正解に加えて、アプリケーション全体で投稿を常に降順で表示したい場合は、次のようにモデルにデフォルトのスコープを設定できます。

class news_model extends CActiveRecord
{
    ...
    public function defaultScope()
    {
        $alias = $this->getTableAlias(false,false);
        return array(
            'order'=> "`$alias`.`id` DESC",
        );
    }
    ...
}

これにより、ニュース モデルのすべての Active Record 呼び出しが id の降順に強制されます。

もちろん、サイト全体でこの動作が望ましくない場合は、わざわざデフォルトのスコープを追加する必要はありません。必要に応じて注文句を適用するだけです;)

于 2013-03-19T08:03:57.370 に答える