Rafael Sedrakyan
Rafael Sedrakyan

Reputation: 2629

separate header, content and footer in yii

I have a login form in my header section of the website. If user is logged in than insted of the login form user profile details will be shown. The question is how to separate header footer and content into different views and call them from one controller? Or maybe there is another solution...Thanks for help.

Upvotes: 0

Views: 5835

Answers (4)

Kalpesh Patel
Kalpesh Patel

Reputation: 40

Using the Model-View-Controller (MVC) design pattern, the look of a Yii-based site is naturally controlled by the View files. These files are a combination of HTML and PHP that help to create the desired output. Specific pages in a site will use specific View files. In fact, the View files are designed to be broken down quite atomically, such that, for example, the form used to both create and edit an employee record is its own file, and that file can be included by both create.php and update.php. As with most things in OOP, implementing atomic, decoupled functionality goes a long way towards improving reusability. But the individual View files are only part of the equation for rendering a Web page. Individual view files get rendered within a layout file. And although I’ve mentioned layouts a time or two in my writings on Yii, it’s a subject that deserves its own post.

To be clear, layouts are a type of View file. Specifically, whereas other View files get placed within a directory for the corresponding Controller (i.e., the SiteController pulls from views/site), layout files go within views/layouts. But while the other View files are associated with individual Controllers (and therefore, individual pages), layouts are communal, shared by all the pages. Simply put, a layout file is the parent wrapper for the entire site’s templating system. I’ll explain

ypu can see more details

http://www.larryullman.com/2012/05/16/working-with-layouts-in-yii

Upvotes: 2

Chris Herring
Chris Herring

Reputation: 1432

In your header view you could write something like this.

<?php if(Yii::app()->user->getId()): ?>
    <?php $this->renderPartial('//world/_header_user')); ?> 
 <?php else: ?>
    <?php $this->renderPartial('//world/_header_guest')); ?> 
 <?php endif; ?>

Upvotes: 3

marcovtwout
marcovtwout

Reputation: 5269

Your default generated Yii application has a parent Controller in protected/components/Controller.php. If you need to access additional parameters in layout, add public properties to Controller, set them in your child controller, and use them in your view/layout files.

Upvotes: 0

Eirik Hoem
Eirik Hoem

Reputation: 1310

The easiest way is probably to use a different layout, which you just switch on login. If not, showing partials / components based on Yii::app()->user->isGuest also works well.

Upvotes: 1

Related Questions