> 백엔드 개발 > PHP 튜토리얼 > Octobercms 확장 - 소프트 벨트 플러그인 구축

Octobercms 확장 - 소프트 벨트 플러그인 구축

Joseph Gordon-Levitt
풀어 주다: 2025-02-10 10:21:14
원래의
1053명이 탐색했습니다.

Extending OctoberCMS - Building a Soft-Delete Plugin Octobercms : 플러그인 확장 성 및 플러그인의 실용적인 소프트웨어 제거

개발자는 일반적으로 사용하기 쉬운 CMS를 선호합니다. Octobercms는 먼저 단순성 개념을 준수하여 개발자와 사용자에게 즐거운 경험을 제공합니다. 이 기사는 Octobercms의 확장 가능한 기능 중 일부를 보여주고 간단한 플러그인으로 다른 플러그인의 기능을 확장합니다. <p> </p> <p> </p> 키 포인트 <p> <img src="/static/imghw/default1.png" data-src="https://img.php.cn/upload/article/000/000/000/173915407726539.jpg" class="lazy" alt="Extending OctoberCMS - Building a Soft-Delete Plugin "> <ms> Octobercms는 단순하고 사용하기 쉬운 CM을 제공하면서 플러그인을 통해 확장을 허용합니다. 이 확장 성은 개발자가 다른 개발자 플러그인의 기능을 수정하는 것을 포함하여 CMS의 내부 메커니즘에 침투 할 수있는 정도에 반영됩니다. </ms></p> <ab> Rainlab 블로그 플러그인을 사용하면 기사를 만들어 다른 범주에 할당 할 수 있습니다. 이 튜토리얼은이 플러그인을 확장하고 소프트 삭제 기능을 추가하여 기사가 영구적으로 삭제되는 것을 방지하고 대신 "삭제 된"것으로 표시하고 타임 스탬프를 기록하는 방법을 보여줍니다. <h2> <soft> 소프트 삭제 기능을 만들려면 새 플러그인을 만들고 데이터베이스에 </soft> </h2> 필드를 추가해야합니다. 이 필드는 기사 삭제의 타임 스탬프를 저장합니다. 그런 다음 플러그인은이 새로운 필드를 열로 포함하도록 기사 목록을 확장하고 삭제 된 기사를 표시하거나 숨기는 필터를 추가합니다. <ul> <in> 소프트 삭제 함수를 만드는 마지막 단계는 기사의 삭제 작업을 가로 채고 <li> 열을 업데이트하는 것입니다. 이것은 웅변에 의해 트리거 된 </li> 이벤트에 부착하여 레코드의 삭제를 방지함으로써 수행됩니다. 대신, <li> 필드는 현재 타임 스탬프로 업데이트되고 레코드가 저장됩니다. </li> <li> <code>deleted_at</code> 소개 <has> 각 CMS에는 플랫폼의 기능을 확장하는 플러그인 시스템이 있으며 CMS의 내부 메커니즘에 침투 할 수있는 정도로 확장 성을 측정합니다. 그러나 우리는 CMS 자체뿐만 아니라 플러그인에 대해서도 이야기하고 있습니다! </has> </li> <a> 플러그인을 빌드하는 경우 다른 개발자가 일부 기능을 수정할 수 있는지 확인해야합니다. 예를 들어, 목록에서 기사를 선택하여 사용자가 기사를 게시 할 수있는 블로그 플러그인이 있습니다. 새 기사가 게시되었음을 나타내는 이벤트를 트리거하는 것이 가장 좋습니다. 다른 개발자는이 이벤트에 장착하여 이메일을 통해 가입자에게 알릴 수 있습니다! <li> <code>deleted_at</code> <can> 다른 개발자들은이 행사를들을 수 있으며 게시 된 기사를 처리 할 수 ​​있습니다. <code>deleting</code> <code>deleted_at</code> <ly> 우리는 주로 이벤트를 사용하여 요청 사이클의 다른 부분에 연결합니다. 더 잘 이해하기 위해 구체적인 예로 시작합시다. </ly></can> </li> <blog> Rainlab 블로그 플러그인 <used> Octobercms를 잠시 사용한 경우 Rainlab 블로그 플러그인에 대해 알아야합니다. 백엔드에 기사를 추가하여 카테고리에 첨부 할 수 있으며 구성 요소를 사용하여 프론트 엔드에 표시 할 수 있습니다. </used></blog></a></in> </ul> <list> 기사 목록 페이지에서 기사를 삭제할 수 있습니다. 그러나 부드럽게 삭제하고 싶다면 어떻게해야합니까? 이 작업을 수행 할 수 있는지 확인하고 Octobercms 확장성에 대해 자세히 알아 보겠습니다. <h2><plug> 새 플러그인을 만듭니다 <plug> 스캐 폴딩 어시스턴트 명령을 사용하여 데모 용 새 플러그인을 만들고 플러그인 .php 파일에서 플러그인 세부 정보를 업데이트하십시오. <h2> </h2> <ab ab> 확장 데이터베이스 모드 <soft> 소프트 삭제에 대해 이야기 할 때 가장 먼저 떠오르는 것은 데이터베이스에 존재 해야하는 <p> 필드 열입니다. </p> <file> 라는 새 파일을 만들고 파일을 업데이트하십시오. <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>class Posts extends Controller { public function index_onPublish() { if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) { foreach ($checkedIds as $postId) { if ((!$post = Post::find($postId)) || !$post->canEdit($this->user)) continue; $post->publish(); Event::fire('rainlab.blog.posts.published', [$post]); } Flash::success('Successfully published those posts.'); } return $this->listRefresh(); } }
로그인 후 복사
로그인 후 복사

