본문 바로가기

Yii Framework/블로그 만들기

16. 사용자 메뉴 포틀릿 만들기

이 곳은 제가 개인적으로 YII framework의 블로그 만들기를 번역해 놓은 곳입니다.

제가 영어 전공자도.. 그렇다고 영어랑 친하지도 않습니다. 

그래서 보시면 뭔가 글도 엉성하고 말이 안맞는게 많습니다.

잘못 오역된 부분이라던지 그런 부분들 친절하게 알려주시면 바로 수정하겠습니다.

이 페지의 원글 http://www.yiiframework.com/doc/blog/1.1/en/portlet.menu



사용자 메뉴 포틀릿 만들기

  1. UserMenu 클래스 만들기
  2. userMenu 보기 만들기
  3. UserMenu 포틀릿 사용
  4. UserMenu 포틀릿 테스트
  5. 정리

기본 요구 분석에 의하면 3종의 포틀릿이 필요하다고 합니다. 이것은 "사용자 메뉴"포틀릿 "태그 클라우드"포틀릿 "최근 코멘트"포틀릿입니다. 이러한 포틀릿을 Yii가 제공하는 CPortlet 위젯을 확장하고 개발 합니다.

이 절에서는 첫 번째 구체적인 포틀릿을 개발합니다. 그것은 사용자 메뉴 포틀릿에서 인증 된 사용자에게만 제공되는 메뉴 항목의 목록을 표시하는 것입니다. 메뉴는 아래 4 개 항목입니다.

  • 댓글을 승인 : 승인을 기다리고있는 댓글 목록에 하이퍼 링크
  • 새로운 기사를 작성 : 게시물 작성 페이지에 대한 하이퍼 링크
  • 게시물 관리 : 게시물 관리 페이지에 대한 하이퍼 링크
  • 로그 아웃 : 현재 사용자를 로그 아웃하는 링크 버튼

1. UserMenu 클래스 만들기
우리는 사용자가 메뉴 포틀릿의 논리 부분을 대표 할 수있는 UserMenu 클래스를 만들 수 있습니다. 이 클래스는 파일 /wwwroot/blog/protected/components/UserMenu.php 에 저장되며 다음과 같은 내용이 있습니다.
Yii::import('zii.widgets.CPortlet');
 
class UserMenu extends CPortlet
{
    public function init()
    {
        $this->title=CHtml::encode(Yii::app()->user->name);
        parent::init();
    }
 
    protected function renderContent()
    {
        $this->render('userMenu');
    }
}

UserMenu 클래스는 zii 라이브러리 클래스 인 CPortlet 클래스를 확장합니다. CPortlet 의 init() 메소드와 renderContent() 메소드를 오버라이드합니다. 전자는 포틀릿의 제목을 현재 사용자 이름으로 설정합니다.후자는 userMenu 라는 뷰를 렌더링함으로써 포틀릿의 본문 내용을 생성합니다.

팁: 먼저 CPortlet 클래스에 액세스하기 전에 Yii :: import () 를 호출하여 명시 적으로CPortlet 클래스를 포함시켜야한다는 점을주의하십시오. 이것은 CPortlet 이 zii 프로젝트의 일부이기 때문입니다 ( zii 는 Yii의 공식 확장 라이브러리입니다). 성능 고려 사항은 이 프로젝트에 속하는 클래스는 코어 클래스로 나열되지 않습니다. 따라서 처음 사용하기 전에 가져와야합니다.

2. userMenu 보기 만들기

다음 /wwwroot/blog/protected/components/views/userMenu.php 로 저장된 userMenu 뷰를 만듭니다.

<ul>
    <li><?php echo CHtml::link('Create New Post',array('post/create')); ?></li>
    <li><?php echo CHtml::link('Manage Posts',array('post/admin')); ?></li>
    <li><?php echo CHtml::link('Approve Comments',array('comment/index'))
        . ' (' . Comment::model()->pendingCommentCount . ')'; ?></li>
    <li><?php echo CHtml::link('Logout',array('site/logout')); ?></li>
</ul>

정보:기본으로, 위젯의 뷰 파일은 위젯 클래스 파일을 포함한 디렉토리 views 하위 디렉토리에 배치되어야합니다. 파일 이름은 뷰 이름과 같아야합니다.


3. UserMenu 포틀릿 사용

새롭게 완성 된 UserMenu 포틀릿을 사용할 때이 왔습니다. 레이아웃 뷰 파일 /wwwroot/blog/protected/views/layouts/column2.php 을 다음과 같이 변경합니다.

......
<div id="sidebar">
    <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>
</div>
......

상기는 widget() 메소드를 불러 UserMenu 클래스의 인스턴스를 생성하고 실행합니다. 이 포틀릿은 인증 된 사용자에게만 표시되어야하기 때문에 현재 사용자의 isGuest 속성이 false (이 사용자가 인증 된 것을 의미한다)의 경우에만 widget() 를 호출합니다.


4. UserMenu 포톨릿 테스트

지금까지 개발했던 내용을 테스트 합니다.

  1.  브라우저 창을 열고 URL http://www.example.com/blog/index.php 를 입력하십시오. 페이지의 사이드 바 섹션에 아무것도 표시되지 않는 것을 확인하십시오.
  2. Login 하이퍼 링크를 클릭하고 로그인 폼에 입력하여 로그인하십시오. 만약 로그인 성공하면, UserMenu 포틀릿이 사이드 바에 나타나 포틀릿 제목이 사용자 이름이 있는지 확인하십시오.
  3. UserMenu 포틀릿 '로그 아웃'링크를 클릭하십시오. 로그 아웃 동작이 성공하고 UserMenu 포틀릿이 사라지는 것을 확인하십시오

5. 정리
개발 한 포틀릿은 매우 재사용 가능성이 높은 것입니다. 다른 프로젝트에서 약간의 수정 또는 전혀 수정하지 않고 재사용 할 수 있습니다. 뿐만 아니라,이 포틀릿의 설계는 논리와 표현은 분리되어야한다는 철학에 충실히 따르고 있습니다. 이 점에 관해서 이전 섹션에서는 각별히 지적하지 않았지만, 전형적인 Yii 응용 프로그램에서는이 기술이 거의 모든 장소에서 사용되고 있습니다.