0

これは newsses/index.ctp の私のリンクです

$this->Html->link(__("Read more >>", TRUE), array('action'=>'view', $newss['Newsse']['title']));

これは、newsses_controller.php の私のビュー コードです。

function view($title = NULL){
    $this->set('title_for_layout', __('News & Event', true));

    if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    }
    $this->set('newsse', $this->Newsse->read(NULL,$title));
    $this->set('newsses', $this->Newsse->find('all'));
}

しかし、何も表示されません。「newsses/view/2」から「newsses/view/title_of_news」のようなルートを作成したい

私を助けてください....

4

2 に答える 2

0

Model::read()アクセスするモデルのテーブル内の行の を 2 番目の引数として取るメソッド method を使用していidます。この場合、find を使用することをお勧めします。モデルやコントローラーで新しいメソッドを作成する必要はありません。現在のviewメソッドを編集するだけで済みます。

# in newsses_controller.php:
 function view($title = null) {
     $this->set('title_for_layout', __('News & Event', true));

     if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    }

    $this->set('newsse', $this->Newsse->find('first', array(
        'conditions' => array('Newsse.title' => $title)
    ));
    $this->set('newsses', $this->Newsse->find('all'));
}

または、数字のタイトルが与えられた場合でも id による表示が可能な、よりハイブリッドなフォームを作成できます (これは、タイトルが数字だけで構成されるニュース項目がないことを前提としています。たとえば、'12345' など)。

# in newsses_controller.php:
 function view($title = null) {
     $this->set('title_for_layout', __('News & Event', true));

     if (!$id) {
        $this->Session->setFlash(__('Invalid News.', true), 'default', array('class' => 'error')); 
        $this->redirect(array('action'=>'index'));
    } else if (is_numeric($title)) {
        $this->set('newsse', $this->Newsse->read(NULL, $title));
    } else {
        $this->set('newsse', $this->Newsse->find('first', array(
            'conditions' => array('Newsse.title' => $title)
        ));
    }

    $this->set('newsses', $this->Newsse->find('all'));
}

最後に、このfind例のメソッドを (短い) カスタムfindByメソッドに置き換えることもできます (詳細については、ドキュメントを参照してください)。

$this->Newsse->findByTitle($title);
于 2011-05-03T08:38:51.763 に答える
0

このためには、ニュース タイトル別に結果を表示する新しいメソッドをモデルに作成する必要があります。現時点では、$this->Newsse->read(NULL,$title)) を使用しています。この読み取りメソッドがモデルのニュース ID に対して検索している間、読み取りメソッドで $title を使用しています。したがって、readByTitle($title){ write query here to fetch news by title } のような新しいメソッドをモデル クラスに作成するだけです。そして、コントローラーでこのメソッドを使用します。$this->Newsse->readByTitle(NULL,$title))

于 2011-05-03T07:20:39.300 に答える