0

私は、コンテンツの変更を更新できるようにしたいクライアントのサイトに取り組んでいます。簡単に言えば、ページの編集は許可するが、ページの作成や削除は許可しないというものでした。このサイトでは、良いことを聞いたので、cakePHP を使用することにしました。

まず、私のセットアップの簡単な説明。「コンテンツ」と呼ばれる単一のテーブルがあり、そこに各ページのコンテンツを保存しています。テーブルには、pid、varchar 'title'、varchar 'slug'、および longtext 'body' があります。それらはすべて一目瞭然です。各ページには独自の行があり、本文は単純な HTML ダンプです。

私が問題を抱えている2つの状況があります。まずはホームページの設定です。Cake のデフォルトは、home.ctp に基づくページですが、これは静的です。現在、私がホームページとしていたページは、localhost/alc/contents/view/2 にあります。これはルーティングに関係していることは理解していますが、すべての詳細が必要な場合、そこにあるほとんどの例は解決策の半分を提供します:P

2 番目の問題は、ページのスラッグです。各ページは現在 /contents/view/ idの下にあり、代わりにこれをデータベースのスラッグにしたいと思います。これを変更しようとする (つまり、インデックスのビュー リンクを変更する) たびに、ページのコンテンツではなくエラーが発生します。

私が適切に把握できないように見える2つのことがあるので、これに関する助けをいただければ幸いです。ありがとう!

ちなみに、http://www.roberttilt.name/web-dev/ALC_proto/でサイトを表示できます。

4

1 に答える 1

0

最初の質問では、/app/config/routes.php を開いて、ホームページの行を変更する必要があります。すなわち:

Router::connect('/', array('controller' => 'pages', 'action' => 'display', 'home'));

なる必要がある

Router::connect('/*', array('controller' => 'contents', 'action' => 'view'));

コントローラー ファイル /app/controllers/contents_controller.php でアクション ビューに移動し、空の ID を受け入れるように変更します。

function view($id = null){
   if($id == null){ //Load the default home page
      $this->find('first', array('conditions'=>array('default'=>1)));
   } else {
      //load the 
      $this->find('first', array('conditions'=>array('OR'=>array('slug'=>$id, 'id'=>$id))));
   }
   .....
}

このように、ID またはスラッグが提供されていない場合は、ホームページをロードしています。それらのいずれかが読み込まれている場合は、それを使用して目的の Web ページのコンテンツを読み込みます。

リンクは次のようになります。

$this->Html->link('About', array('controller'=>'contents', 'action'=>'view', $slug_var));

リンクは次のように変換されます

<a href="/your-nice-slug">About</a>

おそらく、クックブックを見てみる必要があります。

于 2010-10-20T08:18:44.913 に答える