이 곳은 제가 개인적으로 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 응용 프로그램에서는이 기술이 거의 모든 장소에서 사용되고 있습니다.


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

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

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

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

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



태그 클라우드 포틀릿 생성 

  1. TagCloud 클래스 만들기
  2. TagCloud 포틀릿 사용

태그 클라우드 는 각 태그의 인기가 높음을 시사하는 시각적 효과와 함께 기사의 태그 목록을 표시하는 것입니다.

1. TagCloud 클래스 만들기
TagCloud 클래스 /wwwroot/blog/protected/components/TagCloud.php 파일로 만듭니다. 이 파일은 다음과 같습니다.

Yii::import('zii.widgets.CPortlet');
 
class TagCloud extends CPortlet
{
    public $title='Tags';
    public $maxTags=20;
 
    protected function renderContent()
    {
        $tags=Tag::model()->findTagWeights($this->maxTags);
 
        foreach($tags as $tag=>$weight)
        {
            $link=CHtml::link(CHtml::encode($tag), array('post/index','tag'=>$tag));
            echo CHtml::tag('span', array(
                'class'=>'tag',
                'style'=>"font-size:{$weight}pt",
            ), $link)."\n";
        }
    }
}

UserMenu 포틀릿과는 달리, TagCloud 포틀릿은 뷰를 사용하지 않습니다. 대신, 그 표현은 renderContent() 메소드에서 이루어집니다. 이유는 이것이 표현이 너무 많은 HTML 태그를 포함하고 있기 때문입다.

각 태그는 문서의 인덱스 페이지에 대한 하이퍼 링크 (해당 태그를 매개 변수로가집니다)로 표시됩니다. 각 태그 링크의 글꼴 크기는 다른 태그와의 상대적 가중치에 따라 조정됩니다. 만일 태그가 더 자주 기사에 나타나는 경우, 그 글꼴 크기는 더 커집니다.

2. TagCloud 포틀릿 사용
TagCloud 포틀릿의 사용은 매우 간단합니다. 레이아웃 파일 /wwwroot/blog/protected/views/layouts/column2.php 을 다음과 같이 수정합니다.

......
<div id="sidebar">
 
    <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>
 
    <?php $this->widget('TagCloud', array(
        'maxTags'=>Yii::app()->params['tagCloudCount'],
    )); ?>
 
</div>
......

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

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

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

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

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



최근 코멘트 포틀릿 생성 

  1. RecentComments 클래스 만들기
  2. recentComments 보기 만들기
  3. RecentComments 포틀릿 사용

이 섹션에서는 최근 등록 된 댓글 목록보기, 마지막 포틀릿을 만듭니다.

1. RecentComments 클래스 만들기
/wwwroot/blog/protected/components/RecentComments.php 파일 RecentComments 클래스를 만듭니다.이 파일은 다음의 내용입니다.

Yii::import('zii.widgets.CPortlet');
 
class RecentComments extends CPortlet
{
    public $title='Recent Comments';
    public $maxComments=10;
 
    public function getRecentComments()
    {
        return Comment::model()->findRecentComments($this->maxComments);
    }
 
    protected function renderContent()
    {
        $this->render('recentComments');
    }
}

위에서 호출하는 findRecentComments 메소드는 Comment 클래스에서 다음과 같이 정의됩니다.

class Comment extends CActiveRecord
{
    ......
    public function findRecentComments($limit=10)
    {
        return $this->with('post')->findAll(array(
            'condition'=>'t.status='.self::STATUS_APPROVED,
            'order'=>'t.create_time DESC',
            'limit'=>$limit,
        ));
    }
}

2. recentComments 보기 만들기

recentComments 보기 /wwwroot/blog/protected/components/views/recentComments.php 파일로 저장합니다. 이것은 단순히 RecentComments::getRecentComments() 메소드로 반환되는 의견 하나 하나를 표시합니다.

3. RecentComments 포틀릿 사용

 레이아웃 파일 /wwwroot/blog/protected/views/layouts/column2.php 수정이 포틀릿을 포함합니다.

......
<div id="sidebar">
 
    <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>
 
    <?php $this->widget('TagCloud', array(
        'maxTags'=>Yii::app()->params['tagCloudCount'],
    )); ?>
 
    <?php $this->widget('RecentComments', array(
        'maxComments'=>Yii::app()->params['recentCommentCount'],
    )); ?>
 
</div>
......

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

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

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

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

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



URL 아름답게 하기

