2015-05-01 22 views
13

Yii2 kullanarak küçük bir proje yapıyorum.Yii2 görünümünde düzen dosyasını değiştirin

Bu görünümde bir görünümde (örneğin, site) aynı düzeni (üstbilgi, altbilgi) varsa, login.php numaralı görünümde varsayalım. Bu dosyada farklı veya hiç bir başlık/altbilgi istiyorum. Üstbilgi/altbilgiyi yalnızca bu görünüm dosyasından kaldırabilirim.

Tümü farklı görünümlerdeki düzeni değiştirebilirim. Düzenlemenin tek bir görünümde değiştirilmesi mümkün mü? bağıl harekete İçinde

cevap

25

:

public function actionYourAction($id) 
{ 

$this->layout = 'yourNewLayout'; 

    return $this->render('yourView', [ 
     'model' =>$model, 
    ]); 
} 
+0

Teşekkürler .. Bu işe yarıyor ... :) –

+0

Harika ve anında çözüm :) Sen rock @scaisEdge bro. –

10

Geç partiye biraz tutuyorum, ama görünümünüze içinden düzeninizi değiştirmek CAN. Kontrol cihazınızda bildirmek zorunda değilsiniz. Ben şahsen görüşte bunu yapmak daha iyi olduğunu düşünüyorum çünkü daha sonra neler olduğunu kolayca görebilirsiniz. HTML düzenlemeleriniz yapılıyorsa, görünüm dosyasına gidersiniz ve hangi düzeni kullandığını kolayca görebilirsiniz. Bunu Denetleyiciye koyduğunuzda, (veya daha sonra bir başkası), denetleyicinizin eylemine yerleştirilmiş düzen değişikliğini kaçırabilirsiniz.

$this, Yii2'de göründüğünden ve denetçinizi Yii1'de yaptığınız gibi değil, eski $this->layout artık görünümünüzün içinde çalışmaz.

Şimdi, Yii2'de, denetleyicinize $this->context kullanarak görünümünüzden bakın.

$this->context->layout = 'your-layout'; 
5

Projemde 2 düzen istedim: biri site için, diğeri webapp için. Main.php dosya varsayılan düzenini olduğu gibi, ben bir site.php düzeni oluşturduk ve siteController başında, sadece sınıf bildiriminde sonra ben sonuç olduğunu

public $layout = 'site'; 

koyduk sadece siteController render görünümleri site.php düzenini kullanıyor. Benim için çalıştı.

0

Ayrıca partiye geç bir litte kulüplerim, ama bugün bu şeylerle uğraştım ... Bana göre, altbilgiyi veya üstbilgiyi atlamak istediğimden ayrı bir düzen oluşturmak için küçük bir kazanç için çok fazla kod gibi görünüyor . Sonra

$contr = Yii::$app->controller->id; 
$action = Yii::$app->controller->action->id; 
$skipFooter = $contr == 'site' && $action == 'login'; //...or enter here what U want 

... ve: Ben ana düzeni sopa olabilir, ben sadece denetleyici ve o anda yüklü eylem almak ve bu şekilde (Main.php bu yazma) ihmal olabilir Daha sonra:

<?php if (!$skipFooter): ?> //Never at login... 
    <footer class="footer"> 
     <div class="container"> 
      <p class="pull-left">&copy; YourSite.com <?= date('Y') ?></p> 

      <p class="pull-right"><?= Yii::powered() ?></p> 
     </div> 
    </footer> 
<?php endif; ?>