클래스를 마이그레이션하면 <🎜 🎜> 테이블을 변경하고 <🎜 🎜> 열을 추가합니다. 변경 사항이 적용되도록 명령을 실행하는 것을 잊지 마십시오.

확장 된 기사 목록 <🎜 🎜> 다음은 필드를 표시 목록에 열로 열로 추가해야합니다. Octobercms는 현재 표시된 위젯을 장착하고 변경할 수있는 이벤트를 제공합니다 (백엔드 목록은 위젯으로 간주 됨). deleted_at

참고 : 위의 코드는

메소드에 배치해야합니다. blogplus/updates 우리는 각 페이지에서 코드가 실행되는 것을 방지하기위한 if 문이 있으며, 그런 다음 목록 위젯에 새 열을 추가하고 create_posts_deleted_at_field.php 메소드를 사용하여 기존 열을 삭제할 수도 있습니다. 사용 가능한 열 옵션 목록은 문서를 확인하십시오. version.yaml

<<>
Event::listen('rainlab.blog.posts.published', function($post) {
    User::subscribedTo($post)->each(function($user) use($post) {
        Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) {
            $message->from('us@example.com', 'New post by ' . $user->name);

            $message->to($user->email);
        });
    });
});
로그인 후 복사
로그인 후 복사
확장 필터 <🎜 🎜> 기사 목록 상단의 열을 통해 사용자는 날짜, 카테고리 등을 사용하여 목록을 필터링 할 수 있습니다. 우리의 경우 삭제 된 기사를 표시/숨기기위한 필터가 필요합니다.
php artisan create:plugin rafie.blogplus
로그인 후 복사

문서에서 목록 필터에 대한 자세한 내용을 읽을 수 있습니다. 위의 코드는 매우 간단하며 몇 가지 옵션 만 포함되어 있습니다. 그러나 rainlab_blog_posts 속성은 <🎜 🎜> 모델 인스턴스에 정의 된 쿼리 스코프 메소드의 이름이어야합니다. deleted_at 확장 가능한 클래스 <🎜 🎜> OctoberrainextensionextendableTrait 특성은 새로운 메소드, 속성, 동작 등을 추가하여 기존 클래스를 동적으로 확장 할 수있는 php artisan plugin:refresh rafie.blogplus Magic

메소드를 제공합니다. 이 예에서는 스코프 필터를 처리하기 위해 기사 모델에 새 메소드를 추가해야합니다.

우리는

,

등에 대해 똑같이 할 수 있습니다. 기사 목록을 새로 고쳐서 변경 사항이 작동하는지 확인합시다.
# updates/version.yaml

1.0.1:
    - First version of blogplus.
    - create_posts_deleted_at_field.php
로그인 후 복사
<🎜 🎜> <<>

Plugin@boot 물론 는 마지막 부분을 완료해야하기 때문에 아직 삭제 된 기사가 없습니다. 기사의 삭제 작업을 가로 채고

열만 업데이트해야하기 때문입니다.

팁 : <🎜 🎜> 속성을 ​​사용하는 대신 조건을 사용하여 간단한 위치 조건을 지정할 수 있습니다. 다음 코드는 모델 범위를 사용하는 것과 동일하게 작동합니다.

scope 웅변 이벤트 <🎜 🎜> 레코드를 삭제할 때 실제 삭제 작업이 수행되기 전에 <🎜 🎜> 이벤트가 트리거되고 <🎜 🎜> 이벤트가 나중에 트리거됩니다. 이벤트에서 False를 반환하면 작업이 중단됩니다.

class Posts extends Controller
{
    public function index_onPublish()
    {
        if (($checkedIds = post('checked')) && is_array($checkedIds) && count($checkedIds)) {

            foreach ($checkedIds as $postId) {
                if ((!$post = Post::find($postId)) || !$post->canEdit($this->user))
                    continue;

                $post->publish();
                Event::fire('rainlab.blog.posts.published', [$post]);
            }

            Flash::success('Successfully published those posts.');
        }

        return $this->listRefresh();
    }
}
로그인 후 복사

이제 우리는 최종 결과를 테스트 할 준비가되었습니다! 일부 레코드를 계속 삭제 한 다음 기사 목록 페이지로 이동하여 목록에서 삭제 된 항목을 전환 할 수 있는지 확인하십시오.

