CakePHP: использовать заголовок сообщения в качестве метода просмотра - PullRequest
0 голосов
/ 12 августа 2011

Я пытался сделать следующий метод для создания URL-адресов, как:

domain.com/portfolio/This_is_a_test_post

function view ( $title )
{       
    $post = $this->Portfolio->find('first', array('conditions' => array(Inflector::slug('Portfolio.title') => $title)));

    //$posts = $this->Portfolio->title = Inflector::slug($title);

    if (empty($title))
    {
        $this->cakeError('error404');
    }
    else
    {
        $this->set(compact('post'));
    }
}

Однако это не показывает сообщение!Очевидно, я делаю что-то не так ... Любые идеи о том, как я мог это исправить?Спасибо

Ответы [ 4 ]

5 голосов
/ 12 августа 2011

Я бы порекомендовал использовать идентификатор для адресации контента на вашем веб-сайте, чтобы вам не приходилось беспокоиться об изменениях названия / слагов.С точки зрения SEO вы можете легко использовать Slug без каких-либо технических действий с ним:

function view($id) {
   $this->Post->id = $id;
   $this->set('post',$this->Post->read());
}

И, на ваш взгляд, создайте ссылки, подобные этим:

$this->Html->link('name of the link', array('controller' => 'posts', 'action' => 'view', $post['Post']['id'], Inflector::slug($post['Post']['title'])));

Теперь ваши URL будут выглядетькак это:

domain.com/posts/13/This_is_a_test_post

Обратите внимание, что слизняк ничего не делает, но дает вам выгоду SEO

2 голосов
/ 12 августа 2011

Не работает, потому что вы применяете функцию Inflector :: slug к имени столбца. Попробуйте наоборот ..., добавьте столбец слагов к вашему сообщению и создайте слаг, когда вы добавляете сообщение с помощью Inflector, попробуйте что-то подобное при добавлении вашего сообщения:

$this->data['Post']['slug'] = Inflector::slug($this->data['Post']['title']);

и на вашем контроллере сделайте это:

function view($slug = null) {
    if (is_null($slug)) {
        $this->cakeError('error404');
    } else {
        $post = $this->Post->findBySlug($slug);
        $this->set(compact('post'));
    }
}

это должно сработать .. надеюсь, это поможет ..

0 голосов
/ 01 февраля 2013

вы можете использовать эту поддержку lib для конвертации URL без дополнительных усилий

http://someguyjeremy.com/blog/slugs-ugly-bugs-pretty-urls

0 голосов
/ 12 августа 2011

ты не можешь этого сделать.При сохранении поста, вы должны поставить заголовок уже;или если вы хотите сохранить заголовок, поместите слаг в другое поле, чтобы найти его позже.

 function view ( $title = null ){       
   if(!$title)$this->redirect(array('action'=>'index'));
   $post = $this->Portfolio->find('first', array('conditions' => array('Portfolio.title' => $title)));
   $this->set(compact('post'));
 }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...