지금은 블로그 애플리케이션의 다양한 페이지를 링크 된 URL은 형편없는 것입니다. 예를 들어, 게시물을 표시하는 페이지의 URL은 다음과 같이되어 있습니다 

/index.php?r=post/show&id=1&title=A+Test+Post

이 섹션에서는 이러한 URL을보기 좋은 SEO-friendly 방법을 설명합니다. 목표는 응용 프로그램에서 다음과 같은 URL을 사용할 수있게하는 것입니다 

  1. /index.php/posts/yii : yii 라는 태그가있는 문서 목록을 표시하는 페이지로이 연결됩니다.
  2. /index.php/post/2/A+Test+Post : ID가 2이고, 제목이 A Test Post 인 문서 내용을 표시하는 페이지로이 연결됩니다.
  3. /index.php/post/update?id=1 : ID가 1 인 기사의 업데이트를 허용하는 페이지로이 연결됩니다.

두 번째 URL 형식에서는 URL에 기사 제목을 포함하고있는 것에 주목하십시오. 이는 주로 URL을 SEO friendly 하기위한 것입니다. 검색 엔진은 색인 작성 중에 URL에 포함 된 단어도 볼 수 있다고합니다.

목적을 달성하기 위해서는 응용 프로그램 초기 구성 을 아래와 같이 수정합니다.
return array(
    ......
    'components'=>array(
        ......
        'urlManager'=>array(
            'urlFormat'=>'path',
            'rules'=>array(
                'post/<id:\d+>/<title:.*?>'=>'post/view',
                'posts/<tag:.*?>'=>'post/index',
                '<controller:\w+>/<action:\w+>'=>'<controller>/<action>',
            ),
        ),
    ),
);

위에서, urlManager 구성 요소의 구성을 변경하고 urlFormat 속성을 path 로 설정하고 일련의 rules 를 추가합니다.

urlManager 이 규칙을 사용하여 우리가 원하는 형식의 URL을 해석하고, 또한 생성합니다. 예를 들어, 두 번째 규칙은  /index.php/posts/yii 라는 URL이 요청 된 경우에는 urlManager 이 요청을 post/index 라는루트 (route) 에 전달하여 yii 라는 값 tag 는 GET 인수 를 생성하는 것을 말합니다. 또 한편으로는 post/index 라는 루트와 tag 인자로 URL을 생성하는 경우에도 urlManager 구성 요소는이 규칙을 사용하여 우리가 원하는 /index.php/posts/yii 하는 URL을 생성할수 있습니다. 이 같은 것이기 때문에, 우리는 urlManager는 양방향 URL 매니저라고합니다.

urlManager 구성 요소는 URL에서 index.php 를 보이지 않게하거나 . html 과 같은 확장자를 URL에 추가하거나하여 URL의 모양을 더 잘 할 수 있습니다. 이 기능은 어플리케이션에 초기 구성에서 urlManager 의 다양한 속성을 구성하면 쉽게 손에 넣을 수 있습니다. 자세한 내용은 가이드 를 참조하십시오.


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

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

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

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

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



에러로깅

프로덕션 웹 어플리케이션은 종종 다양한 이벤트에 대한 정교한 로깅이 필요합니다. 우리의 블로그 어플리케이션에서도 사용 중 발생하는 오류를 기록하고 싶습니다. 오류는 프로그램의 실패이거나 사용자가 시스템의 무단 사용 등이있을 수 있습니다. 이러한 오류를 기록하는 것은 블로그 어플리케이션을 개선하는 데 도움이됩니다.

응용 프로그램 초기 구성 을 아래와 같이 변경하여 오류 로깅을 활성화합니다.

return array(
    'preload'=>array('log'),
 
    ......
 
    'components'=>array(
        'log'=>array(
            'class'=>'CLogRouter',
            'routes'=>array(
                array(
                    'class'=>'CFileLogRoute',
                    'levels'=>'error, warning',
                ),
            ),
        ),
        ......
    ),
);

위의 구성은 오류 또는 경고가 발생한 경우에 자세한 정보가 기록되고 //wwwroot/blog/protected/runtime 디렉토리 아래의 파일에 저장됩니다.

log 구성 요소는 지정된 목록의 메일 주소에 로그 메시지를 보내거나 로그 메시지를 JavaScript 콘솔 창에 표시하거나, 더 많은 기능을 제공합니다. 자세한 내용은 가이드 를 참조하십시오.

+ Recent posts

티스토리 툴바