결론 <🎜 🎜> 이 기사는 Octobercms 플랫폼의 다른 부분을 확장하는 방법에 대한 빠른 개요를 제공합니다. 문서의 확장 플러그인 섹션에서 자세한 내용을 읽을 수 있습니다. 질문이나 의견이 있으시면 아래 메시지를 남겨주세요!

옥토버스를 확장하고 소프트 삭제 플러그인을 구축하는 것에 대한 FAQ <🎜 <🎜 <🎜

Octobercms에서 소프트웨어 제거 플러그인의 목적은 무엇입니까? deleting Octobercms의 Soft Delete 플러그인은 영구 데이터 손실을 방지하도록 설계되었습니다. 레코드를 삭제하면 데이터베이스에서 완전히 삭제되지 않습니다. 대신, a deleted 타임 스탬프가 레코드에 맞게 설정됩니다. 이는 응용 프로그램의 관점에서 레코드가 "삭제 된"것으로 간주되지만 필요한 경우에도 검색 할 수 있음을 의미합니다. 이는 쉽게 복구 할 수 있으므로 실수로 데이터를 삭제할 수있는 시나리오에서 특히 유용합니다. deleting 소프트 삭제와 하드 삭제의 차이는 어떻습니까?

하드 삭제는 데이터베이스에서 레코드를 영구적으로 삭제하고 백업이 없으면 복원 할 수 없습니다. 반면에 소프트 삭제는 단순히 레코드를 삭제 된 것으로 표시하고 실제로 데이터베이스에서 삭제하지 않습니다. 이를 통해 필요한 경우 레코드를 복구 할 수 있습니다.
Event::listen('rainlab.blog.posts.published', function($post) {
    User::subscribedTo($post)->each(function($user) use($post) {
        Mail::send('emails.notifications.post-published', ['user' => $user, 'post' => $post], function($message) use($user, $post) {
            $message->from('us@example.com', 'New post by ' . $user->name);

            $message->to($user->email);
        });
    });
});
로그인 후 복사
로그인 후 복사
Octobercms에서 소프트 삭제 기능을 구현하는 방법은 무엇입니까?

Octobercms에서 Soft Delete 기능을 구현하려면 플러그인을 만들어야합니다. 여기에는 새 플러그인 작성, 데이터베이스 테이블에 열을 추가하고 특성을 사용하도록 모델을 업데이트하는 것이 포함됩니다. 그런 다음 모델의 메소드를 사용하여 레코드를 소프트로 삭제하고 메소드를 사용하여 복구 할 수 있습니다.

Octobercms에서 소프트 삭제 기능을 테스트하는 방법은 무엇입니까?

단위 테스트를 만들어 소프트 삭제 기능을 테스트 할 수 있습니다. 여기에는 새로운 테스트 케이스 작성, 데이터베이스에서 새 레코드 생성, 소프트로 삭제 한 다음 데이터베이스에 여전히 존재하지만 삭제 된 것으로 표시됩니다.

기존 레코드와 함께 소프트 삭제 기능을 사용할 수 있습니까?

예, 기존 레코드와 함께 소프트 삭제 기능을 사용할 수 있습니다. 기존 데이터베이스 테이블에

열을 추가하면됩니다. 기존의 모든 레코드에 대한이 열에는

값이 삭제되지 않았 음을 나타냅니다.

Octobercms에서 소프트 삭제 된 레코드를 복구하는 방법은 무엇입니까?

소프트 삭제 된 레코드를 복구하려면 모델에서

메소드를 사용할 수 있습니다. 이렇게하면 레코드에서 타임 스탬프가 제거되어 효과적으로 "실패"됩니다.

Octobercms에서 소프트 삭제 된 레코드를 영구적으로 삭제할 수 있습니까? restore 예, 모델의 deleted_at 메소드를 사용하여 소프트 삭제 된 레코드를 영구적으로 삭제할 수 있습니다. 이것은 하드 삭제와 같은 데이터베이스에서 레코드를 삭제합니다.

Octobercms에서 소프트 삭제 된 레코드를 포함한 모든 레코드를 보는 방법은 무엇입니까?

소프트 삭제 된 레코드를 포함한 모든 레코드를 보려면 모델에서

메소드를 사용할 수 있습니다. 이것은 소프트 삭제되었는지 여부에 관계없이 모든 레코드를 반환합니다.

Octobercms에서 forceDelete 열의 이름을 사용자 정의 할 수 있습니까?

예, 모델에서 메소드를 덮어 쓰면

열의 이름을 사용자 정의 할 수 있습니다.

가 귀하의 요구에 적합하지 않은 경우 다른 열 이름을 사용할 수 있습니다.

Octobercms의 특정 레코드에 대해 소프트 삭제 기능을 비활성화 할 수 있습니까? withTrashed 예, 모델의 메소드를 사용하여 일부 레코드의 소프트 삭제를 비활성화 할 수 있습니다. 이를 통해 소프트 삭제 기능에서 특정 레코드를 제외 할 수 있습니다.

위 내용은 Octobercms 확장 - 소프트 벨트 플러그인 구축의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 추천
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