0

誰かが私を助けてくれないかと思っていました。

コードイグナイター アプリケーションにフォーラムを構築していますが、セグメントの構築方法を理解するのに少し苦労しています。

CI ユーザーガイドに従って、uri は次のように構築されます

www.application.com/CLASS/METHOD/ARGUMENTS

これは問題ありませんが、その部分を少し異なる構造にする必要があります。

私のフォーラムにはカテゴリと投稿があるので、カテゴリを表示するには次の URL を使用します

www.application.com/forums

これはクラス名としては問題ありませんが、次のセグメントを動的にしたいです。たとえば、「mycategory」というカテゴリと「this-is-my-first-post」という名前の投稿がある場合、構造体はあるべきです

www.application.com/forums/mycategory/this-is-my-first-post

/forums/category/mycategory/this-is-my-first-post のようなことをしたとしても、ドキュメントによると「mycategory」はメソッドである必要があるため、それを達成できないようです。

誰かがこれまでにこのようなことをしたことがあるなら、彼らは私のために少し光を当てることができますか?私はこれにかなりこだわっています.

乾杯、

4

3 に答える 3

1

ドキュメントで混乱するものはありませんが、少し混乱しています。いくつか提案させてください。
クリックするハイパーリンクを作成するビューを作成し、ハイパーリンクでこの指示を提供します

<a href="www.application.com/forums/category/mycategory/this-is-my-first-post">First Post</a>

コントローラでは、これを簡単に取得できます

$category = $this->uri->segment(3);
$post     = $this->uri->segment(4);

そして今、あなたは先に進むことができます。要件が他のものであると思われる場合は、ハックを使用できます。これには、セグメントを動的に割り当てるメソッドを作成しました。

system / core / uri.phpに移動し、このメソッドを追加します

function assing_segment($n,$num)
{
    $this->segments[$n] =   $num;
    return $this->segments[$n];
}

使い方

$this->uri->assign_segment(3,'mycategory');
$this->uri->assign_segment(4,'this-is-my-first-post');

また、エラーが発生した場合は、「送信したURIで文字が許可されていません」と入力し、application / config / config.phpに移動して、これに-を追加します。

$config['permitted_uri_chars'] = 'a-z 0-9~%.:_\-';
于 2012-11-16T10:31:18.547 に答える
0

ルックアップ関数に転送するルートを作成できます。
たとえば、routes.php に次のような行を追加します。

$route['product/(:any)/(:any)'] = "forums/cat_lookup/$1/$2";

次に、この関数はデータベース ルックアップを実行してカテゴリを見つけます。

...
public function cat_lookup($cat, $post) {
    $catid = $this->forum_model->get_by_name($cat);
    if ($catid == FALSE) {
        redirect('/home');
    }
    $post_id = $this->post_model->get_by_name($post);
    /* whatever else you want */

    // then call the function you want or load the view
    $this->load->view('show_post');
}
...

このメソッドは、URL を希望どおりに表示し、カテゴリが存在しない場合の問題を処理します。アンダースコアを使用してカテゴリ/投稿をデータベースに保存し、 uri_title()関数を使用してきれいにする
ことができることを忘れないでください。

于 2012-11-16T10:59:17.507 に答える