1

編集

routes.php での私のソリューション:

$route['news'] = 'news_controller';
$route['gallery'] = 'gallery_controller';
$route['(:any)'] = 'sites/$1';

そして私のサイトコントローラーで:

function index($site_id = '') {
  //sanitize $site_id.
  $this->site = $this->sites_model->get_site($site_id);
  //etc.
}

THX から YAN

質問:

だから私は CodeIgniter で小さな CMS を書きました。管理者はサイトを作成できます。URL のセグメントが DB のような場合、サイトは自動的に開きます。たとえば、mysite.com/sites/about は「About」サイトを呼び出します。これはうまくいきます。

URLに問題が発生しました。このURLが欲しい

http://www.mysite.com/sites/about

これに変わります:

http://www.mysite.com/about

問題は、routes.php を使用して各サイトにワイルドカードを設定できないことです。(それらは動的であり、顧客がどのサイトを作成するかわからないため、作成するサイトごとにroutes.phpファイルを編集したくないため、これは自動的に行う必要があります)

問題は、ニュース、ギャラリー、連絡先など、他の修正コントローラーも持っていることです:mysite.com/news、mysite.com/gallery、...それらは正常に動作します

ここに私のサイトコントローラーがあります:

class Sites extends Public_Controller {

public $site;
public $url_segment;

public function _remap($method)
{
    $this->url_segment = $this->uri->segment(2);

    $this->load->model('sites_model');
    $this->site = $this->sites_model->get_site($this->url_segment);

    if($this->site !== FALSE)
    {
        $this->show_site($this->site);
    }
    else
    {
        show_404($this->url_segment);
    }
}

public function show_site($data)
{
    $this->template->set('site', FALSE);
    $this->template->set('site_title', $data['name']);
    $this->template->set('content',$data['content']);
    $this->template->load('public/template','sites/sites_view', $data);
}}

これは、データベースをチェックする Site_model です... url_segment が DB のタイトルに適合する場合:

class Sites_model extends CI_Model {

public function get_site($site_url)
{
    if($site_url != ""){
        $this->db->where('name', $site_url);
        $query = $this->db->get('sites', 1);

        if($query->num_rows() > 0){
            return $query->row_array();
        }
        else
        {
            return FALSE;
        }
    }else{
        return FALSE;
    }
} }

サイトコントローラーを呼び出さないときにコントローラーが存在するかどうか(URLの最初のセグメント)をチェックし、サイトがDBにあるかどうかをチェックし、これがfalseの場合は404を呼び出すものが必要だと思います.

これを解決する方法はありますか?

ところで:私の英語には申し訳ありません

よろしくGN

4

2 に答える 2

2

値を最後routes.phpに保持するだけで、次の方法で処理できます。(:any)

$route['news'] = 'news_controller';
$route['gallery'] = 'gallery_controller';
$route['(:any)'] = 'sites/$1';

サイトコントローラーで、URL からのデータを使用して特定のサイトにルーティングします。

function index($site_id = '') {
    //sanitize $site_id.
    $this->site = $this->sites_model->get_site($site_id);
    //etc.
}
于 2012-06-08T16:33:53.970 に答える
1

質問の意図を完全に理解するのに苦労していますが、私が言えることから、単に追加する必要はありません:

if ($this->uri->segment(1) != 'sites')
     ... // handle malformed URL
于 2012-06-08T16:28:37.047 に答える