1

私は cms ベースの Yii アプリケーションに取り組んでいます。最近、バックエンドのページを完成させ、データベースからページを取得できるようになりました。

問題は、要求された URL を取得して動的レイアウトをレンダリングすることから始まります。

これについて最善の方法は何ですか?スタート サイト/ドメイン コントローラーを使用するように、どのように設定すればよいですか?

CMenu を使用したレンダリングは、テンプレートでうまくいきます。メニューはフロントエンドに表示されます。/home や /company/products のように、私が現在使用しているメニュー リンクの例を次に示します。クリーンな URL を使用します。

<ul id="yw0">

<li class="active"><a href="/home">Home</a></li>
<li><a href="/about_us">About us</a></li>
<li><a href="/company">Company</a></li>

    <ul>
        <li><a href="/company/products">Products</a></li>
        <li><a href="/company/services">Services</a></li>
    </ul>

<li><a href="/contact">Contact</a></li>

</ul>

しかし、これは1ポイント先です。レイアウトは、バックエンドの特定のページから動的にロードする必要があります。すべてのページに異なるレイアウトを設定できます。データベースにはこのための列があります。たとえば、URL: " http://example.com/home " は 'protected/views/layouts/main.php' をロードする必要があります。

現時点では、「http://example.com/company/products」のようなリンクはどこにも行きません。リンクが存在せず、動的に作成されるため、これは明らかです。

私は2つのことをする必要があると考えています:

  • すべてのリクエストが送信され、ページとレイアウトのロードを処理する startController を作成します。
  • そして、クリーンな URL を使用した 2 つのセットアップ。

それでおしまい。

大した仕事ではないと想像できます。しかし、それは私に頭を悩ませています。

特にきれいな URL。彼らはいつも私を少し混乱させてきました。

index.php?r=site/index は、siteController とアクション インデックスに移動します。

しかし、これは私が望むものではありません。「urlManager」も設定しようとしましたが、コントローラーとアクションに行きます。page/default/view/id/ のように。しかし、私はアクションに行きたくありませんが、データベースから(次の)要求されたページ(異なるレイアウトで)をロードする開始コントローラだけです。

構成ファイル main.php のどこかにクリーンな URL をセットアップする必要がありますか?

私が達成したいことを簡単に理解できることを願っています。どんな助けでも大歓迎です。

4

1 に答える 1

1

コントローラーでレイアウトを設定することも、このように単一のコントローラーの各アクションで異なるレイアウトを設定することもできます。

public function actionActionname()
{
    $this->layout = 'front_layout';
    //Do the actions
    $this->render('renderVariable');
}

そして、次のように設定できる完全なコントローラーレイアウトに:

class ControllerName extends Controller
{
    public $layout = '//layout path';
于 2013-03-07T10:13:48.263 に答える